Izvajanje opombe

Link: http://www.math.tau.ac.il/~rshamir/GR/implementation.html

Izvajanje opombe

Kode
Prihodnji razvoj

Kode

Zakaj Applet
Odločila sem se, da izvajajo to orodje kot aplet, ker omogoča enostaven dostop do kogarkoli od kjerkoli, da to orodje. To je prva izvajanje tega algoritma (kolikor vem) in ker je ta algoritem je najhitrejši za ta problem, menim, da ta enostavno dostopna kot eden od najbolj pomembnih lastnosti za to orodje. Glavne slabosti apletov (glede na vloge) varnostnih omejitev dostopa datotek (ni dostopa datotek) ali krive dos ukazne vrstice. Iz tega razloga sem dodal statistični način, da bi omogočili dobro oceno odprave razdalji a permutaciji v odvisnosti od njegove velikosti.

Zakaj java
Izvajanje je bilo v Javi in kodeks je na voljo na tukaj. Glavni razlogi za izbiro Java je udobno GUI izvajanje in preprostostjo priprave aplet. Najbolj problematičen vidik Java, učinkovitost, je postal skoraj nepomembna za učinkovitost algoritma in (relativno) majhno velikost pričakovanih vhod (ne genomsko čisto podatkov milijone ali milijarde znanja parih, ampak na stotine ali tisoče genomskih regij predstavlja kot podpisano permutaciji). Merjenje časa algoritma na teh vhod velikosti, ki se meri v sekundah (za hiter način).
Grafični Uporabniški Vmesnik razredov

Ti razredi niso tako zelo zanimivo. Vsebujejo GUI izvajanje in so veliki in enostavno)

  • GR_applet.java – Ta razred vsebuje izvajanje uporabniškega vmesnika za uporabo algoritma. Ta razred predstavlja glavno pogovorno okno in omogočajo visoko stopnjo funkcionalnosti orodja (izberite način, izberite permutaciji, teče algoritem, itd.)
  • AnalysisFrame.java – Ta razred vsebuje izvajanje „nizko“ funkcionalnost orodje, tj., podrobne analize obravnavanega permutaciji, da vsebuje seznam različnih lastnosti in risbi prelomnih točk grafa.

Algoritem in njegov pomožni razredi

  • GR.java – visoke ravni izvajanja Genoma Preureditev algoritem. Najbolj interakcije med GUI razrede in algoritem razredih je skozi ta razred. Ta razred „znanje“, je glavni tok algoritem (kot počistite ovire, ali je bil vesel clique). Uporablja OVGraph razred za zagon algoritma.
  • OVGraph.java – Prekrivanje Graf razred. To je glavni razred algoritma (nizke ravni izvajanja algoritma). Ta razred ne večino dela in ima zelo specifične funkcionalnosti. Ta razred ni neodvisna in se lahko uporablja samo s svojo „vmesnik“ – GR razred.
  • C_component.java – povezana komponenta v Prekrivajo Graf
  • Permutation.java – permutaciji
  • Vračilo.java – majhen razred preobrat

Splošne razredov

Ni v druge skupine razredov

  • Statistics.java – izvajanje statističnih način programa (ki se uporablja za GR_applet)

Prihodnji razvoj

Serija mode
Kot sem poudaril, pred, orodje ne more teči v svežnjih zaradi varnostnih omejitev, ki apletov so (po vseh, nihče si ne želi, da nekaj (aplet v našem primeru), ki obstaja v spletno stran, ki je po nesreči naložen, bo potekal ukazne vrstice „del C:\*.*“ ali celo branje datotek in jih poslati na ustvarjalca). Način, kako spremeniti to orodje za paketni način orodje (da, na primer, se bere kot 10.000 podpisana permutacij v določenem formatu in zagon algoritma na vsakega izmed njih) ni tako zelo zapleteno. Vsebuje naslednje faze:

  1. Izgradnjo odtisov razred z naslednjimi metodami: Odtisov(String imedatoteke), da se odpre datoteko za branje, Platform (), ki prebere vrstico poleg tistega, ki je prebral v zadnjih klicev in zapri (), ki zapre datoteko. Datoteko lahko zgradil preprost skript v vsakem skript jezik.
  2. Razumeti interakciji GR_applet razred z GR razred. To je najbolj pomembna faza pretvorbe. GR dobave dober vmesnik in GR_applet koda uporablja ta vmesnik. Pridobivanje razveljavitve (storni) zaporedje je enostaven za izgradnjo GR predmet in uveljavljanje GR::run(). Pridobivanje lastnosti permutaciji je mogoče storiti z nekaj preprostih metod Permutaciji razred. Večina na voljo metode, ki se uporabljajo v Statistiki razred (s GR::getPermutation in nato Permutaciji::getBreakpointsNumber, Permutaciji::getCyclesNumber, …), in je priporočljivo, da si o tem oddelku preveč.
  3. Napisati aplikacijo Java,, da dobi vsaj en parameter (ime datoteke) in vsebuje glavne zanke, ki dobi permutaciji (prek Bralnika) in ročaji. To ravnanje ponavadi vsebujejo teče algoritem (z GR::run()) in dobili razveljavitve (storni) nizi ali analizo lastnosti prekrivanje graf (z GR::getPermutation in nato Permutaciji::getBreakpointsNumber, Permutaciji::getCyclesNumber, …).

