LZ77 і LZ78, алгори́тм Ле́мпеля — Зі́ва (англ. Lempel–Ziv algorithm) — універсальний алгоритм стискування даних без втрат, створений у 1977—1978 роках Авраамом Лемпелем і Яковом Зівом. Алгоритм розроблений так, щоб його можна було швидко реалізувати, але він не обов'язково є оптимальним, оскільки не проводить жодного аналізу вхідних даних. 1984 року Террі Велчем опублікована покращена реалізація алгоритму LZ78 — алгоритм Лемпеля — Зіва — Велча (англ. Lempel–Ziv–Welch algorithm, LZW).
Історія виникнення
Більше тридцяти років алгоритм стиснення Хаффмана і його варіанти залишалися найпопулярнішими методами. Проте 1977 року ізраїльскі дослідники Авраам Лемпель і Яків Зів запропонували абсолютно інший підхід до цієї проблеми, висунувши ідею формування «словника» загальних послідовностей даних.
При цьому стиснення даних здійснюється за рахунок заміни записів відповідними кодами із словника. Існують два алгоритми стиснення даних — LZ77 і LZ78. Вони вже не вимагають включення словника даних в архів, оскільки якщо ви формуєте ваш словник визначеним способом, програма декодування може його відновлювати безпосередньо з ваших даних. На жаль, LZ77 і LZ78 витрачають багато часу на створення ефективного словника. Лемпель був запрошений фірмою Sperry для допомоги в розробці способу найефективнішої упаковки даних на комп'ютерних стрічках. У цій же фірмі Тері Велч розширив алгоритм LZ78, створивши новий варіант, широко відомий як LZW.
На роботу Велча звернула увагу група програмістів UNIX, які використали його алгоритм в їх додатку LZW, що отримав назву compress. Вони додали декілька удосконалень і опублікували загальнодоступну версію цієї програми в телеконференції Internet, завдяки чому багато користувачів змогли почати з нею працювати.
Популярність алгоритму LZW в значній мірі пов'язана з успіхом програми . Початковий текст останньої версії програми, що здійснює як стиснення, так і декомпресію, займає всього 1200 рядків. Ядро коду стиснення займає не більше сотні рядків, а коду декомпресії не набагато більше. Програмісти вважають, що це полегшує читання і розуміння алгоритму, а також дозволяє адаптувати його для найрізноманітніших цілей.
Метод стиснення
Існує багато практичних алгоритмів стиснення даних, але всі вони базуються на трьох теоретичних способах зменшення надлишковості даних. Перший спосіб полягає в зміні вмісту даних, другий — у зміні структури даних, а третій — в одночасній зміні як структури, так і вмісту даних.
Якщо при стисненні даних відбувається зміна їх вмісту, то метод стиснення є незворотнім, тобто при відновленні (розархівуванні) даних з архіву не відбувається повне відновлення інформації. Такі методи часто називаються методами стиснення з регульованими втратами інформації. Зрозуміло, що ці методи можна застосовувати тільки для таких типів даних, для яких втрата частини вмісту не приводить до суттєвого спотворення інформації. До таких типів даних відносяться відео- та аудіодані, а також графічні дані. Методи стиснення з регульованими втратами інформації забезпечують значно більший ступінь стиснення, але їх не можна застосовувати до текстових даних. Прикладами форматів стиснення з втратами інформації можуть бути:
- JPEG (Joint Photographic Experts Group) для графічних даних;
- MPG — для відеоданих;
- MP3 — для аудіоданих.
Якщо при стисненні даних відбувається тільки зміна структури даних, то метод стиснення є зворотнім. У цьому випадку з архіву можна відновити інформацію повністю. Зворотні методи стиснення можна застосовувати до будь-яких типів даних, але вони дають менший ступінь стиснення у порівнянні з незворотними методами стиснення. Приклади форматів стиснення без втрати інформації: GIF (Graphics Interchange Format) та TIFF (Tagged Image File Format) — для графічних даних; AVI — для відеоданих; ZIP, ARJ, RAR, , — для довільних типів даних. Існує багато різних практичних методів стиснення без втрати інформації, які, як правило, мають різну ефективність для різних типів даних та різних обсягів даних.
Кодування методом Лемпеля — Зіва
Візьмемо набір символів
У ньому двічі зустрічається поєднання АБВ, тому його можна записати в так званому словнику, а в початковому тексті тільки залишити посилання на словник. Тоді початковий текст можна перетворити, наприклад, на
і окремо запам'ятати, що за символом 1 насправді ховається трійця АБВ. Ясно, що якщо в тексті поєднання АБВ зустрілося не 2 а 100 або ще краще 1000 разів, то стиснення було б вельми відчутним. Проте в реальних ситуаціях на таке везіння розраховувати не слід. Треба все вичавлювати навіть з небагатьох повторень в початковому тексті. Подивимося, чи багато ми вигадали в розглянутому прикладі.
Текст стискувався на 4 символи, але і, як мінімум, 4 символи опинилися у словнику. Крім того, побудова словника зажадає введення роздільників і ін.
Але і це ще не все. А якщо в тексті вже є символи 1 ? Як зрозуміти, що це саме 1, а не посилання на словник? Як же поступити найбільш грамотно? Ось тут відповідь далеко неоднозначна. Вона і не може бути однозначна, тому що стиснення — це не таблиця множення. Один текст краще стискається одним методом, інший — абсолютно іншим способом. Спершу ми розглянемо дуже спрощений варіант, щоб мати від чого відштовхуватися надалі.
Для визначеності вважатимемо, що кожен символ в тексті — це впорядкований набір з 8 бітів, тобто байт, або, що те ж саме ціле число від 0 до 255.
Послідовно читаємо початковий текст і одночасно формуємо вихідний файл. Якщо чергова буква зустрілася вперше, або вона виявилася останньою в тексті, то на вихід посилаємо біт 1 і 8 бітів від самої цієї букви. Так само треба зробити, якщо символ не новий, але в парі з наступним ще не зустрічався. Отже, в нашому прикладі перші три символи дадуть на виході 27 бітів. Тоді, при зворотній операції, як тільки той, що розшифровує, побачив черговий біт 1, він відразу знатиме, що наступні за ним 8 бітів треба вивести, так би мовити, відкритим текстом.
Якщо черговий символ в парі з наступним за ним вже зустрічався, то в принципі від цієї пари можна вивести два біта 01 і вказівку на існуючу аналогічну пару. Тоді декодувальник, побачивши 01, по цій вказівці подивиться на вже розшифровану частину тексту, візьме потрібну пару і припише таку саму в кінець розшифрованої частини.
В нашому прикладі достатньо двохбайтних посилань. Отже на вихід пошлемо:
Далі від букви Я по відомих правилах піде 9 бітів. Залишок тексту шифрується сімома бітами:
Перша група з нулів, що закінчується одиницею, означає, що раніше в тексті вже була аналогічна п'ятірка символів. Друга група представляє число одиницю, вказуюче, на якій відстані треба шукати прототип. Прототип добудовуватиметься по ходу будівництва копії з нього, але випереджаючими темпами, достатніми для того, щоб копіювання не простоювало.
Таким чином, початковий текст в стислому вигляді при декілька вільному зображенні з'явиться у вигляді:
Правильніше (але менш наочно) було б вписати замість А, Би і В їх восьмибітові уявлення.
. Дерево Лемпеля — Зіва виглядає так:
Щоб програма розшифровки годилася не тільки для розглянутого прикладу, ще до стислого тексту треба прикласти деякі параметри: довжину стислого або розгорненого тексту, а також довжину посилань. Само дерево прикладати не треба, якщо воно підкоряється простим широкоспоживаним правилам. Отже, дерево Лемпеля — Зіва може бути достатнє складним і розлогим.
Дешифрування
Далі приводиться алгоритм розархівування зі всіма необхідними технічними подробицями і ретельно підібраними значеннями параметрів. Річ у тому, що навіть дуже невеликі варіації параметрів різко міняють ступінь стиснення і, як правило, в гіршу сторону. А боротьба ведеться за долі відсотка. Завдання ускладнюється тим, що немає об'єктивних критеріїв, по яких можна було відразу сказати, що та або інша зміна алгоритму пішла йому на користь. Як ми знаємо, для будь-якого архіватора знайдеться сила-силенна текстів, взагалі непіддатливих стисненню.
Якщо брати тільки такі тексти, то роботу можна не починати. Оцінювати архіватор треба по ходових текстах, але ходові — це не наукове поняття.
Зчитується чергова серія бітів до першого одиничного біта. Нехай N — кількість лічених бітів. Наприклад, якщо в черзі 001000…, то зчитуються 3 біти і відповідно N=3. А якщо перший біт дорівнює одиниці, то зчитується тільки він і N=1. Вводимо число M для формування кількості символів, які пізніше будуть узяті із вже розшифрованого тексту. Спочатку M=N. M і N — цілі двохбайтні числа.
- Якщо N більше або дорівнює 17, то зчитуються чергові 8 бітів і розміщуються в молодших бітах числа M.
- Якщо N > 17, то зчитуються чергові 8 бітів і розміщуються в старших байтах числа M. (Воно вважається беззнаковим)
- Якщо M=1, то зчитуються чергові 8 бітів і надсилаються на вихід, тобто у відновлений текст, і тоді робіться перехід на п. 1.
- Зчитуються чергові 2 біти, з яких формується ціле число Z від 0 до 3. Вводяться K і R.
Якщо M=2, Z=0, то K=5, R=0. Якщо M=2, Z=1, то K=7, R=-32. Якщо M=2, Z=2, то K=9, R=-160. Якщо M=2, Z=3, то K=11, R=-672. Якщо M>2, Z=0, то K=6, R=0. Якщо M>2, Z=1, то K=9, R=-64. Якщо M>2, Z=2, то K=12, R=-576. Якщо M>2, Z=3, то K=14, R=-4672.
- Зчитуються чергові K бітів і розміщуються в молодших K бітах допоміжного цілого двохбайтного числа S. Решта бітів цього числа заповнюються одиницями. Отже S<0, оскільки у старшому біті, що відповідає за знак, знаходиться одиниця.
- Визначається адреса в тексті, звідки буде узятий потрібний фрагмент. Адреса — це просто номер байта в послідовності. Для цього до адреси, на якій поки завершено формування розшифрованого тексту, треба додати R і S. З отриманої таким чином адреси беремо M символів і додаємо в кінець сформованого тексту. Переходимо до п.1 (якщо дані ще не вичерпані).
Наступна реалізація алгоритму призначена для , що саморозархівуються. Тому, перший десяток команд в основному слугує для переміщення програми в кінець сегменту коду. А вже звідти розшифровані оператори переносяться на початок цього сегменту.
Варіанти вдосконалення
Приведені вище деталі алгоритму і значення параметрів не можуть бути виведені будь-якими раціональними строгими методами. У якійсь мірі, в них відбиті особливості сучасного програмування і людської мови. Але автори кожного архіватора знаходять свій оптимум, і що краще — може підказати тільки практика (критерій загальний, але дещо розпливчатий).
Могутні архіватори зазвичай роблять попередню оцінку початкового файлу і до кожного файлу (або до великих частин одного файлу) здійснюють індивідуальний підхід. Наприклад, перед кожним великим фрагментом стислого коду вказується його обсяг і тип стискування. Для цього досить 3 байти, які не псують загальної якості компресії.
Якщо файл короткий, то це означає, що взагалі дезархіватору не знадобиться заглядати далеко назад. Тоді не потрібний, скажімо, випадок K=14, і біти, що звільнилися, можна використовувати з більшою користю. Проте ефект порівняно невеликий. А оскільки він виявляється тільки на малих файлах, то на загальних (зазвичай гігантських) обсягах інформації він і зовсім втрачається.
Можливі багато інших варіантів удосконалень, не пов'язаних безпосередньо з характерними для Лемпеля — Зіва ідеями. Важливий випадок, коли чисельна інформація набита цифрами. Наприклад: 132, -44.8, 555. Зрозуміло, що цифри можуть бути так перетасовані, що навіть однакові пари будуть вкрай рідкісними. Згадані методи не дають стиснення. Проте, якщо у фрагменті тексту використовуються всього 16 різних знаків, кожен з них репрезентується чотирма бітами, що дає вже двократне стиснення. Додаткові резерви можуть бути розкриті якщо текст тільки українською мовою, де використовується не більше 66 знаків.
Можна виділяти у початковому файлі не стиковані ділянки. Тоді збиток від кожного з них можна понизити до трьох байтів. А в представленому варіанті кожен перенесений без змін символ тягне за собою однобайтову ознаку, тобто збиток 12,5 %.
Проте викладений вище алгоритм не враховує такі деталі, тому що вони відносно рідкісні, а ефект від них досить скромний.
Посилання
- Лемпель-Зив в плане минимизации программы[недоступне посилання з червня 2019]
- Архивация данных в MS DOS[недоступне посилання з серпня 2019]
Ця стаття не містить . (грудень 2015) |
Ця стаття потребує додаткових для поліпшення її . (грудень 2015) |
Це незавершена стаття про алгоритми. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
LZ77 i LZ78 algori tm Le mpelya Zi va angl Lempel Ziv algorithm universalnij algoritm stiskuvannya danih bez vtrat stvorenij u 1977 1978 rokah Avraamom Lempelem i Yakovom Zivom Algoritm rozroblenij tak shob jogo mozhna bulo shvidko realizuvati ale vin ne obov yazkovo ye optimalnim oskilki ne provodit zhodnogo analizu vhidnih danih 1984 roku Terri Velchem opublikovana pokrashena realizaciya algoritmu LZ78 algoritm Lempelya Ziva Velcha angl Lempel Ziv Welch algorithm LZW Istoriya viniknennyaBilshe tridcyati rokiv algoritm stisnennya Haffmana i jogo varianti zalishalisya najpopulyarnishimi metodami Prote 1977 roku izrayilski doslidniki Avraam Lempel i Yakiv Ziv zaproponuvali absolyutno inshij pidhid do ciyeyi problemi visunuvshi ideyu formuvannya slovnika zagalnih poslidovnostej danih Pri comu stisnennya danih zdijsnyuyetsya za rahunok zamini zapisiv vidpovidnimi kodami iz slovnika Isnuyut dva algoritmi stisnennya danih LZ77 i LZ78 Voni vzhe ne vimagayut vklyuchennya slovnika danih v arhiv oskilki yaksho vi formuyete vash slovnik viznachenim sposobom programa dekoduvannya mozhe jogo vidnovlyuvati bezposeredno z vashih danih Na zhal LZ77 i LZ78 vitrachayut bagato chasu na stvorennya efektivnogo slovnika Lempel buv zaproshenij firmoyu Sperry dlya dopomogi v rozrobci sposobu najefektivnishoyi upakovki danih na komp yuternih strichkah U cij zhe firmi Teri Velch rozshiriv algoritm LZ78 stvorivshi novij variant shiroko vidomij yak LZW Na robotu Velcha zvernula uvagu grupa programistiv UNIX yaki vikoristali jogo algoritm v yih dodatku LZW sho otrimav nazvu compress Voni dodali dekilka udoskonalen i opublikuvali zagalnodostupnu versiyu ciyeyi programi v telekonferenciyi Internet zavdyaki chomu bagato koristuvachiv zmogli pochati z neyu pracyuvati Populyarnist algoritmu LZW v znachnij miri pov yazana z uspihom programi Pochatkovij tekst ostannoyi versiyi programi sho zdijsnyuye yak stisnennya tak i dekompresiyu zajmaye vsogo 1200 ryadkiv Yadro kodu stisnennya zajmaye ne bilshe sotni ryadkiv a kodu dekompresiyi ne nabagato bilshe Programisti vvazhayut sho ce polegshuye chitannya i rozuminnya algoritmu a takozh dozvolyaye adaptuvati jogo dlya najriznomanitnishih cilej Metod stisnennyaIsnuye bagato praktichnih algoritmiv stisnennya danih ale vsi voni bazuyutsya na troh teoretichnih sposobah zmenshennya nadlishkovosti danih Pershij sposib polyagaye v zmini vmistu danih drugij u zmini strukturi danih a tretij v odnochasnij zmini yak strukturi tak i vmistu danih Yaksho pri stisnenni danih vidbuvayetsya zmina yih vmistu to metod stisnennya ye nezvorotnim tobto pri vidnovlenni rozarhivuvanni danih z arhivu ne vidbuvayetsya povne vidnovlennya informaciyi Taki metodi chasto nazivayutsya metodami stisnennya z regulovanimi vtratami informaciyi Zrozumilo sho ci metodi mozhna zastosovuvati tilki dlya takih tipiv danih dlya yakih vtrata chastini vmistu ne privodit do suttyevogo spotvorennya informaciyi Do takih tipiv danih vidnosyatsya video ta audiodani a takozh grafichni dani Metodi stisnennya z regulovanimi vtratami informaciyi zabezpechuyut znachno bilshij stupin stisnennya ale yih ne mozhna zastosovuvati do tekstovih danih Prikladami formativ stisnennya z vtratami informaciyi mozhut buti JPEG Joint Photographic Experts Group dlya grafichnih danih MPG dlya videodanih MP3 dlya audiodanih Yaksho pri stisnenni danih vidbuvayetsya tilki zmina strukturi danih to metod stisnennya ye zvorotnim U comu vipadku z arhivu mozhna vidnoviti informaciyu povnistyu Zvorotni metodi stisnennya mozhna zastosovuvati do bud yakih tipiv danih ale voni dayut menshij stupin stisnennya u porivnyanni z nezvorotnimi metodami stisnennya Prikladi formativ stisnennya bez vtrati informaciyi GIF Graphics Interchange Format ta TIFF Tagged Image File Format dlya grafichnih danih AVI dlya videodanih ZIP ARJ RAR dlya dovilnih tipiv danih Isnuye bagato riznih praktichnih metodiv stisnennya bez vtrati informaciyi yaki yak pravilo mayut riznu efektivnist dlya riznih tipiv danih ta riznih obsyagiv danih Koduvannya metodom Lempelya ZivaVizmemo nabir simvoliv ABVABVYaYaYaYaYaYa U nomu dvichi zustrichayetsya poyednannya ABV tomu jogo mozhna zapisati v tak zvanomu slovniku a v pochatkovomu teksti tilki zalishiti posilannya na slovnik Todi pochatkovij tekst mozhna peretvoriti napriklad na 11YaYaYaYaYaYa i okremo zapam yatati sho za simvolom 1 naspravdi hovayetsya trijcya ABV Yasno sho yaksho v teksti poyednannya ABV zustrilosya ne 2 a 100 abo she krashe 1000 raziv to stisnennya bulo b velmi vidchutnim Prote v realnih situaciyah na take vezinnya rozrahovuvati ne slid Treba vse vichavlyuvati navit z nebagatoh povtoren v pochatkovomu teksti Podivimosya chi bagato mi vigadali v rozglyanutomu prikladi Tekst stiskuvavsya na 4 simvoli ale i yak minimum 4 simvoli opinilisya u slovniku Krim togo pobudova slovnika zazhadaye vvedennya rozdilnikiv i in Ale i ce she ne vse A yaksho v teksti vzhe ye simvoli 1 Yak zrozumiti sho ce same 1 a ne posilannya na slovnik Yak zhe postupiti najbilsh gramotno Os tut vidpovid daleko neodnoznachna Vona i ne mozhe buti odnoznachna tomu sho stisnennya ce ne tablicya mnozhennya Odin tekst krashe stiskayetsya odnim metodom inshij absolyutno inshim sposobom Spershu mi rozglyanemo duzhe sproshenij variant shob mati vid chogo vidshtovhuvatisya nadali Dlya viznachenosti vvazhatimemo sho kozhen simvol v teksti ce vporyadkovanij nabir z 8 bitiv tobto bajt abo sho te zh same cile chislo vid 0 do 255 Poslidovno chitayemo pochatkovij tekst i odnochasno formuyemo vihidnij fajl Yaksho chergova bukva zustrilasya vpershe abo vona viyavilasya ostannoyu v teksti to na vihid posilayemo bit 1 i 8 bitiv vid samoyi ciyeyi bukvi Tak samo treba zrobiti yaksho simvol ne novij ale v pari z nastupnim she ne zustrichavsya Otzhe v nashomu prikladi pershi tri simvoli dadut na vihodi 27 bitiv Todi pri zvorotnij operaciyi yak tilki toj sho rozshifrovuye pobachiv chergovij bit 1 vin vidrazu znatime sho nastupni za nim 8 bitiv treba vivesti tak bi moviti vidkritim tekstom Yaksho chergovij simvol v pari z nastupnim za nim vzhe zustrichavsya to v principi vid ciyeyi pari mozhna vivesti dva bita 01 i vkazivku na isnuyuchu analogichnu paru Todi dekoduvalnik pobachivshi 01 po cij vkazivci podivitsya na vzhe rozshifrovanu chastinu tekstu vizme potribnu paru i pripishe taku samu v kinec rozshifrovanoyi chastini V nashomu prikladi dostatno dvohbajtnih posilan Otzhe na vihid poshlemo 001 11 Dali vid bukvi Ya po vidomih pravilah pide 9 bitiv Zalishok tekstu shifruyetsya simoma bitami 00001 01 Persha grupa z nuliv sho zakinchuyetsya odiniceyu oznachaye sho ranishe v teksti vzhe bula analogichna p yatirka simvoliv Druga grupa predstavlyaye chislo odinicyu vkazuyuche na yakij vidstani treba shukati prototip Prototip dobudovuvatimetsya po hodu budivnictva kopiyi z nogo ale viperedzhayuchimi tempami dostatnimi dlya togo shob kopiyuvannya ne prostoyuvalo Takim chinom pochatkovij tekst v stislomu viglyadi pri dekilka vilnomu zobrazhenni z yavitsya u viglyadi 1 A 1 Bi 1 V 001 11 00001 01 Pravilnishe ale mensh naochno bulo b vpisati zamist A Bi i V yih vosmibitovi uyavlennya Derevo Lempelya Ziva viglyadaye tak Derevo Lempelya Ziva Shob programa rozshifrovki godilasya ne tilki dlya rozglyanutogo prikladu she do stislogo tekstu treba priklasti deyaki parametri dovzhinu stislogo abo rozgornenogo tekstu a takozh dovzhinu posilan Samo derevo prikladati ne treba yaksho vono pidkoryayetsya prostim shirokospozhivanim pravilam Otzhe derevo Lempelya Ziva mozhe buti dostatnye skladnim i rozlogim DeshifruvannyaDali privoditsya algoritm rozarhivuvannya zi vsima neobhidnimi tehnichnimi podrobicyami i retelno pidibranimi znachennyami parametriv Rich u tomu sho navit duzhe neveliki variaciyi parametriv rizko minyayut stupin stisnennya i yak pravilo v girshu storonu A borotba vedetsya za doli vidsotka Zavdannya uskladnyuyetsya tim sho nemaye ob yektivnih kriteriyiv po yakih mozhna bulo vidrazu skazati sho ta abo insha zmina algoritmu pishla jomu na korist Yak mi znayemo dlya bud yakogo arhivatora znajdetsya sila silenna tekstiv vzagali nepiddatlivih stisnennyu Yaksho brati tilki taki teksti to robotu mozhna ne pochinati Ocinyuvati arhivator treba po hodovih tekstah ale hodovi ce ne naukove ponyattya Zchituyetsya chergova seriya bitiv do pershogo odinichnogo bita Nehaj N kilkist lichenih bitiv Napriklad yaksho v cherzi 001000 to zchituyutsya 3 biti i vidpovidno N 3 A yaksho pershij bit dorivnyuye odinici to zchituyetsya tilki vin i N 1 Vvodimo chislo M dlya formuvannya kilkosti simvoliv yaki piznishe budut uzyati iz vzhe rozshifrovanogo tekstu Spochatku M N M i N cili dvohbajtni chisla Yaksho N bilshe abo dorivnyuye 17 to zchituyutsya chergovi 8 bitiv i rozmishuyutsya v molodshih bitah chisla M Yaksho N gt 17 to zchituyutsya chergovi 8 bitiv i rozmishuyutsya v starshih bajtah chisla M Vono vvazhayetsya bezznakovim Yaksho M 1 to zchituyutsya chergovi 8 bitiv i nadsilayutsya na vihid tobto u vidnovlenij tekst i todi robitsya perehid na p 1 Zchituyutsya chergovi 2 biti z yakih formuyetsya cile chislo Z vid 0 do 3 Vvodyatsya K i R Yaksho M 2 Z 0 to K 5 R 0 Yaksho M 2 Z 1 to K 7 R 32 Yaksho M 2 Z 2 to K 9 R 160 Yaksho M 2 Z 3 to K 11 R 672 Yaksho M gt 2 Z 0 to K 6 R 0 Yaksho M gt 2 Z 1 to K 9 R 64 Yaksho M gt 2 Z 2 to K 12 R 576 Yaksho M gt 2 Z 3 to K 14 R 4672 Zchituyutsya chergovi K bitiv i rozmishuyutsya v molodshih K bitah dopomizhnogo cilogo dvohbajtnogo chisla S Reshta bitiv cogo chisla zapovnyuyutsya odinicyami Otzhe S lt 0 oskilki u starshomu biti sho vidpovidaye za znak znahoditsya odinicya Viznachayetsya adresa v teksti zvidki bude uzyatij potribnij fragment Adresa ce prosto nomer bajta v poslidovnosti Dlya cogo do adresi na yakij poki zaversheno formuvannya rozshifrovanogo tekstu treba dodati R i S Z otrimanoyi takim chinom adresi beremo M simvoliv i dodayemo v kinec sformovanogo tekstu Perehodimo do p 1 yaksho dani she ne vicherpani Nastupna realizaciya algoritmu priznachena dlya sho samorozarhivuyutsya Tomu pershij desyatok komand v osnovnomu sluguye dlya peremishennya programi v kinec segmentu kodu A vzhe zvidti rozshifrovani operatori perenosyatsya na pochatok cogo segmentu Varianti vdoskonalennyaPrivedeni vishe detali algoritmu i znachennya parametriv ne mozhut buti vivedeni bud yakimi racionalnimi strogimi metodami U yakijs miri v nih vidbiti osoblivosti suchasnogo programuvannya i lyudskoyi movi Ale avtori kozhnogo arhivatora znahodyat svij optimum i sho krashe mozhe pidkazati tilki praktika kriterij zagalnij ale desho rozplivchatij Mogutni arhivatori zazvichaj roblyat poperednyu ocinku pochatkovogo fajlu i do kozhnogo fajlu abo do velikih chastin odnogo fajlu zdijsnyuyut individualnij pidhid Napriklad pered kozhnim velikim fragmentom stislogo kodu vkazuyetsya jogo obsyag i tip stiskuvannya Dlya cogo dosit 3 bajti yaki ne psuyut zagalnoyi yakosti kompresiyi Yaksho fajl korotkij to ce oznachaye sho vzagali dezarhivatoru ne znadobitsya zaglyadati daleko nazad Todi ne potribnij skazhimo vipadok K 14 i biti sho zvilnilisya mozhna vikoristovuvati z bilshoyu koristyu Prote efekt porivnyano nevelikij A oskilki vin viyavlyayetsya tilki na malih fajlah to na zagalnih zazvichaj gigantskih obsyagah informaciyi vin i zovsim vtrachayetsya Mozhlivi bagato inshih variantiv udoskonalen ne pov yazanih bezposeredno z harakternimi dlya Lempelya Ziva ideyami Vazhlivij vipadok koli chiselna informaciya nabita ciframi Napriklad 132 44 8 555 Zrozumilo sho cifri mozhut buti tak peretasovani sho navit odnakovi pari budut vkraj ridkisnimi Zgadani metodi ne dayut stisnennya Prote yaksho u fragmenti tekstu vikoristovuyutsya vsogo 16 riznih znakiv kozhen z nih reprezentuyetsya chotirma bitami sho daye vzhe dvokratne stisnennya Dodatkovi rezervi mozhut buti rozkriti yaksho tekst tilki ukrayinskoyu movoyu de vikoristovuyetsya ne bilshe 66 znakiv Mozhna vidilyati u pochatkovomu fajli ne stikovani dilyanki Todi zbitok vid kozhnogo z nih mozhna poniziti do troh bajtiv A v predstavlenomu varianti kozhen perenesenij bez zmin simvol tyagne za soboyu odnobajtovu oznaku tobto zbitok 12 5 Prote vikladenij vishe algoritm ne vrahovuye taki detali tomu sho voni vidnosno ridkisni a efekt vid nih dosit skromnij PosilannyaLempel Ziv v plane minimizacii programmy nedostupne posilannya z chervnya 2019 Arhivaciya dannyh v MS DOS nedostupne posilannya z serpnya 2019 Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno gruden 2015 Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno gruden 2015 Ce nezavershena stattya pro algoritmi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi