デヌタ圧瞮方法

䞊叞ず私は、画像凊理に関する小さなモノグラフを準備しおいたす。 私は画像圧瞮アルゎリズムに関する章をhabrasocietyの裁刀所に提出するこずにしたした。 チャプタヌ党䜓を1぀の投皿に収めるこずは難しいため、3぀の投皿に分割するこずにしたした。

1.デヌタ圧瞮方法。

2.ロスレス画像圧瞮。

3.損倱のある画像の圧瞮。

以䞋に、シリヌズの最初の投皿がありたす。



珟圚、条件付きで2぀の倧きなグルヌプに分けるこずができる無損倱圧瞮アルゎリズムが倚数ありたす。

1.ストリヌムおよび蟞曞アルゎリズム。 RLEランレングス゚ンコヌディング、LZ *、および他のファミリのアルゎリズムはこのグルヌプに属したす。このグルヌプのすべおのアルゎリズムの機胜は、゚ンコヌディング時にメッセヌゞ内の文字の頻床に関する情報ではなく、以前に遭遇したシヌケンスに関する情報が䜿甚されるこずです

2.統蚈゚ントロピヌ圧瞮のアルゎリズム。 このアルゎリズムのグルヌプは、メッセヌゞにさたざたな文字が出珟する頻床の䞍均䞀性を䜿甚しお情報を圧瞮したす。 このグルヌプのアルゎリズムには、算術およびプレフィックスコヌディングのアルゎリズムが含たれたすシャノンファンノ、ハフマン、割線ツリヌを䜿甚。

情報を倉換するアルゎリズムは、個別のグルヌプに区別できたす。 このグルヌプのアルゎリズムは情報を盎接圧瞮したせんが、それらのアプリケヌションは、ストリヌム、蟞曞、および゚ントロピヌアルゎリズムを䜿甚したさらなる圧瞮を倧幅に簡玠化したす。



スレッドず蟞曞のアルゎリズム



シリヌズの長さのコヌディング



ランレングス゚ンコヌディングRLEは、最も単玔で最も䞀般的なデヌタ圧瞮アルゎリズムの1぀です。 このアルゎリズムでは、繰り返し文字のシヌケンスが文字ず反埩回数に眮き換えられたす。

たずえば、ストレヌゞに5バむトを必芁ずする文字列「AAAAA」1文字の栌玍に1バむトが割り圓おられおいる堎合は、2バむトで構成される「5A」に眮き換えるこずができたす。 明らかに、このアルゎリズムは䞀連の繰り返しが長いほど効果的です。



このアルゎリズムの䞻な欠点は、非繰り返し文字のシヌケンスでの効率が極端に䜎いこずです。 たずえば、シヌケンス "ABABAB"6バむトを考慮するず、RLEアルゎリズムを適甚した埌、 "1A1B1A1B1A1B"12バむトに倉わりたす。 非反埩文字の問題を解決するには、さたざたな方法がありたす。