Prihodnji razvoj
Orodje, ki oskrbuje vse razumne funkcionalnost sem lahko zamislite. Večina možnih izboljšav, ki so v GRAFIČNI vidik, in nekaj v učinkovitosti vidik.
Kot vedno, ko building program, brez posebnih ciljev večino funkcionalnosti orodja, ki so bila dodana v zadnji fazi programiranja. Ker je program ščit je bila dobro oblikovani (sem preživel večino časa stavbe in izboljšuje) je postalo precej enostavno, da izboljša funkcionalnost v kratkem času, še posebej v GUI strani. Na žalost, nisem imel neomejeno količino časa in kljub izboljšanju projekt postal enostaven projekt je začel svojo oddajo fazi naredil sem le del možne izboljšave jaz bi lahko pomislili.

Možnosti za izboljšave:

  • Grafični Uporabniški Vmesnik
    • orodje ima 2 glavni windows z delno dvojno funkcionalnost. Kot vidim, da je najboljši način za izvajanje orodje za deljenje funkcionalnost na 2 dela. Drugega, ki bo vsebovala vse funkcionalnosti, ki je na voljo na eni permutaciji (vključno z uporabniškimi odprave) in bo v Analizi Okvir. Prvi bo vseboval ostalo (tj., funkcionalnost, dokler ne obstaja začetno permutaciji) in bo v Aplet. Razlog nisem naredil sam, da je analiza okvir začel kot preprost poročilo o obliki besedila in pozneje sem dodal risanje in gumbi. Ko sem ugotovil, da je zelo udobno, da delujejo skozi algoritem, ki ta okvir, je bilo že prepozno za spremembe.
    • Omogoči uporabniku, da izbere preobrat s klikom na 2 točk.
    • Prikaži prelomnih točk grafa.
  • Učinkovitosti
    • V trenutni različici graf je sestavljen iz nič v posamezne spremembe. Jaz sem uporabila dvojno medpomnjenje mehanizma, da bi se izognili utripanja, vendar to vzame preveč časa, še posebej za velike grafov. To je mogoče izboljšati z risanjem „delta“ (simetrični differenc) namesto črpanja iz nič. Delta je mogoče doseči z novo metodo OVGraph predmet (na bolje, vendar bolj zapleteni) ali s primerjavo starih graf z novim (ročaj le GUI razredov, vendar manj učinkovito). Drugi pa bo verjetno dovolj. Ko imajo delta to je enostavno, da „pripravi“ belo robovi za brisanje robovi in barvne robove za novo (in barvo spremenila) robovi.
    • enako velja za pop-up meniji, ki kažejo pravne razveljavitve (storni) uporabnik lahko izvede. V trenutni različici meniji so izpraznil in napolnil iz nič. Bo bolje, če menijev bo treba posodobiti z delta sprememb. Nisem prepričan, da je možno v vseh primerih, pa vsaj zmanjšanje elementov v meniju, se bo hitreje na ta način.
    • sem uporabil preprost algoritem (DFS) za delitev se prekrivajo graf povezane komponente. V členu Berman in Hannenalli je opis hitreje sub algoritem za ta problem. Izvajanje tega podpoglavja, algoritem, ki bi lahko zmanjšali najslabšem primeru zahtevnost algoritma (od O(N^2) O(N*(N)+r*N), ko je r je odprava razdalje in je Ackermann funkcija). Iz moje analize algoritma je delo tega izboljšanja ne bo bistveno izboljšanje orodje pričakovano učinkovitost, saj se je večina od permutacij (lahko preverite z statistika mode) os velikost N imajo odprave razdaljo, ki je zelo blizu N. Ker je zelo redko, da bi našli permutaciji z odprave razdalja manjša kot N/2 kompleksnosti ni pričakovati, da bi bistveno izboljšali.