Предварително зададеният речник полезен ли е само за първите 32 K байта данни?

Просто исках да използвам предварително зададен речник с моя компресор и декомпресор. Прочетох тук този предварително зададен речник е полезно само за първите 32K байта данни и след това най-новите 32K данни се използват като речник. Вярно ли е? Пропускам ли нещо тук?


person Chinna    schedule 01.04.2015    source източник


Отговори (1)


Това е правилно, предварително зададеният речник се използва като виртуален вход към декомпресора, който е обработен преди действителния компресиран вход, така че може да използва компресирани кодове, за да репликира части от него.

Алгоритъмът за дефлиране на zlib използва прозорец с размер до 32 KB, за да се позовава на декомпресирани преди това байтове - части от този прозорец и байтови литерали са всичко, което може да използва за декомпресия. Предварително зададеният речник само инициализира този прозорец, но данните там ще бъдат "изместени" от реалните декомпресирани данни, така че само първите 32K байта данни могат да използват намаляваща част от предварително зададения речник.

person schnaader    schedule 01.04.2015
comment
Благодаря за бързия отговор. Това означава, че предварително зададеният речник не може да ни помогне при компресирането. - person Chinna; 01.04.2015
comment
Още едно пояснение: Ако използвам предварително зададен речник с речников низ aaaaaaa. Разполагам с моите данни, които съдържат този низ съответно при отместване 16K, 34K и 66K. Според вашия отговор той използва предварително зададен речник за низ, който е с 16K отместване. Но какво да кажем за 34K отместване, тъй като е дълго 34K байта от предварително зададения речник и не може да препрати това, но е дълго 18K от първата препратка на низа и може да препрати това. Така че използва ли първата препратка или създава нова в този случай. - person Chinna; 01.04.2015
comment
@Chinna: Да, наистина, в такива случаи, когато низовете от предварително зададения речник ще се появят по-късно в декомпресираните данни, те се появяват отново в прозореца и могат да бъдат препратени по-късно. Както и да е, тази втора препратка може да се направи и без предварително зададен речник, така че предварително зададеният речник помага само за първото появяване на низа. - person schnaader; 01.04.2015
comment
повторно появяване означава, 1-ва инстанция се отнася за речника, 2-ра инстанция се отнася за 1-ва инстанция. Така че това означава, че 2-ри пример индиректно се отнася до речника, нали? Ако няма речник, при 1-ва инстанция той се заменя сам при 2-ра инстанция. Ако има речник, 2-ра инстанция замени с речник, нали? Моля, предоставете ми всеки документ, който обяснява предварително зададения речник. - person Chinna; 01.04.2015