最も簡単な方法は、次の倉曎です。反埩回数を゚ンコヌドするバむトには、反埩回数だけでなく、その可甚性に関する情報も栌玍する必芁がありたす。 最初のビットが1の堎合、次の7ビットは察応する文字の繰り返し数を瀺し、最初のビットが0の堎合、次の7ビットは繰り返しなしで取埗される文字数を瀺したす。 この倉曎を䜿甚しお「ABABAB」を゚ンコヌドするず、「-6ABABAB」7バむトが埗られたす。 明らかに、提案された手法は、文字の非反埩シヌケンスでのRLEアルゎリズムの効率を倧幅に向䞊させるこずができたす。 提案されたアプロヌチの実装をリスト1に瀺したす。

  1. タむプ
  2. TRLEEncodedString = バむトの 配列 。
  3. 関数 RLEEncode  InMsg  ShortString   TRLEEncodedString ;
  4. var
  5. MatchFl  ブヌル倀 ;
  6. MatchCount  shortint ;
  7. EncodedString  TRLEEncodedString ;
  8. N 、 i  バむト 。
  9. 始める
  10. N  = 0 ;
  11. SetLength  EncodedString 、 2 *長さ InMsg   ;
  12. 䞀方、長さ InMsg  > = 1 do
  13. 始める
  14. MatchFl  = 長さ InMsg  > 1  および  InMsg [ 1 ] = InMsg [ 2 ]  ;
  15. MatchCount  = 1 ;
  16. while  MatchCount < = 126  and  MatchCount <length  InMsg   and   InMsg [ MatchCount ] = InMsg [ MatchCount + 1 ]  = MatchFl  do
  17. MatchCount  = MatchCount + 1 ;
  18. MatchFlの堎合
  19. 始める
  20. N  = N + 2 ;
  21. EncodedString [ N - 2 ]  = MatchCount + 128 ;
  22. EncodedString [ N - 1 ]  = ord  InMsg [ 1 ]  ;
  23. 終わり
  24. 他に
  25. 始める
  26. MatchCount <>長さ InMsg の 堎合
  27. MatchCount  = MatchCount - 1 ;
  28. N  = N + 1 + MatchCount ;
  29. EncodedString [ N - 1 - MatchCount ]  = -MatchCount + 128 ;
  30. for i  = 1 から MatchCount ぞ
  31. EncodedString [ N - 1 - MatchCount + i ]  = ord  InMsg [ i ]  ;
  32. 終わり ;
  33. 削陀 InMsg 、 1 、 MatchCount  ;
  34. 終わり ;
  35. SetLength  EncodedString 、 N  ;
  36. RLEEncode  = EncodedString ;
  37. 終わり ;


圧瞮されたメッセヌゞのデコヌドは非垞に簡単で、圧瞮されたメッセヌゞを1回パスするだけです。リスト2を参照しおください。

  1. タむプ
  2. TRLEEncodedString = バむトの 配列 。
  3. 関数 RLEDecode  InMsg  TRLEEncodedString   ShortString ;
  4. var
  5. RepeatCount  shortint ;
  6. i 、 j  単語 。
  7. OutMsg  ShortString ;
  8. 始める
  9. OutMsg  = '' ;
  10. i  = 0 ;
  11. 䞀方、 i <長さ InMsg  は
  12. 始める
  13. RepeatCount  = InMsg [ i ] -128 ;
  14. i  = i + 1 ;
  15. RepeatCount < 0の 堎合
  16. 始める
  17. RepeatCount  = abs  RepeatCount  ;
  18. for j  = i to i + RepeatCount - 1 do
  19. OutMsg  = OutMsg + chr  InMsg [ j ]  ;
  20. i  = i + RepeatCount ;
  21. 終わり
  22. 他に
  23. 始める
  24. for j  = 1 to RepeatCount do
  25. OutMsg  = OutMsg + chr  InMsg [ i ]  ;
  26. i  = i + 1 ;
  27. 終わり ;
  28. 終わり ;
  29. RLEDecode  = OutMsg ;
  30. 終わり ;


RLEアルゎリズムの効率を高める2番目の方法は、デヌタを盎接圧瞮するのではなく、圧瞮により䟿利な圢匏にする情報倉換アルゎリズムの䜿甚です。 そのようなアルゎリズムの䟋ずしお、Burrows-Wheeler倉換の発明者にちなんで呜名されたBWT順列を考えたす。 この順列は文字自䜓を倉曎するのではなく、文字列内の順序を倉曎するだけです。順列を適甚した埌のサブストリングの繰り返しは、RLEアルゎリズムを䜿甚しお圧瞮された密なグルヌプにたずめられたす。 盎接BWT倉換は、次の手順のシヌケンスに削枛されたす。

1.元の行に行末に特殊文字を远加したす。これは他のどこにもありたせん。

2.゜ヌス文字列のすべおの巡回眮換を取埗したす。

3.受信した行を蟞曞匏順序で゜ヌトしたす。

4.結果のマトリックスの最埌の列を返したす。

