www.wikidata.uk-ua.nina.az
Algoritm Gaffmana abo kodi Gafmena 1 adaptivnij zhadibnij algoritm optimalnogo prefiksnogo koduvannya alfavitu z minimalnoyu nadmirnistyu Buv rozroblenij aspirantom Massachusetskogo tehnologichnogo institutu Devidom Gaffmanom pri napisanni nim kursovoyi roboti ta nadrukovanij v statti 1952 roku A Method for the Construction of Minimum Redundancy Codes 2 Nini koli vikoristovuyetsya v bagatoh programah stisnennya danih bez vtrat Na vidminu vid algoritmu Shennona Fano algoritm Gaffmana zalishayetsya zavzhdi optimalnim i dlya vtorinnih alfavitiv m2 z bilsh nizh dvoma simvolami Cej metod koduvannya skladayetsya z dvoh osnovnih etapiv Pobudova optimalnogo kodovogo dereva Pobudova vidobrazhennya kod simvol na osnovi pobudovanogo derevaZmist 1 Koduvannya Gaffmana 2 Adaptivne stisnennya 3 Perepovnennya 4 Masshtabuvannya vag vuzliv dereva Gaffmana 5 Zastosuvannya 6 Primitki 7 PosilannyaKoduvannya Gaffmana RedaguvatiOdin z pershih algoritmiv efektivnogo koduvannya informaciyi buv zaproponovanij 1952 roku Devidom Gaffmanom Ideya algoritmu taka znayuchi jmovirnosti poyavi simvoliv u povidomlenni mozhna opisati proceduru pobudovi kodiv zminnoyi dovzhini sho skladayutsya z ciloyi kilkosti bitiv Simvolam z bilshoyu jmovirnistyu stavlyatsya u vidpovidnist korotshi kodi Kodi Gaffmana volodiyut vlastivistyu prefiksnosti tobto zhodne kodove slovo ne ye prefiksom inshogo sho dozvolyaye odnoznachno yih dekoduvati Klasichnij algoritm Gaffmana na vhodi otrimuye tablicyu chastot z yakimi zustrichayutsya simvoli u povidomlenni Dali na pidstavi ciyeyi tablici buduyetsya derevo koduvannya Gaffmana N derevo Simvoli vhidnogo alfavitu utvoryuyut spisok vilnih vuzliv Kozhen list maye vagu yaka mozhe buti rivnoyu abo jmovirnosti abo kilkosti vhodzhen simvolu u stisnene povidomlennya Vibirayutsya dva vilnih vuzli dereva z najmenshimi vagami Stvoryuyetsya yihnij batkivskij vuzol z vagoyu rivnoyu yih sumarnij vazi Vuzol batko dodayetsya v spisok vilnih vuzliv a dva jogo nashadki vidalyayutsya z cogo spisku Odnij duzi kotra vihodit z vuzla batka stavitsya u vidpovidnist bit 1 inshij bit 0 Kroki pochinayuchi z drugogo povtoryuyutsya doti poki v spisku vilnih vuzliv ne zalishitsya tilki odin vilnij vuzol Vin i bude vvazhatisya korenem dereva nbsp Koduvannya GaffmanaPripustimo u nas ye nastupna tablicya chastot 15 7 6 6 5A B C D ECej proces mozhna podati yak pobudovu dereva korin yakogo simvol z sumoyu jmovirnostej ob yednanih simvoliv otrimanij pri ob yednanni simvoliv z ostannogo kroku jogo n0 nashadkiv simvoli z poperednogo kroku i t d Shob viznachiti kod dlya kozhnogo iz simvoliv sho vhodyat u povidomlennya potribno projti shlyah vid listka dereva yakij vidpovidaye potochnomu simvolu do jogo korenya nakopichuyuchi biti pri peremishenni po gilkah dereva persha gilka v shlyahu vidpovidaye molodshomu bitu Otrimana takim chinom poslidovnist bitiv ye kodom danogo simvolu zapisanim u zvorotnomu poryadku Dlya danoyi tablici simvoliv kodi Gaffmana budut viglyadati tak A B C D E0 100 101 110 111Oskilki zhoden z otrimanih kodiv ne ye prefiksom inshogo voni mozhut buti odnoznachno dekodovani pri chitanni yih z potoku Krim togo najbilsh chastij simvol povidomlennya A zakodovanij najmenshoyu kilkistyu bit a najbilsh ridkisnij simvol E najbilshoyu Pri comu zagalna dovzhina povidomlennya sho skladayetsya z navedenih u tablici simvoliv sklade 87 bit v serednomu 2 2308 bita na simvol Pri vikoristanni rivnomirnogo koduvannya zagalna dovzhina povidomlennya sklala b 117 bit rivno 3 biti na simvol Zauvazhimo sho entropiya dzherela yake nezalezhnim chinom porodzhuye simvoli iz zaznachenimi chastotami skladaye 2 1858 bita na simvol tobto nadmirnist pobudovanogo dlya takogo dzherela kodu Gaffmana sho rozumiyetsya yak vidminnist serednogo chisla bit na simvol vid entropiyi stanovit menshe 0 05 bita na simvol Klasichnij algoritm Gaffmana maye ryad istotnih nedolikiv Po pershe dlya vidnovlennya vmistu stisnutogo povidomlennya dekoder povinen znati tablicyu chastot yakoyu koristuvavsya koder Otzhe dovzhina stisnutogo povidomlennya zbilshuyetsya na dovzhinu tablici chastot yaka povinna nadsilatisya poperedu danih sho mozhe zvesti nanivec vsi zusillya shodo stisnennya povidomlennya Krim togo neobhidnist nayavnosti povnoyi chastotnoyi statistiki pered pochatkom vlasne koduvannya vimagaye dvoh prohodiv po povidomlennyu odnogo dlya pobudovi modeli povidomlennya tablici chastot i N dereva inshogo dlya vlasne koduvannya Po druge nadmirnist koduvannya obertayetsya na nul lishe v tih vipadkah koli jmovirnosti kodovanih simvoliv ye obernenimi stepenyam chisla 2 Po tretye dlya dzherela z entropiyeyu sho ne perevishuye 1 napriklad dlya dvijkovogo dzherela bezposerednye zastosuvannya kodu Gaffmana pozbavlene sensu Adaptivne stisnennya RedaguvatiAdaptivne stisnennya dozvolyaye ne peredavati model povidomlennya razom z nim samim i obmezhitisya odnim prohodom po povidomlennyu yak pri koduvanni tak i pri dekoduvanni U stvorenni algoritmu adaptivnogo koduvannya Gaffmana najbilshi skladnoshi vinikayut pri rozrobci proceduri ponovlennya modeli chergovih simvoliv Teoretichno mozhna bulo bi prosto vstaviti vseredinu ciyeyi proceduri povnu pobudovu dereva koduvannya Gaffmana odnak takij algoritm stisnennya mav bi neprijnyatno nizku shvidkodiyu oskilki pobudova N dereva ce zanadto velika robota i vikonuvati yiyi pri obrobci kozhnogo simvolu nerozumno Na shastya isnuye sposib modifikuvati vzhe nayavne N derevo tak shob vidobraziti obrobku novogo simvolu Onovlennya dereva pri zchituvanni chergovogo simvolu povidomlennya skladayetsya z dvoh operacij Persha zbilshennya vagi vuzliv dereva Spochatku zbilshuyemo vagu listka yakij vidpovidaye prochitanomu simvolu na odinicyu Potim zbilshuyemo vagu batka shob privesti yiyi u vidpovidnist z novimi znachennyami vag nashadkiv Cej proces prodovzhuyetsya do tih pir poki mi ne distanemosya korenya dereva Serednye chislo operacij zbilshennya vagi dorivnyuye serednij kilkistyu bitiv neobhidnih dlya togo shob zakoduvati simvol Druga operaciya perestanovka vuzliv dereva potribna todi koli zbilshennya vagi vuzla prizvodit do porushennya vlastivosti vporyadkovanosti tobto todi koli zbilshena vaga vuzla staye bilshoyu nizh vaga nastupnogo za poryadkom vuzla Yaksho i dali prodovzhuvati obroblyati zbilshennya vagi ruhayuchis do korenya dereva to derevo perestane buti derevom Gaffmana Shob zberegti uporyadkovanist dereva koduvannya algoritm pracyuye v takij sposib Nehaj nova zbilshena vaga vuzla dorivnyuye W 1 Todi pochinayemo ruhatisya po spisku u bik zbilshennya vagi poki ne znajdemo ostannij vuzol z vagoyu W Perestavimo potochnij i znajdenij vuzli mizh soboyu v spisku vidnovlyuyuchi takim chinom poryadok u derevi pri comu batki kozhnogo z vuzliv tezh zminyatsya Na comu operaciya perestanovki zakinchuyetsya Pislya perestanovki operaciya zbilshennya vagi vuzliv prodovzhuyetsya dali Nastupnij vuzol vaga yakogo bude zbilshena algoritmom ce novij batko vuzla zbilshennya vagi yakogo viklikalo perestanovku Perepovnennya RedaguvatiU procesi roboti algoritmu stisnennya vagi vuzliv u derevi koduvannya Gaffmana neuhilno zrostayut Persha problema vinikaye todi koli vaga korenya dereva pochinaye perevishuvati mistkist komirki v yakij vin zberigayetsya Yak pravilo ce 16 bitove znachennya i otzhe ne mozhe buti bilshim nizh 65535 Druga problema yaka zaslugovuye she bilshoyi uvagi mozhe viniknuti znachno ranishe koli rozmir najdovshogo kodu Gaffmana perevishuye mistkist komirki yaka vikoristovuyetsya dlya togo shob peredati jogo u vihidnij potik Dekoderu vse odno yakoyi dovzhini kod vin dekoduye oskilki vin ruhayetsya zverhu vniz po derevu koduvannya vibirayuchi z vhidnogo potoku po odnomu bitu A koder povinen pochinati vid lista dereva i ruhatisya vgoru do korenya zbirayuchi biti yaki potribno peredati Zazvichaj dlya cogo vikoristovuyut zminnu cilogo tipu i koli dovzhina kodu Gaffmana perevershuye rozmir cilogo tipu v bitah nastaye perepovnennya Mozhna dovesti sho maksimalnu dovzhinu kod Gaffmana dlya povidomlen z odnim i tim samim vhidnim alfavitom matime yaksho chastoti simvoliv utvoryuyut poslidovnist Fibonachchi Povidomlennya z chastotami simvoliv rivnimi chislam Fibonachchi do Fib 18 ce vidminnij sposib viprobuvati robotu programi stisnennya za Gaffmanom Masshtabuvannya vag vuzliv dereva Gaffmana RedaguvatiBeruchi do uvagi skazane vishe algoritm ponovlennya dereva Gaffmana povinen buti zminenij takim chinom pri zbilshenni vagi potribno pereviryati yiyi na dosyagnennya dopustimogo maksimumu Yaksho mi dosyagli maksimumu to neobhidno masshtabuvati vagu zazvichaj podilivshi vagu listka na cile chislo napriklad 2 a potim pererahuvavshi vagi vsih inshih vuzliv Odnak pri dilenni vagi navpil vinikaye problema pov yazana z tim sho pislya vikonannya ciyeyi operaciyi derevo mozhe zminiti svoyu formu Poyasnyuyetsya ce tim sho mi dilimo cili chisla i pri dilenni vidkidayemo drobovu chastinu Pravilno organizovane derevo Gaffmana pislya masshtabuvannya mozhe mati formu yaka znachno vidriznyayetsya vid pochatkovoyi Ce vidbuvayetsya tomu sho masshtabuvannya prizvodit do vtrati tochnosti nashoyi statistiki Ale zi zborom novoyi statistiki naslidki cih pomilok praktichno shodyat nanivec Masshtabuvannya vagi dosit doroga operaciya oskilki vona prizvodit do neobhidnosti zanovo buduvati vse derevo koduvannya Ale oskilki neobhidnist u nij vinikaye vidnosno ridko to z cim mozhna zmiritisya Vigrash vid masshtabuvannyaMasshtabuvannya vagi vuzliv dereva cherez pevni intervali daye nespodivanij rezultat Nezvazhayuchi na te sho pri masshtabuvanni vidbuvayetsya vtrata tochnosti statistiki testi pokazuyut sho vono prizvodit do krashih pokaznikiv stisnennya nizh yaksho b masshtabuvannya vidkladalosya Ce mozhna poyasniti tim sho potochni simvoli stisnenogo potoku bilshe shozhi na svoyih blizkih poperednikiv nizh na tih yaki zustrichalisya nabagato ranishe Masshtabuvannya prizvodit do zmenshennya vplivu davnih simvoliv na statistiku i do zbilshennya vplivu na neyi nedavnih simvoliv Ce duzhe skladno vimiryati kilkisno ale v principi masshtabuvannya pozitivno vplivaye na stupin stisnennya informaciyi Eksperimenti z masshtabuvannyam v riznih tochkah procesu stisnennya pokazuyut sho stupin stisnennya silno zalezhit vid momentu masshtabuvannya vagi ale ne isnuye pravila viboru optimalnogo momentu masshtabuvannya dlya programi oriyentovanoyi na stisk bud yakih tipiv informaciyi Zastosuvannya RedaguvatiStisnennya danih Gaffmana zastosovuyetsya pid chas stisnennya foto i videozobrazhen JPEG standarti stisnennya MPEG v arhivatorah PKZIP LZH ta inshih v protokolah peredachi danih MNP5 i MNP7 Primitki Redaguvati Kormen Tomas Lejzerson Charlz Rivest Ronald Stajn Kliford 2019 16 3 Kodi Gafmena Vstup do algoritmiv vid 3 K I S s 443 451 ISBN 978 617 684 239 2 Huffman D 1952 A Method for the Construction of Minimum Redundancy Codes Proceedings of the IRE 40 9 1098 1101 doi 10 1109 JRPROC 1952 273898 Arhiv originalu za 15 Grudnya 2010 Procitovano 30 Veresnya 2017 Posilannya RedaguvatiKod Gaffmana WebArchive Vizualizator pobudovi dereva dlya m2 2 Stisk po algoritmu Gaffmana Arhivovano 5 Kvitnya 2013 u Wayback Machine na algolist manual ru 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 nbsp Ce nezavershena stattya pro algoritmi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Otrimano z https uk wikipedia org w index php title Kod Gaffmana amp oldid 40047974