Open kotommi opened 5 years ago
Testasin vielä ohjelmaa isommalla syötteellä ja se on todella hidas. Kannattaa tosiaan miettiä miten ohjelmasta saa tehokkaamaan. Tuossa purkamisvaiheessa growByteArrayWithOne-metodin kutsuminen moneen kertaan on todennäköisesti suurin vaikuttaja nopeuteen(hitauteen?). Nyt kopioit taulukon joka kerta ennen kuin lisäät sinne yhden alkion joka on todella raskasta kun syötekoko kasvaa. Joku dynaaminen taulukko kuten Javan ArrayList olisi varmaan sopiva tähän käyttötarkoitukseen.
tomko@kupo:~/tira/hydraulic-press/hydraulic-press$ gradle run
> Task :run
original: 1810827
starting to compress
appends: 1810827
compressed: 1808048
compression done, took: 371seconds
uncompressed:1810827
decompression done, took: 181 seconds
BUILD SUCCESSFUL in 9m 12s
Tässä linkki nopeasti häkättyyn mainiin jota käytin gist Tuosta isosta pakkauskoosta ei kannata välittää koska tiedosto oli (jo valmiiksi pakattu) pdf.
Noudettu 11.4. klo 18 26e2679
Ylipäätään koodisi on luettavaa ja jaettu Javamaisiin kokonaisuuksiin. Osa bittimagiasta olisi ehkä tarvinnut kommentteja.
Ainoa toteutukseen liittyvä ongelma minkä huomasin on BitBlobin append-metodin kutsuminen monta kertaa joka ei ole kovin kevyt operaatio, koska luot uudet ja kopiot niiden sisäiset taulukot todella monta kertaa. Onnistuisiko tässä jokin toinen tapa jossa ensin keräät yksittäiset bittijonot kokoelmaksi ja lopuksi konkatenoisit ne kerralla?
Jos lisäät seuraavat rivit build.gradle-tiedostoon niin ohjelman voi ajaa komennolla gradle run. gradlen luoman 'portable executable'n gradlew voisi sisällyttää projektiin niin silloin toisten olisi helpompi aloittaa projektin käyttö.
Projekti ei kääntynyt koneellani checkstylen errorien takia. Kannattaa vaihtaa sen asetuksista errorit warningeiksi jos ei viilaa niitä heti pois.
Checkstylen korjattuani tämä testi ei mennyt läpi:
Mutta kun kommentoin sen pois ohjelma näytti toimivan testisyötteellä. (Tai no se räjäytti ide:ni terminaalin, mutta toimi normaalilla terminaaliemulaattorilla. En usko että se on ohjelmasi vika) Vika testissä on rivillä 45 ja sain sen korjattua ja toimimaan.
BitBlob-luokan rivi 42 yksinkertaistuu
Huffman-koodauksen otsake näyttää aika isolta, mutta toisaalta se nyt toimiva toteutus ja sitä voi optimoida myöhemmin jos aikaa jää. Yksi tapa on käyttää kanonista Huffman-koodausta tai käydä puu läpi jollain tavalla ja kirjoittaa vain koodisanat ja solmut sinne. Esim. puumuodolla saa viilattua yli tavun per merkki otsakkeessa.