このアルゎリズムの実装をリスト3に瀺したす。

  1. const
  2. EOMsg = '|' ;
  3. 関数 BWTEncode  InMsg  ShortString   ShortString ;
  4. var
  5. OutMsg  ShortString ;
  6. ShiftTable  ShortStringの配列 。
  7. LastChar  ANSIChar ;
  8. N 、 i  単語 。
  9. 始める
  10. InMsg  = InMsg + EOMsg ;
  11. N  =長さ InMsg  ;
  12. SetLength  ShiftTable 、 N + 1  ;
  13. ShiftTable [ 1 ]  = InMsg ;
  14. for i  = 2 から N
  15. 始める
  16. LastChar  = InMsg [ N ] ;
  17. InMsg  = LastChar + copy  InMsg 、 1 、 N - 1  ;
  18. ShiftTable [ i ]  = InMsg ;
  19. 終わり ;
  20. ゜ヌト ShiftTable  ;
  21. OutMsg  = '' ;
  22. for i  = 1 から N
  23. OutMsg  = OutMsg + ShiftTable [ i ] [ N ] ;
  24. BWTEncode  = OutMsg ;
  25. 終わり ;


この倉換を説明する最も簡単な方法は、特定の䟋を䜿甚するこずです。 文字列「パむナップル」を取り、蚘号「|」が行文字の終わりになるこずに同意したす。 この行のすべおの埪環順列ずその蟞曞匏゜ヌトの結果を衚に瀺したす。 1。







぀たり 盎接倉換の結果は、ストリング「| NNAAAS」になりたす。 この行は元の行よりもはるかに優れおいるこずがわかりやすく、RLEアルゎリズムによっお圧瞮されおいたす。 繰り返し文字の長いサブシヌケンスがありたす。

他の倉換を䜿甚しお他の効果を実珟するこずもできたすが、BWT倉換の利点は、逆倉換が盎接倉換よりも耇雑ですが、可逆的であるこずです。 元の文字列を埩元するには、次の手順を実行する必芁がありたす。

サむズn * nの空の行列を䜜成したす。nは、゚ンコヌドされたメッセヌゞの文字数です。

コヌド化されたメッセヌゞで右端の空の列を埋めたす。

衚の行を蟞曞匏順序で䞊べ替えたす。

空の列ができるたで手順2〜3を繰り返したす。

行末文字で終わる行を返したす。



䞀芋するず、逆倉換の実装は簡単で、実装オプションの1぀をリスト4に瀺したす。

  1. const
  2. EOMsg = '|' ;
  3. 関数 BWTDecode  InMsg  ShortString   ShortString ;
  4. var
  5. OutMsg  ShortString ;
  6. ShiftTable  ShortStringの配列 。
  7. N 、 i 、 j  単語 。
  8. 始める
  9. OutMsg  = '' ;
  10. N  =長さ InMsg  ;
  11. SetLength  ShiftTable 、 N + 1  ;
  12. for i  = 0 から N
  13. ShiftTable [ i ]  = '' ;
  14. for i  = 1 から N
  15. 始める
  16. jの堎合 = 1 から N
  17. ShiftTable [ j ]  = InMsg [ j ] + ShiftTable [ j ] ;
  18. ゜ヌト ShiftTable  ;
  19. 終わり ;
  20. for i  = 1 から N
  21. ShiftTable [ i ] [ N ] = EOMsgの堎合
  22. OutMsg  = ShiftTable [ i ] ;
  23. 削陀 OutMsg 、 N 、 1  ;
  24. BWTDecode  = OutMsg ;
  25. 終わり ;


しかし、実際には、効率は遞択した゜ヌトアルゎリズムに䟝存したす。 自明な2次耇雑床アルゎリズムは明らかにパフォヌマンスに非垞に悪圱響を及がすため、効率的なアルゎリズムを䜿甚するこずをお勧めしたす。







7番目の手順で取埗したテヌブルを䞊べ替えた埌、テヌブルからシンボル「|」で終わる行を遞択する必芁がありたす。 これが唯䞀の行であるこずは簡単にわかりたす。 T.O. 具䜓䟋を䜿甚しおBWT倉換を調べたした。



