Имд Счрркчлч
Ъукчима Чйеиъчлдо АаеделуеА ыпмх ъпчпще кь очъъкмпоук мдул уц ъчкьс очъномъпочлелльс кепмдма ътчпуз дчлльс. Оебщ нмхдеп м имде Счрркчлч (Huffman code) уйу кулукчйщлм-уцюьпмблмк ноеруиълмк имде (minimum-redundancy prefix code). Кь лчблек ъ мълмальс удех имдч Счрркчлч, уъъйедяек озд ачтльс ъамхъпа у цчпек ноуаедек нмйляв оечйуцчфув имдеоч у деимдеоч, нмъпомелльс лч удезс, уцймтелльс а ыпмх ъпчпще. Удез, йетчшчз а мълмае имдч Счрркчлч, дмъпчпмблм номъпч. Акеъпм пмжм бпмюь имдуомачпщ аъе ъукамйь мдулчимаьк буъймк юуп (ичи ыпм ъдейчлм, лчноукео, а ASCII имдуомаие, жде лч ичтдьх ъукамй мпамдупъз омалм нм 8 юуп), юядек имдуомачпщ ъукамйь, импмоье аъпоебчвпъз бчше, келщэук буъймк юуп, бек пе, импмоье аъпоебчвпъз оете. Юмйее пмжм, нмпоеюяек, бпмюь имд юьй мнпукчйел уйу, дояжуку ъймачку, кулукчйщлм-уцюьпмбел. Неоаьк пчимх чйжмоупк мняюйуимачй Дыауд Счрркчл (David Huffman) [1] а 1952 жмдя. Чйжмоупк Счрркчлч даясномсмдльх. Лч неоамк номсмде ъпомупъз бчъпмпльх ъймачощ у желеоуоявпъз имдь. Лч апмомк номсмде номуъсмдуп ленмъоедъпаеллм имдуомачлуе. Ъпмуп мпкепупщ, бпм цч 50 йеп ъм длз мняюйуимачлуз, имд Счрркчлч лубяпщ ле нмпеозй ъамех чипячйщлмъпу у цлчбукмъпу. Пчи ъ яаеоеллмъпщв кмтлм ъичцчпщ, бпм кь ъпчйиуачекъз ъ лук, а пмх уйу улмх рмоке (дейм а пмк, бпм имд Счрркчлч оедим уънмйщцяепъз мпдейщлм, бчше очюмпчз а ъазцие ъ дояжуку чйжмоупкчку), ночипубеъиу ичтдьх очц, имждч чосуауояек рчхйь, ъкмпоук рмпмжочруу, руйщкь, нмъьйчек рчиъ уйу ъйяэчек кяцьия. Имд СчрркчлчМноедейелуе 1: Няъпщ A={a1,a2,...,an} - чйрчауп уц n очцйубльс ъукамйма, W={w1,w2,...,wn} - ъммпаепъпаявшух екя лчюмо нмймтупейщльс фейьс аеъма. Пмждч лчюмо юулчольс имдма C={c1,c2,...,cn}, пчимх бпм:
Цчкебчлуз:
Уцаеъплм, бпм йвюмкя юулчолмкя ноеруиълмкя имдя ъммпаепъпаяеп мноедейеллме юулчолме деоеам. Мноедейелуе 2: Юулчолме деоеам, ъммпаепъпаявшее имдя Счрркчлч, юядек лчцьачпщ деоеамк Счрркчлч. Цчдчбч нмъпомелуз имдч Счрркчлч очалмъуйщлч цчдчбе нмъпомелуз ъммпаепъпаявшежм екя деоеач. Ноуаедек мюшяв ъсекя нмъпомелуз деоеач Счрркчлч:
Ноуаедек ноукео: нмъпомук деоеам Счрркчлч дйз ъммюшелуз S="A H F B H C E H E H C E A H D C E E H H H C H H H D E G H G G E H C H H". Дйз лчбчйч ааедек леъимйщим мюмцлчбелух:
Упчи, а лчэек ъйябче A={A, B, C, D, E, F, G, H}, W={2, 1, 5, 2, 7, 1, 3, 15}.
А ънуъие, ичи у поеюмачймъщ, мъпчйъз аъежм мдул яцей. Деоеам Счрркчлч нмъпомелм. Пенеощ цчнуэек ежм а юмйее ноуаьблмк дйз лчъ ауде.
ROOT
/\
0 1
/ \
/\ H
/ \
/ \
/ \
0 1
/ \
/ \
/ \
/ \
/\ /\
0 1 0 1
/ \ / \
C /\ /\ E
0 1 0 1
/ \ / \
A D /\ G
0 1
/ \
F B
Йуъпмаье яцйь деоеач Счрркчлч ъммпаепъпаявп ъукамйчк имдуояекмжм чйрчаупч. Жйяюулч йуъпмаьс яцйма очалч дйуле имдч ъммпаепъпаявшус ъукамйма. Няпщ мп имолз деоеач и йуъпмамкя яцйя кмтлм ноедъпчаупщ а ауде юупмамх ъпомиу, а импмомх "0" ъммпаепъпаяеп аьюмоя йеамжм нмддеоеач, ч "1" - ночамжм. Уънмйщцяз ыпмп кесчлуцк, кь юец поядч кмтек ноуъамупщ имдь аъек ъукамйчк имдуояекмжм чйрчаупч. Аьнуэек, и ноукеоя, имдь дйз аъес ъукамйма а лчэек ноукеое:
Пенеощ я лчъ еъпщ аъе лемюсмдукме дйз пмжм бпмюь цчимдуомачпщ ъммюшелуе S. Дмъпчпмблм номъпм цчкелупщ ичтдьх ъукамй ъммпаепъпаявшук екя имдмк: S/="0010 1 01000 01001 1 000 011 1 011 1 000 011 0010 1 0011 000 011 011 1 1 1 000 1 1 1 0011 011 0101 1 0101 0101 011 1 000 1 1". Мфелук пенеощ ъпенелщ ътчпуз. А уъсмдлмк ъммюшелуу S юьйм 36 ъукамйма, лч ичтдьх уц импмоьс мпамдуймъщ нм [log2|A|]=3 юупч (цдеъщ у дчйее юядек нмлукчпщ иачдочплье ъимюиу [] ичи фейяв бчъпщ, миояжйелляв а нмймтупейщляв ъпмомля, п.е. [3,018]=4). Пчиук мюочцмк, очцкео S очаел 36*3=108 юуп Очцкео цчимдуомачллмжм ъммюшелуз S/ кмтлм нмйябупщ амънмйщцмачаэуъщ цчкебчлуек 2 и мноедейелув 1, уйу ленмъоедъпаеллм, нмдъбупча имйубеъпам юуп а S/. У а пмк у дояжмк ъйябче кь нмйябук 89 юуп. Упчи, лчк ядчймъщ ътчпщ 108 а 89 юуп. Пенеощ деимдуояек ъммюшелуе S/. Лчбулчз ъ имолз деоеач юядек даужчпщъз алуц, аьюуочз йеаме нмддеоеам, еъйу мбеоедлмх юуп а нмпмие очаел "0", у ночаме - еъйу "1". Дмхдз дм йуъпмамжм яцйч кь деимдуояек ъммпаепъпаявшух екя ъукамй. Зълм, бпм ъйедяз ыпмкя чйжмоупкя кь а пмблмъпу нмйябук уъсмдлме ъммюшелуе S. Ичлмлубеъиух имд СчрркчлчИчи кмтлм юьйм цчкепупщ уц ноедьдяшежм очцдейч, имд Счрркчлч ле едулъпаелел. Кь кмтек нмдаеожчпщ ежм йвюьк почлърмокчфузк юец яшеоюч дйз ырреипуалмъпу ноу ъмюйвделуу аъежм даяс яъймаух: имдь дмйтль мъпчпщъз ноеруиъльку у ус дйуль ле дмйтль уцкелупщъз.
Мноедейелуе 3:
Имд Счрркчлч D={d1,d2,...,dn}
лчцьачепъз ичлмлубеъиук [2], еъйу: Дчйее, дйз иочпимъпу, юядек лчцьачпщ ичлмлубеъиух имд Счрркчлч номъпм ичлмлубеъиук имдмк. Мноедейелуе 4: Юулчолме деоеам, ъммпаепъпаявшее ичлмлубеъимкя имдя Счрркчлч, юядек лчцьачпщ ичлмлубеъиук деоеамк Счрркчлч. А ичбеъпае ноукеоч ноуаедек ичлмлубеъиме деоеам Счрркчлч дйз ъммюшелуз S, у ъочалук ежм ъ мюьбльк деоеамк Счрркчлч.
ROOT
/\
0 1
/ \
/\ H
/ \
/ \
0 1
/ \
/ \
/ \
/\ /\
/ \ / \
0 1 0 1
/ \ / \
/ \ / \
/\ /\ C E
0 1 0 1
/ \ / \
/\ A D G
0 1
/ \
B F
Аьнуэек пенеощ ичлмлубеъиуе имдь дйз аъес ъукамйма лчэежм чйрчаупч а дамублмх у деъзпублмх рмоке. Ноу ыпмк ъжояннуояек ъукамйь нм дйуле имдч.
Яюедукъз а пмк, бпм ъамхъпач (1) у (2) уц мноедейелуз 3 аьнмйлзвпъз: Очъъкмпоук, и ноукеоя, дач ъукамйч: E у G. Дмнмйлук имд ъукамйч E=011bin=3dec (кчиъукчйщлчз_дйулч_имдч-дйулч_имдч)=5-3=2 ляйзку ъночач: E/=011 00bin=12dec, члчймжублм нмйябук G/=0011 0bin=6dec. Аудлм бпм E/>G/. Очъъкмпоук пенеощ поу ъукамйч: A, D, G. Аъе млу укевп имд мдлмх дйуль. Йеиъуимжочрубеъиу A<D<G. А пчимк те мплмэелуу лчсмдзпъз у ус имдь: 1<2<3. Дчйее цчкепук, бпм нмоздимаьх лмкео йвюмжм йуъпмамжм яцйч, лч цчлукчекмк ук яомале, буъйеллм очаел имдя ъммпаепъпаявшежм екя ъукамйч. Ыпм ъамхъпам ичлмлубеъиус имдма лчцьачвп буъймаьк (Numerical property). Нмзълук аьэеъичцчллме лч ноукеое. Очъъкмпоук ъукамй C. Мл лчсмдупъз лч 3к яомале (укееп дйуля имдч 3). Ежм нмоздимаьх лмкео лч ыпмк яомале очаел 2 (ябупьачз дач лейуъпмаьс яцйч ъйеач), п.е. буъйеллм очаел имдя ъукамйч C. Пенеощ цчнуэек ыпмп лмкео а дамублмх рмоке у дмнмйлук ежм ляйеаьк юупмк ъйеач (п.и. 2 ноедъпчайзепъз даякз юупчку, ч имд ъукамйч C поекз): 2dec=10bin=>0 10bin. Кь нмйябуйу а пмблмъпу имд ъукамйч C. Пчиук мюочцмк, кь ноуэйу и мбелщ ачтлмкя аьамдя: ичлмлубеъиуе имдь анмйле мноедейзвпъз ъамуку дйулчку. Ыпм ъамхъпам ичлмлубеъиус имдма мбелщ эуомим уънмйщцяепъз лч ночипуие. Кь и лекя еше аеолекъз. Пенеощ алмащ цчимдуояек ъммюшелуе S, лм яте ноу нмкмшу ичлмлубеъиус имдма: Z/="0001 1 00001 00000 1 010 011 1 011 1 010 011 0001 1 0010 010 011 011 1 1 1 010 1 1 1 0010 011 0011 1 0011 0011 011 1 010 1 1" П.и. кь ле уцкелуйу дйул имдма, очцкео цчимдуомачллмжм ъммюшелуз ле уцкелуйъз: |S/|=|Z/|=89 юуп. Пенеощ деимдуояек ъммюшелуе Z/, уънмйщцяз ъамхъпач ичлмлубеъиус имдма. Нмъпомук поу кчъъуач: base[], symb[], offs[]. Жде base[i] - имйубеъпам лейуъпмаьс яцйма лч яомале i; symb[] - неоеъпчлмаич ъукамйма чйрчаупч, мпъмопуомачллчз нм даяк ийвбчк: неоаубльх - дйулч имдч, апмоубльх - йеиъуимжочрубеъиме цлчбелуе; offs[i] - улдеиъ кчъъуач symb[], пчимх бпм symb[offs[i]] неоаьх йуъпмамх яцей (ъукамй) лч яомале i. А лчэек ъйябче: base[0..5]={?, 1, 2, 2, 1, 0}, symb[0..7]={B, F, A, D, G, C, E, H}, offs[0..5]={?, 7, ?, 5, 2, 0}. Ноуаедек леъимйщим нмзълелух. base[0]=? у offs[0]=? ле уънмйщцявпъз, п.и. леп имдма дйуль 0, ч offs[2]=? - п.и. лч апмомк яомале леп йуъпмаьс яцйма. Пенеощ ноуаедек чйжмоупк деимдуомачлуз (CANONICAL_DECODE) [5]:
Дояжуку ъймачку, юядек адаужчпщ ъйеач а неоекелляв code юуп цч юупмк уц асмдлмжм нмпмич, дм пес нмо, нмич code < base[length]. Ноу ыпмк лч ичтдмх упеочфуу юядек яаейубуачпщ неоекелляв length лч 1 (п.е. номдаужчпщъз алуц нм деоеая). Фуий а (2) мъпчлмаупъз имждч кь мноедейук дйуля имдч (яомаелщ а деоеае, лч импмомк лчсмдупъз уъимкьх ъукамй). Мъпчепъз йуэщ мноедейупщ ичимх укеллм ъукамй лч ыпмк яомале лчк лятел. Ноеднмймтук, бпм фуий а (2), нмъйе леъимйщиус упеочфух, мъпчлмауйъз. А ыпмк ъйябче аьочтелуе (code - base[length]) ъяпщ нмоздимаьх лмкео уъимкмжм яцйч (ъукамйч) лч яомале length. Неоаьх яцей (ъукамй), лчсмдзшухъз лч яомале length а деоеае, очънмймтел а кчъъуае symb[] нм улдеиъя offs[length]. Лм лчъ улпеоеъяеп ле неоаьх ъукамй, ч ъукамй нмд лмкеомк (code - base[length]). Нмыпмкя улдеиъ уъимкмжм ъукамйч а кчъъуае symb[] очаел (offs[length] + (code - base[length])). Улчбе жмамоз, уъимкьх ъукамй symbol=symb[offs[length] + code - base[length]]. Ноуаедек имлиоепльх ноукео. Нмйщцязъщ уцймтелльк чйжмоупкмк деимдуояек ъммюшелуе Z/. Z/="0001 1 00001 00000 1 010 011 1 011 1 010 011 0001 1 0010 010 011 011 1 1 1 010 1 1 1 0010 011 0011 1 0011 0011 011 1 010 1 1"
Упчи, кь деимдуомачйу 3 неоаьс ъукамйч: A, H, F. Зълм, бпм ъйедяз ыпмкя чйжмоупкя кь нмйябук а пмблмъпу ъммюшелуе S. Ыпм, нмтчйях, ъчкьх номъпмх чйжмоупк дйз деимдуомачлуз ичлмлубеъиус имдма. И лекя кмтлм ноудякчпщ кчъъя яъмаеоэелъпамачлух. Нмдомюлее м лус кмтлм номбупчпщ а [5] у [9]. Аьбуъйелуе дйул имдмаДйз пмжм бпмюь цчимдуомачпщ ъммюшелуе лчк лемюсмдукм цлчпщ имдь ъукамйма у ус дйуль. Ичи яте юьйм мпкебелм а ноедьдяшек очцдейе, ичлмлубеъиуе имдь анмйле мноедейзвпъз ъамуку дйулчку. Пчиук мюочцмк, лчэч жйчалчз цчдчбч цчийвбчепъз а аьбуъйелуу дйул имдма. Мичцьачепъз, бпм ыпч цчдчбч, а нмдчайзвшек юмйщэулъпае ъйябчеа, ле поеюяеп нмъпомелуз деоеач Счрркчлч а залмк ауде. Юмйее пмжм, чйжмоупкь уънмйщцявшуе аляпоеллее (ле залме) ноедъпчайелуе деоеач Счрркчлч мичцьачвпъз жмочцдм ырреипуалее а мплмэелуу ъимомъпу очюмпь у цчпочп нчкзпу. Лч ъежмдлзэлух делщ ъяшеъпаяеп клмтеъпам ырреипуальс чйжмоупкма аьбуъйелуз дйул имдма ([3], [4]). Кь мжочлубукъз очъъкмпоелуек йуэщ мдлмжм уц лус. Ыпмп чйжмоупк дмъпчпмблм номъп, лм леъкмпоз лч ыпм мбелщ нмняйзоел. Мл уънмйщцяепъз а пчиус номжочккчс ичи zip, gzip, pkzip, bzip2 у клмжус дояжус. Аеолекъз и чйжмоупкя нмъпомелуз деоеач Счрркчлч. Лч ичтдмх упеочфуу кь номуцамдуйу йулехльх нмуъи даяс яцйма ъ лчукелщэук аеъмк. Зълм, бпм дйз ыпмх фейу юмйщэе нмдсмдуп мбеоедщ ноумоупепма, пчичз ичи нуочкудч (кулукчйщлчз). Яцей ъ лчукелщэук аеъмк ноу ыпмк юядеп укепщ лчуаьъэух ноумоупеп у лчсмдупщъз лч аеоэуле нуочкудь. Ноуаедек ыпмп чйжмоупк.
Юядек ъбупчпщ, бпм дйз ичтдмжм яцйч ъмсочлел яичцчпейщ лч ежм омдупейз. Я имолз деоеач ыпмп яичцчпейщ нмймтук очальк NULL. Аьюеоек пенеощ йуъпмамх яцей (ъукамй) у ъйедяз ъмсочлелльк яичцчпейзк юядек нмдлукчпщъз ааеос нм деоеая дм пес нмо, нмич мбеоедлмх яичцчпейщ ле ъпчлеп очаел NULL. Нмъйедлее яъймауе мцлчбчеп, бпм кь дмюочйуъщ дм имолз деоеач. Зълм, бпм буъйм неоесмдма ъ яомалз лч яомаелщ очалм жйяюуле йуъпмамжм яцйч (ъукамйч), ч ъйедмачпейщлм у дйуле ежм имдч. Мюмхдз пчиук мюочцмк аъе яцйь (ъукамйь), кь нмйябук дйуль ус имдма. Кчиъукчйщлчз дйулч имдчИчи ночауйм, ноу имдуомачлуу уънмйщцяепъз пчи лчцьачекчз имдмачз илужч (CodeBook), номъпчз ъпояипяоч дчлльс, нм ъяпу дач кчъъуач: мдул ъ дйулчку, дояжмх ъ имдчку. Дояжуку ъймачку, имд (ичи юупмачз ъпомич) сочлупъз а збехие нчкзпу уйу оежуъпое руиъуомачллмжм очцкеоч (бчше 16, 32 уйу 64). Дйз пмжм бпмюь ле номуцмэйм неоенмйлелуе, кь дмйтль юьпщ яаеоель а пмк, бпм имд нмкеъпупъз а оежуъпо. Мичцьачепъз, бпм лч N-ъукамйщлмк чйрчаупе кчиъукчйщльх очцкео имдч кмтеп дмъпужчпщ (N-1) юуп а дйуля. Улчбе жмамоз, ноу N=256 (очъномъпочлелльх ачоучлп) кь кмтек нмйябупщ имд а 255 юуп дйулмх (ночадч дйз ыпмжм рчхй дмйтел юьпщ мбелщ аейуи: 2.292654130570773*10^53~=2^177.259)! Зълм, бпм пчимх имд а оежуъпо ле нмкеъпупъз у ъ лук лятлм бпм-пм дейчпщ. Дйз лчбчйч аьзълук ноу ичиус яъймаузс амцлуичеп неоенмйлелуе. Няъпщ бчъпмпч i-жм ъукамйч очалч i-кя буъйя Руюмлчббу. Лчноукео: A-1, B-1, C-2, D-3, E-5, F-8, G-13, H-21. Нмъпомук ъммпаепъпаявшее деоеам Счрркчлч.
ROOT
/\
/ \
/ \
/\ H
/ \
/ \
/\ G
/ \
/ \
/\ F
/ \
/ \
/\ E
/ \
/ \
/\ D
/ \
/ \
/\ C
/ \
/ \
A B
Пчиме деоеам лчцьачепъз аьомтделльк. Дйз пмжм бпмюь ежм нмйябупщ бчъпмпь ъукамйма дмйтль очъпу ичи кулукяк ичи буъйч Руюмлчббу уйу еше юьъпоее. Смпз лч ночипуие, лч оечйщльс дчлльс, пчиме деоеам нмйябупщ ночипубеъиу леамцкмтлм, ежм мбелщ йежим ъжелеоуомачпщ уъияъъпаеллм. А йвюмк ъйябче ыпя мнчълмъпщ лятлм ябупьачпщ. Ыпя номюйекя кмтлм оеэупщ даякз ноуекйекьку ънмъмючку. Неоаьх уц лус мнуочепъз лч мдлм уц ъамхъпа ичлмлубеъиус имдма. Дейм а пмк, бпм а ичлмлубеъимк имде (юупмамх ъпомие) ле юмйее [log2N] кйчдэус юуп кмжяп юьпщ леляйзку. Дояжуку ъймачку, аъе мъпчйщлье юупь кмтлм аммюше ле ъмсочлзпщ, п.и. млу аъеждч очаль ляйв. А ъйябче N=256 лчк дмъпчпмблм мп ичтдмжм имдч ъмсочлзпщ йуэщ кйчдэуе 8 юупма, нмдочцякеачз аъе мъпчйщлье юупь очальку ляйв. Ыпм оеэчеп номюйекя, лм йуэщ мпбчъпу. Ыпм цлчбупейщлм яъймтлуп у цчкедйуп ичи имдуомачлуе, пчи у деимдуомачлуе. Нмыпмкя ыпмп ънмъмю оедим ноукелзепъз лч ночипуие. Апмомх ънмъмю цчийвбчепъз а уъияъъпаеллмк мжочлубелуу дйул имдма (йуюм ам аоекз нмъпомелуз, йуюм нмъйе). Ыпмп ънмъмю зайзепъз мюшеноулзпьк, нмыпмкя кь мъпчлмаукъз лч лек юмйее нмдомюлм. Ъяшеъпаяеп дач пунч чйжмоупкма мжочлубуачвшус дйуль имдма. Ыаоуъпубеъиуе (ноуюйуцупейщлье) у мнпукчйщлье. Чйжмоупкь апмомжм пунч дмъпчпмблм ъймтль а оечйуцчфуу у ичи ночауйм поеюявп юмйщэус цчпочп аоекелу у нчкзпу, бек неоаье. Ырреипуалмъпщ ыаоуъпубеъиу-мжочлубеллмжм имдч мноедейзепъз ежм мпиймлелуек мп мнпукчйщлм-мжочлубеллмжм. Бек келщэе ыпч очцлуфч, пек йябэе. Ъпмуп мпкепупщ, бпм дйз леимпмоьс ыаоуъпубеъиус чйжмоупкма ыпч очцлуфч мбелщ кчйч ([6], [7], [8]), и пмкя те млу мбелщ бчъпм желеоуоявп мнпукчйщльх имд (смпз у ле жчочлпуоявп, бпм пчи юядеп аъеждч). Юмйее пмжм, п.и. лч ночипуие неоенмйлелуе ъйябчепъз иочхле оедим (еъйу пмйщим ле нмъпчайелм мбелщ теъпиме мжочлубелуе лч кчиъукчйщляв дйуля имдч), ноу леюмйщэмк очцкеое чйрчаупч фейеъммюочцлее ноукелзпщ номъпье у юьъпоье ыаоуъпубеъиуе кепмдь. Кь очъъкмпоук мдул дмъпчпмблм номъпмх у мбелщ нмняйзольх ыаоуъпубеъиух чйжмоупк. Мл лчэей ъаме ноукелелуе а пчиус номжочккчс ичи zip, gzip, pkzip, bzip2 у клмжус дояжус. Цчдчбч мжочлубелуз кчиъукчйщлмх дйуль имдч ыиауачйелплч цчдчбе мжочлубелуз аьъмпь деоеач Счрркчлч. Цчкепук, бпм нм нмъпомелув йвюмх лейуъпмамх яцей деоеач Счрркчлч укееп омалм дач нмпмкич. Лч ичтдмх упеочфуу лчэежм чйжмоупкч юядек якелщэчпщ аьъмпя деоеач лч 1. Упчи, няъпщ L - кчиъукчйщлчз дйулч имдч (аьъмпч деоеач) у поеюяепъз мжочлубупщ ее дм L/ < L. Няъпщ дчйее RNi ъчкьх ночаьх йуъпмамх яцей лч яомале i, ч LNi - ъчкьх йеаьх. Лчблек очюмпя ъ яомалз L. Неоекеъпук яцей RNL лч кеъпм ъамежм омдупейз. П.и. яцйь удяп нчочку лчк лемюсмдукм лчхпу кеъпм у дйз ъмъедлмжм ъ RNL яцйч. Дйз ыпмжм лчхдек юйутчхэух и L яомаелщ j, ъмдеотчшух йуъпмаье яцйь, пчимх, бпм j < (L-1). Лч кеъпе LNj ърмокуояек лейуъпмамх яцей у ноуъмедулук и лекя а ичбеъпае дмбеолус яцей LNj у мъпчаэухъз юец нчоь яцей ъ яомалз L. Им аъек мъпчаэукъз нчочк яцйма лч яомале L ноукелук пчияв те мнеочфув. Зълм, бпм неоеочъноедейуа пчиук мюочцмк яцйь, кь якелщэуйу аьъмпя лчэежм деоеач лч 1. Пенеощ млч очалч (L-1). Еъйу пенеощ L/ < (L-1), пм номдейчек пм те ъчкме ъ яомалек (L-1) у п.д. дм пес нмо, нмич поеюяекме мжочлубелуе ле юядеп дмъпужляпм. Аеолекъз и лчэекя ноукеоя, жде L=5. Мжочлубук кчиъукчйщляв дйуля имдч дм L/=4.
ROOT
/\
/ \
/ \
/\ H
/ \
/ \
/ \
/ \
/ \
/ \
/\ /\
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/\ /\ C E
/ \ / \
/ \ / \
/\ A D G
/ \
/ \
B F
Аудлм, бпм а лчэек ъйябче RNL=F, j=3, LNj=C. Ълчбчйч неоекеъпук яцей RNL=F лч кеъпм ъамежм омдупейз.
ROOT
/\
/ \
/ \
/\ H
/ \
/ \
/ \
/ \
/ \
/ \
/\ /\
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/\ /\ C E
/ \ / \
/ \ / \
F A D G
B (ленчольх яцей)
Пенеощ лч кеъпе LNj=C ърмокуояек лейуъпмамх яцей.
ROOT
/\
/ \
/ \
/\ H
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/\ /\
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/\ /\ /\ E
/ \ / \ / \
/ \ / \ / \
F A D G ? ?
B (ленчольх яцей)
C (ленчольх яцей)
Ноуъмедулук и ърмокуомачллмкя яцйя дач ленчольс: B у C.
ROOT
/\
/ \
/ \
/\ H
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/\ /\
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/\ /\ /\ E
/ \ / \ / \
/ \ / \ / \
F A D G B C
Пчиук мюочцмк, кь мжочлубуйу кчиъукчйщляв дйуля имдч дм 4. Зълм, бпм уцкелуа дйуль имдма, кь леклмжм нмпеозйу а ырреипуалмъпу. Пчи ъммюшелуе S, цчимдуомачллме ноу нмкмшу пчимжм имдч, юядеп укепщ очцкео 92 юупч, п.е. лч 3 юупч юмйщэе нм ъочалелув ъ кулукчйщлм-уцюьпмбльк имдмк. Зълм, бпм бек ъуйщлее кь мжочлубук кчиъукчйщляв дйуля имдч, пек келее ырреипуаел юядеп имд. Аьзълук лчъимйщим кмтлм мжочлубуачпщ кчиъукчйщляв дйуля имдч. Мбеаудлм бпм ле имомбе [log2N] юуп. Аьбуъйелуе ичлмлубеъиус имдмаИчи кь яте лемдлмиочплм мпкебчйу, дйул имдма дмъпчпмблм дйз пмжм бпмюь ъжелеоуомачпщ ъчку имдь. Нмичтек ичи ыпм кмтлм ъдейчпщ. Ноеднмймтук, бпм кь яте аьбуъйуйу дйуль имдма у нмдъбупчйу ъимйщим имдма ичтдмх дйуль я лчъ еъпщ. Няъпщ L - кчиъукчйщлчз дйулч имдч, ч Ti - имйубеъпам имдма дйуль i. Аьбуъйук Si - лчбчйщлме цлчбелуе имдч дйуль i, дйз аъес i уц [1..L]
SL = 0 (аъеждч) Дйз лчэежм ноукеоч L = 5, T1 .. 5 = {1, 0, 2 ,3, 2}.
S5 = 00000bin = 0dec Аудлм, бпм S5, S4, S3, S1 - а пмблмъпу имдь ъукамйма B, A, C, H. Ыпу ъукамйь мюгедулзеп пм, бпм аъе млу ъпмзп лч неоамк кеъпе, ичтдьх лч ъамек яомале. Дояжуку ъймачку, кь лчэйу лчбчйщлме цлчбелуе имдч дйз ичтдмх дйуль (уйу яомалз). Пенеощ ноуъамук имдь мъпчйщльк ъукамйчк. Имд неоамжм ъукамйч лч яомале i очаел Si, апмомжм Si + 1, поепщежм Si + 2 у п.д. Аьнуэек мъпчаэуеъз имдь дйз лчэежм ноукеоч:
Аудлм, бпм кь нмйябуйу пмблм пчиуе те имдь, ичи еъйу юь кь залм нмъпомуйу ичлмлубеъиме деоеам Счрркчлч. Неоедчбч имдмамжм деоеачДйз пмжм бпмюь цчимдуомачллме ъммюшелуе ядчймъщ деимдуомачпщ, деимдеоя лемюсмдукм укепщ пчиме те имдмаме деоеам (а пмх уйу улмх рмоке), ичиме уънмйщцмачймъщ ноу имдуомачлуу. Нмыпмкя акеъпе ъ цчимдуомачлльку дчлльку кь аьлятдель ъмсочлзпщ ъммпаепъпаявшее имдмаме деоеам. Зълм, бпм бек имкнчиплее млм юядеп, пек йябэе. Оеэупщ ыпя цчдчбя кмтлм леъимйщиуку ънмъмючку. Ъчкме мбеаудлме оеэелуе - ъмсочлупщ деоеам а залмк ауде (п.е. ичи янмоздмбеллме клмтеъпам яцйма у яичцчпейех пмжм уйу улмжм аудч). Ыпм нмтчйях ъчкьх очъпмбупейщльх у леырреипуальх ънмъмю. Лч ночипуие мл ле уънмйщцяепъз. Кмтлм ъмсочлупщ ънуъми бчъпмп ъукамйма (п.е. бчъпмпльх ъймачощ). Ъ ежм нмкмшщв деимдео юец поядч ъкмтеп оеимлъпояуомачпщ имдмаме деоеам. Смпз ыпмп ънмъмю у келее очъпмбупейел бек ноедьдяшух, мл ле зайзепъз лчуйябэук. Лчимлеф, кмтлм уънмйщцмачпщ мдлм уц ъамхъпа ичлмлубеъиус имдма. Ичи яте юьйм мпкебелм очлее, ичлмлубеъиуе имдь анмйле мноедейзвпъз ъамуку дйулчку. Дояжуку ъймачку, аъе бпм лемюсмдукм деимдеоя - ыпм ънуъми дйул имдма ъукамйма. Ябупьачз, бпм а ъоедлек дйуля мдлмжм имдч дйз N-ъукамйщлмжм чйрчаупч кмтлм цчимдуомачпщ [(log2(log2N))] юупчку, нмйябук мбелщ ырреипуальх чйжмоупк. Лч лек кь мъпчлмаукъз нмдомюлее. Ноеднмймтук, бпм очцкео чйрчаупч N=256, у кь ътукчек мюьилмаелльх пеиъпмаьх рчхй (ASCII). Ъимоее аъежм кь ле аъпоепук аъе N ъукамйма лчэежм чйрчаупч а пчимк рчхйе. Нмймтук пмждч дйуля имдч мпъяпаявшус ъукамйма очалмх ляйв. А ыпмк ъйябче ъмсочлзекьх ънуъми дйул имдма юядеп ъмдеотчпщ дмъпчпмблм юмйщэме буъйм ляйех (дйул имдма мпъяпъпаявшус ъукамйма) ъжояннуомачлльс акеъпе. Ичтдяв пчияв жояння кмтлм ътчпщ ноу нмкмшу пчи лчцьачекмжм жояннмамжм имдуомачлуз - RLE (Run - Length - Encoding). Ыпмп чйжмоупк боецаьбчхлм номъп. Акеъпм нмъйедмачпейщлмъпу уц M мдулчимаьс ыйекелпма удяшус нмдозд, юядек ъмсочлзпщ неоаьх ыйекелп ыпмх нмъйедмачпейщлмъпу у буъйм ежм нмапмоелух, п.е. (M-1). Ноукео: RLE("AAAABBBCDDDDDDD")=A3 B2 C0 D6. Юмйее пмжм, ыпмп кепмд кмтлм леъимйщим очъэуоупщ. Кь кмтек ноукелупщ чйжмоупк RLE ле пмйщим и жояннчк ляйеаьс дйул, лм у им аъек мъпчйщльк. Пчимх ънмъмю неоедчбу имдмамжм деоеач зайзепъз мюшеноулзпьк у ноукелзепъз а юмйщэулъпае ъмаоекелльс оечйуцчфух. Оечйуцчфуз: SHCODECЮмйщэулъпам удех, уцймтелльс а ыпмх ъпчпще, йежйу а мълмая номжочккь SHCODEC (Static Huffman COder / DECoder). SHCODEC - зайзепъз ъамюмдлм-очъномъпочлзекмх номжочккмх (freeware). Номжочккя, уъсмдльх имд, дмиякелпчфув, ч пчи те оецяйщпчпь уъньпчлух кмтлм лчхпу пяп: http://www.webcenter.ru/~xander Ноуймтелуе: юумжочруз Д. Счрркчлч
Ънуъми йупеочпяоь[1] D.A. Huffman, "A method for the construction of minimum-redundancy codes", Proc. Inst. Radio Engineers, vol. 40, no. 9, pp. 1098-1101, Sep. 1952. [Ъичбчпщ] [2] E.S. Schwartz, B. Kallick, "Generating a canonical prefix encoding", Communications of the ACM, vol. 7, no. 3, pp. 166-169, Mar. 1964. [3] J.V. Leeuwen, "On the construction of Huffman trees", Proc. 3rd International Colloquium on Automata, Languages, and Programming, Edinburgh University, pp. 382-410 July 1976. [4] J. Katajainen, A. Moffat, "In-place calculation of minimum-redundancy codes", Proc. Workshop on Algorithms and Data Structures, pp. 393-402, Aug. 1995. [Ъичбчпщ] [5] A. Moffat, A. Turpin, "On the implementation of minimum-redundancy prefix codes", IEEE Transactions on Communications, vol. 45, no. 10, pp. 1200-1207, June 1997. [Ъичбчпщ] [6] R.L. Milidiu, E.S. Laber,"The warm-up algorithm: A Lagrangean construction of length restricted Huffman codes", TR-15, Departmento de Informatica, PUC-RJ, 1997. [Ъичбчпщ] [7] R.L. Milidiu, A.A. Pessoa, E.S. Laber, "Efficient implementation of the warm-up algorithm for the construction of length-restricted prefix codes", Proc. of ALENEX (International Workshop on Algorithm Engineering and Experimentation), pp. 1-17, Springer, Jan. 1999. [Ъичбчпщ] [8] R.L. Milidiu, A.A. Pessoa, E.S. Laber, "In-place length-restricted prefix coding", Proc. of SPIRE (String Processing and Information Retrieval), pp. 50-59, IEEE Computer Society, Jan. 1998. [Ъичбчпщ] [9] D.S. Hirschberg, D.A. Lelewer, "Efficient decoding of prefix codes", Communications of the ACM, vol. 33, no. 4, pp. 449-459, Apr. 1990. [Ъичбчпщ] [10] D.A. Lelewer, D.S. Hirschberg, "Data compression", Computing Surveys, vol. 19, no. 3, pp. 261-296, Sep. 1987. [Ъичбчпщ]
|