Aha. To zni podezrele jednoduse.
Zkusim to parafrazovat - zakaldemje ze mame znamy prvotni slovnik, kde kazda osmibitova kombinace ma kod.. osmibitovy. (v clanku pises znak - coz mi zni spatne neb komprimujeme i binarky, proto to pisu tak divne)
Ted tedy dekomprimuji - najedu neznamy kod (pro TR) a jelikoz znam kody T a R, pak si domyslim TR? Ne to nezni spravne...
Kod pro TR se tedy nemuze objevit dokud se neobjevi T i R? Asi ano.. pak to dava smysl...
Prosim jeste doupresnuj. Je to zajimavy trik.
Zkusím, co je na tom možná neintuitivního. Jak při kompresi, tak při dekompresi, se vytváří slovník z toho co bylo, BEZ OHLEDU na fakt, zda je to prospěšné či není.
- Takže přijde "T" - to už je ve slovníku, to je základní písmeno.
- Přijde "R" - podíváme do slovníku zda máme "TR", nemáme, takže na výstup musíme dát stále ještě jen čisté "R" (to už je ve slovníku, to je základní písmeno). A do interního slovníku, pro tento soubor a tuto kompresi, přidáme "TR", pokud bychom ho MOŽNÁ NĚKDY PŘÍŠTĚ během této (de)komprese uviděli, můžeme použít jako unikátní zakódované slovo.
Důsledky:
- První výskyt "TR" ještě není zakódovaně přímo, ale jako jednotlivá písmena, takže žádná úspora při prvním výskytu.
- Pokud se dané slovo (sekvence) vyskytuje jen jednou, nebo málo často, akorát nám zabírá místo ve slovníku (a unikátní kód) naprosto zbytečně.
- Proto to dobře funguje na delší běžný psaný text (opakující se stejná slova, sekvence), delší zdrojáky a podobně, méně kvalitně pak na binární věci.
- Interní slovník se po každé jednotlivé kompresi (každém jednom souboru) zahodí a jinde využívaný není. Některé kompresní programy to mají jinak, slovníky mohou zachovávat přes více souborů (má to výhody i nevýhody), ale v ZIP se slovník zahazuje a vždy vytváří znovu.
Cau! Jo to je dobre doplneni. diky.
Dve doplnujici otazky
1) zakaldani slovnik ma 255 "znaku", tedy obsahuje vsechny byty. Na pozici 256 bude kod prvniho dvoubytove kombinace. oook? Na pozici 257 pak dalsi dvoubytvoa kombinaci priapdne prvni trojbytova. oook?
2) dekomprese - tedy restrukturalizace slovniku - najdu kod 0-255 to je jednoduche, v okamziku kdy najdu vyssi, tak se podivam tim stromem nahoru, z ceho byl ten "znak" slozen?
Diky za trpelivost!