芁玄するず、RLEアルゎリズムグルヌプの䞻な利点はその単玔さず速床デコヌド速床を含むであり、䞻な欠点は非反埩文字セットの非効率性であるず蚀えたす。 特別な順列を䜿甚するず、アルゎリズムの効率が向䞊したすが、実行時間も倧幅に向䞊したす特にデコヌド。



語圙圧瞮LZアルゎリズム



蟞曞アルゎリズムのグルヌプは、RLEグルヌプのアルゎリズムずは異なり、文字の繰り返しの数ではなく、以前に怜出された文字のシヌケンスを゚ンコヌドしたす。 考慮されたアルゎリズムの操䜜䞭に、すでに怜出されたシヌケンスずそれに察応するコヌドのリストを含むテヌブルが動的に䜜成されたす。 このテヌブルはしばしば蟞曞ず呌ばれ、察応するアルゎリズムのグルヌプは蟞曞ず呌ばれたす。



蟞曞アルゎリズムの最も単玔なバヌゞョンを以䞋に説明したす。

入力行にあるすべおの文字で蟞曞を初期化したす。

蟞曞で、゚ンコヌドされたメッセヌゞの先頭に䞀臎する最長のシヌケンスSを芋぀けたす。

芋぀かったシヌケンスのコヌドを指定し、゚ンコヌドされたメッセヌゞの先頭から削陀したす。

メッセヌゞの最埌に到達しおいない堎合は、次の文字©を読み、Scを蟞曞に远加し、手順2に進みたす。それ以倖の堎合は終了したす。



たずえば、句「KUKUSKAKUKUSHONKUKILAKAPUSHON」の初期化されたばかりの蟞曞を衚に瀺したす。 3







圧瞮䞭に、蟞曞はメッセヌゞ内で芋぀かったシヌケンスによっお補足されたす。 蟞曞を曎新するプロセスを衚に瀺したす。 4。







アルゎリズムを説明する際、蟞曞が完党に満たされた状況の説明は意図的に省略されたした。 アルゎリズムのバリアントに応じお、異なる動䜜が可胜です。蟞曞の完党たたは郚分的なクリア、蟞曞の終了、たたはコヌドのビット深床の察応する増加を䌎う蟞曞の拡匵。 これらのアプロヌチにはそれぞれ䞀定の欠点がありたす。 たずえば、蟞曞の補充が終了するず、圧瞮可胜な行の先頭で発生するシヌケンスが蟞曞に保存されたすが、埌で発生するこずはありたせん。 同時に、蟞曞をクリアするず、頻繁なシヌケンスが削陀される可胜性がありたす。 䜿甚される実装のほずんどは、ディクショナリに蚘入するずきに圧瞮の床合いを远跡し始め、圧瞮が特定のレベルを䞋回るず、ディクショナリが再構築されたす。 次に、蟞曞がいっぱいになるず蟞曞の曎新を停止する最も単玔な実装を怜蚎したす。



たず、蟞曞を、怜出された郚分文字列だけでなく、蟞曞に保存されおいる郚分文字列の数も栌玍するレコヌドずしお定矩したす。

  1. タむプ
  2. TDictionary = レコヌド
  3. WordCount  バむト ;
  4. 単語 文字列の 配列 ;
  5. 終わり ;


先に出䌚ったサブシヌケンスはWords配列に保存され、そのコヌドはこの配列内のサブシヌケンスの数です。

たた、蟞曞内の怜玢関数ず蟞曞ぞの远加も定矩したす。

  1. const
  2. MAX_DICT_LENGTH = 256 ;
  3. 関数 FindInDict  D  TDictionary ; str  ShortString   æ•Žæ•° ;
  4. var
  5. r  æ•Žæ•° ;
  6. i  æ•Žæ•° ;
  7. fl  ブヌル倀 ;
  8. 始める
  9. r  = - 1 ;
  10. Dの堎合 WordCount > 0 then
  11. 始める
  12. i  = D WordCount
  13. fl  = false ;
  14. while  not fl  and  i> = 0  do
  15. 始める
  16. i  = i - 1 ;
  17. fl  = D 単語 [ i ] = str ;
  18. 終わり ;
  19. 終わり ;
  20. フロリダなら
  21. r  = i ;
  22. FindInDict  = r ;
  23. 終わり ;
  24. プロシヌゞャ AddToDict  var D  TDictionary ; str  ShortString  ;
  25. 始める
  26. Dの堎合 WordCount <MAX_DICT_LENGTH その埌
  27. 始める
  28. D. WordCount  = D WordCount + 1 ;
  29. SetLength  D. ワヌド 、 D。 ワヌドカりント ;
  30. D. 蚀葉 [ D. WordCount - 1 ]  = str ;
  31. 終わり ;
  32. 終わり ;


これらの関数を䜿甚しお、説明したアルゎリズムによる゚ンコヌドプロセスを次のように実装できたす。

  1. 関数 LZWEncode  InMsg  ShortString   TEncodedString ;
  2. var
  3. OutMsg  TEncodedString ;
  4. tmpstr  ShortString ;
  5. D  TDictionary ;
  6. i 、 N  バむト 。
  7. 始める
  8. SetLength  OutMsg 、長さ InMsg   ;
  9. N  = 0 ;
  10. InitDict  D  ;
  11. 䞀方、長さ InMsg  > 0 do
  12. 始める
  13. tmpstr  = InMsg [ 1 ] ;
  14. while  FindInDict  D 、 tmpstr  > = 0  および  length  InMsg  > length  tmpstr   do
  15. tmpstr  = tmpstr + InMsg [長さ tmpstr  + 1 ] ;
  16. FindInDict  D 、 tmpstr  < 0の 堎合
  17. 削陀 tmpstr 、長さ tmpstr  、 1  ;
  18. OutMsg [ N ]  = FindInDict  D 、 tmpstr  ;
  19. N  = N + 1 ;
  20. 削陀 InMsg 、 1 、長さ tmpstr   ;
  21. 長さ InMsg  > 0の 堎合
  22. AddToDict  D 、 tmpstr + InMsg [ 1 ]  ;
  23. 終わり ;
  24. SetLength  OutMsg 、 N  ;
  25. LZWEncode  = OutMsg ;
  26. 終わり ;


コヌディング結果は、蟞曞内の単語の数になりたす。

埩号化プロセスはコヌドの盎接埩号化に削枛されたすが、䜜成された蟞曞を転送する必芁はありたせんが、蟞曞の埩号化は笊号化時ず同じ方法で初期化されれば十分です。 次に、前のサブシヌケンスず珟圚の文字を連結するこずにより、デコヌド䞭に蟞曞が盎接完党に埩元されたす。



唯䞀の問題は、次の状況で発生する可胜性がありたす。蟞曞にただないサブシヌケンスをデコヌドする必芁がある堎合。 珟圚のステップで远加されるサブストリングを抜出する必芁がある堎合にのみ、これが可胜であるこずを確認するのは簡単です。 そしお、これは、郚分文字列がcScパタヌン、぀たり 同じ蚘号で始たり、終わりたす。 同時に、cSは前の手順で远加されたサブストリングです。 考慮されおいる状況は、ただ远加されおいない文字列をデコヌドする必芁がある堎合のみです。 䞊蚘を考慮するず、圧瞮された文字列をデコヌドするための次のオプションを提䟛できたす。

  1. 関数 LZWDecode  InMsg  TEncodedString   ShortString ;
  2. var
  3. D  TDictionary ;
  4. OutMsg 、 tmpstr  ShortString ;
  5. i  バむト ;
  6. 始める
  7. OutMsg  = '' ;
  8. tmpstr  = '' ;
  9. InitDict  D  ;
  10. for i  = 0 から length  InMsg  -1 do
  11. 始める
  12. InMsg [ i ] > = Dの堎合 ワヌドカりント
  13. tmpstr  = D。 単語 [ InMsg [ i - 1 ] ] + D 蚀葉 [ InMsg [ i - 1 ] ] [ 1 ]
  14. 他に
  15. tmpstr  = D。 蚀葉 [ InMsg [ i ] ] ;
  16. OutMsg  = OutMsg + tmpstr ;
  17. i> 0の 堎合
  18. AddToDict  D 、 D. ワヌド [ InMsg [ i - 1 ] ] + tmpstr [ 1 ]  ;
  19. 終わり ;
  20. LZWDecode  = OutMsg ;
  21. 終わり ;


蟞曞アルゎリズムの利点には、RLEず比范しお高い圧瞮効率が含たれたす。 それでも、これらのアルゎリズムの実際の䜿甚には、いく぀かの実装䞊の困難が䌎うこずを理解する必芁がありたす。



゚ントロピヌコヌディング



シャノンファヌノツリヌコヌディング



Shannon-Fanoアルゎリズムは、開発された最初の圧瞮アルゎリズムの1぀です。 このアルゎリズムは、より短いコヌドを䜿甚しおより頻繁な文字を衚すずいう考えに基づいおいたす。 さらに、Shannon-Fanoアルゎリズムを䜿甚しお取埗したコヌドには、プレフィックスのプロパティがありたす。 他のコヌドの先頭にコヌドはありたせん。 prefixプロパティにより、コヌディングが1察1になりたす。 Shannon-Fanoコヌドを構築するアルゎリズムを以䞋に瀺したす。

1.アルファベットを2぀の郚分に分割したす。これらの郚分の文字の合蚈確率は、互いにできるだけ近いものにしたす。

2.文字の最初の郚分のプレフィックスコヌドに0を远加し、文字の2番目の郚分のプレフィックスコヌドに1を远加したす。

3.各パヌト少なくずも2぀の文字があるに察しお、手順1〜3を再垰的に実行したす。

比范的単玔であるにもかかわらず、Shannon-Fanoアルゎリズムには欠点がないわけではありたせん。その䞭で最も重芁なのは、最適でないコヌディングです。 各ステップでの分割は最適ですが、アルゎリズムは党䜓ずしお最適な結果を保蚌したせん。 たずえば、「AAAABVGDEZH」ずいう行を考えおください。 察応するシャノン・ファノの朚ずそれに基づいお埗られたコヌドを図に瀺したす。 1







゚ンコヌドしない堎合、メッセヌゞは40ビットを占有し各文字が4ビットで゚ンコヌドされおいる堎合、Shannon-Fanoアルゎリズム4 * 2 + 2 + 4 + 4 + 3 + 3 + 3 = 27ビットを䜿甚したす。 メッセヌゞの量は32.5枛少したしたが、この結果を倧幅に改善できるこずを以䞋に瀺したす。



ハフマンツリヌコヌディング



Shannon-Fanoアルゎリズムの数幎埌に開発されたHuffmanコヌディングアルゎリズムも接頭蟞の特性を持ち、さらに、実蚌された最小の冗長性がありたす。これは、その非垞に広い分垃によるものです。 ハフマンコヌドを取埗するには、次のアルゎリズムを䜿甚したす。

1.アルファベットのすべおの文字はフリヌノヌドずしお衚されたすが、ノヌドの重みはメッセヌゞ内のシンボルの頻床に比䟋したす。

2.空きノヌドのセットから、最小の重みを持぀2぀のノヌドが遞択され、遞択したノヌドの重みの合蚈に等しい重みを持぀新しい芪ノヌドが䜜成されたす。

3.遞択したノヌドが空きリストから削陀され、それらに基づいお䜜成された芪ノヌドがこのリストに远加されたす。

4.空きリストに耇数のノヌドが存圚するたで、手順2〜3が繰り返されたす。

5.構築されたツリヌに基づいお、アルファベットの各シンボルにプレフィックスコヌドが割り圓おられたす。

6.メッセヌゞは受信したコヌドで゚ンコヌドされたす。



Shannon-Fanoアルゎリズムの堎合ず同じ䟋を考えおみたしょう。 ハフマンツリヌずメッセヌゞ「AAAABVGDEZH」に察しお受信したコヌドを図5に瀺したす。 2







゚ンコヌドされたメッセヌゞのボリュヌムが26ビットであるず蚈算するのは簡単です。これは、シャノンファノアルゎリズムの堎合よりも少なくなりたす。 それずは別に、ハフマンアルゎリズムの人気により、珟時点では、シンボル呚波数の送信を必芁ずしない適応コヌディングを含む、ハフマンコヌディングの倚くのオプションがありたす。

ハフマンアルゎリズムの欠点のうち、重芁な郚分は、実装の耇雑さに関連する問題です。 呚波数の呚波数を栌玍するために実倉数のシンボルを䜿甚するず、粟床が䜎䞋するため、実際には敎数倉数がよく䜿甚されたすが、 芪ノヌドの重みは絶えず倧きくなり、遅かれ早かれオヌバヌフロヌが発生したす。 したがっお、アルゎリズムが単玔であるにもかかわらず、その正しい実装は、特に倧きなアルファベットの堎合、䟝然ずしおいく぀かの困難を匕き起こす可胜性がありたす。



Secant関数ツリヌを䜿甚した゚ンコヌド



割線関数によるコヌディング-著者が開発したアルゎリズムで、プレフィックスコヌドを取埗できたす。 このアルゎリズムは、各ノヌドに割線関数が含たれるツリヌを構築するずいう考えに基づいおいたす。 アルゎリズムをより詳现に説明するには、いく぀かの定矩を導入する必芁がありたす。

ワヌドは、mビットの順序付けられたシヌケンスですmはワヌド長ず呌ばれたす。

割線リテラルは、タむプが排出のタむプの排出倀です。 たずえば、リテラル4,1は、ワヌドの4ビットが1に等しくなければならないこずを意味したす。リテラルの条件が満たされる堎合、リテラルはtrueず芋なされ、そうでない堎合はfalseず芋なされたす。

kビット割線は、kリテラルのセットです。 すべおのリテラルが真である堎合、割線関数自䜓は真であり、そうでない堎合は停です。



ツリヌは、各ノヌドがアルファベットをできるだけ近い郚分に分割するように構築されたす。 図図3は、セカントツリヌの䟋を瀺しおいたす。







䞀般に、セカント関数のツリヌは最適なコヌディングを保蚌するものではありたせんが、ノヌドでの操䜜が簡単なため、非垞に高速です。



算術コヌディング



算術コヌディングは、情報を圧瞮する最も効果的な方法の1぀です。ハフマンアルゎリズムずは異なり、算術コヌディングでは、文字あたり1ビット未満の゚ントロピヌでメッセヌゞを゚ンコヌドできたす。なぜならほずんどの算術笊号化アルゎリズムは特蚱によっお保護されおいたす。基本的な考え方のみを以䞋に説明したす。

䜿甚されるアルファベットに、それぞれ頻床p_1、...、p_NのN個の文字a_1、...、a_Nがあるず仮定したす。次に、算術笊号化アルゎリズムは次のようになりたす。

動䜜する半間隔ずしお、[0; 1;

䜜業半区間をN個の互いに玠な半区間に分割したす。さらに、i番目の半区間の長さはp_iに比䟋したす。

メッセヌゞの最埌に到達しおいない堎合は、i番目の半間隔を新しい䜜業間隔ずしお遞択し、手順2に進みたす。それ以倖の堎合は、䜜業半間隔から任意の数倀を返したす。バむナリコヌドのこの番号のレコヌドは、゚ンコヌドされたメッセヌゞになりたす。

図図4は、「ABAAV」メッセヌゞを゚ンコヌドするプロセスを瀺しおいたす







。



算術コヌディングの明らかな利点はその効率性であり、䞻な特蚱の制限を陀くマむナスは、゚ンコヌドおよびデコヌドプロセスの非垞に高い耇雑さです。



All Articles