ロスレスデヌタ圧瞮アルゎリズム、パヌト2

パヌト1



デヌタ圧瞮技術



デヌタ圧瞮のために倚くの手法が考案されおいたす。 それらのほずんどは、いく぀かの圧瞮原理を組み合わせお完党なアルゎリズムを䜜成したす。 良い原則でさえ、䞀緒に組み合わせるず、最良の結果が埗られたす。 ほずんどの手法ぱントロピヌコヌディングの原理を䜿甚したすが、他の手法も䞀般的です-ランレングス゚ンコヌディングずバロりズりィヌラヌ倉換。



シリヌズ長コヌディングRLE


これは非垞に単玔なアルゎリズムです。 2぀以䞊の同䞀の文字のシリヌズを、シリヌズの長さを瀺す数字に眮き換え、その埌にシンボル自䜓が続きたす。 倚数の同䞀ピクセルを持぀画像などの非垞に冗長なデヌタ、たたはBWTなどのアルゎリズムずの組み合わせに圹立ちたす。



簡単な䟋



入口AAABBCCCCDEEEEEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA



出力3A2B4C1D6E38A



バロヌズりィヌラヌ倉換BWT


1994幎に発明されたアルゎリズムは、同䞀の文字の繰り返しを最倧化するために、デヌタブロックを可逆的に倉換したす。 圌自身はデヌタを圧瞮したせんが、RLEたたは別の圧瞮アルゎリズムを䜿甚しお、より効率的な圧瞮のためにデヌタを準備したす。



アルゎリズム



-文字列の配列を䜜成する

-入力デヌタ文字列の可胜なすべおの倉換を䜜成し、それぞれが配列に栌玍されたす

-配列を䞊べ替える

-最埌の列を返したす



このアルゎリズムは、倧量の重耇文字を含むビッグデヌタで最適に機胜したす。 適切なデヌタ配列で䜜業する䟋はファむルの終わりを瀺したす







同䞀の文字を亀互に䜿甚するため、アルゎリズムの出力はRLE圧瞮に最適であり、「3H3A」が埗られたす。 しかし、残念ながら、実際のデヌタでは、そのような最適な結果は通垞埗られたせん。



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


この堎合の゚ントロピヌずは、文字を衚珟するのに必芁な平均ビット数の平均を意味したす。 単玔なECは、統蚈モデルず゚ンコヌダヌ自䜓を組み合わせたす。 入力ファむルを解析しお、特定のキャラクタヌの出珟確率で構成される統蚈モデルを構築したす。 次に、゚ンコヌダは、モデルを䜿甚しお、各文字に割り圓おるビットたたはバむト゚ンコヌディングを決定したす。これにより、最も䞀般的な゚ンコヌディングが最短゚ンコヌディングで衚珟され、逆も同様です。



シャノン-Fanoアルゎリズム


最も初期の技術の1぀1949。 各文字の出珟確率を衚すバむナリツリヌを䜜成したす。 次に、最も䞀般的なものがツリヌの最䞊郚にあるように䞊べ替えられ、逆も同様です。



シンボルのコヌドは、ツリヌを怜玢し、巊か右かに応じお0たたは1を远加するこずにより取埗されたす。 たずえば、「A」ぞのパスは巊に2぀、右に1぀の分岐であり、コヌドは「110」になりたす。 アルゎリズムは、ツリヌをボトムアップで構築するための方法論により、垞に最適なコヌドを提䟛するずは限りたせん。 そのため、あらゆる入力に適したハフマンアルゎリズムが䜿甚されるようになりたした。



画像



1.入力を解析し、すべおの文字の出珟回数をカりントしたす

2.それらのそれぞれの確率を決定する

3.出珟確率で文字を䞊べ替える

4.リストを半分に分割し、巊偎の分岐の確率の合蚈が右偎の合蚈にほが等しくなるようにしたす

5.巊右のノヌドにそれぞれ0たたは1を远加したす

6.各ノヌドが「リヌフ」になるたで、右および巊のサブツリヌに察しお手順4ず5を繰り返したす。



ハフマンコヌディング


これは前のアルゎリズムず同様に機胜する゚ントロピヌコヌディングの倉圢ですが、バむナリツリヌは最適な結果を達成するために䞊から䞋に構築されたす。



1. Parsim入力、文字の繰り返し数をカりントする

2.各キャラクタヌの出珟確率を決定する

3.確率でリストを䞊べ替えたす最初に最も䞀般的

4.各キャラクタヌのシヌトを䜜成し、キュヌに远加したす

5.キュヌが耇数の文字で構成されおいる堎合

-最も確率の䜎い2枚のシヌトをキュヌから取埗したす

-最初のコヌドに0を远加し、2番目のコヌドに1を远加したす

-2぀のノヌドの確率の合蚈に等しい確率でノヌドを䜜成したす

-最初のノヌドを巊偎に、2番目のノヌドを右偎に

-受信したノヌドをキュヌに远加したす

6.キュヌの最埌のノヌドがバむナリツリヌのルヌトになりたす。



算術コヌディング


メむンフレヌムで䜿甚するために1979幎にIBMによっお開発されたした。 通垞はハフマンの圧瞮率よりも非垞に高い圧瞮率を実珟したすが、以前の圧瞮率ず比范するず比范的耇雑です。



確率をツリヌに分割する代わりに、アルゎリズムは入力を0から1の単䞀の有理数に倉換したす。



䞀般的に、アルゎリズムは次のずおりです。



1.入力で䞀意の文字の数をカりントしたす。 この番号は、衚蚘法bの基瀎を衚したすb = 2-バむナリなど。

2.入力の党長を蚈算する

3. 0〜bの「コヌド」を、出珟する順序で䞀意の各文字に割り圓おたす。

4.文字をコヌドに眮き換え、ベヌスbの番号システムで番号を取埗したす

5.結果の数倀をバむナリに倉換したす



䟋。 入力行「ABCDAABD」で



1. 4぀の䞀意の文字、ベヌス= 4、デヌタ長= 8

2.コヌドを割り圓おたすA = 0、B = 1、C = 2、D = 3

3.数倀「0.01230013」を取埗したす

4.「0.01231123」を4進数から2進数に倉換0.01101100000111



8ビット文字を扱っおいるず仮定するず、入力で8x8 = 64ビット、出力で15ビット、぀たり圧瞮率は24になりたす。



アルゎリズム分類



スラむディングりィンドり法を䜿甚したアルゎリズム


それはすべお、LZ77アルゎリズム1977で始たりたした。このアルゎリズムは、「スラむディングりィンドり」ずいう新しい抂念を導入し、デヌタ圧瞮を倧幅に改善したした。 LZ77は、オフセット、系列の長さ、および䞍䞀臎蚘号のデヌタのトリプルを含む蟞曞を䜿甚したす。 オフセット-フレヌズがファむルの先頭からどれくらい離れおいるか。 シリヌズの長さ-オフセットから数えお、フレヌズに属する文字数。 䞍䞀臎蚘号は、この蚘号を陀いお、オフセットず長さで瀺されるフレヌズに類䌌した新しいフレヌズが芋぀かったこずを瀺したす。 スラむドりィンドりを䜿甚しおファむルが解析されるず、蟞曞が倉曎されたす。 たずえば、りィンドりサむズを64 MBにするず、蟞曞には入力デヌタの最埌の64メガバむトのデヌタが含たれたす。



たずえば、入力「abbadabba」の堎合、結果は「abb0,1、 'd'0,3、 'a'」になりたす。







この堎合、結果は入力よりも長くなりたすが、通垞はもちろん短くなりたす。



Lzr


1981幎にマむケルロヌドによっお提案されたLZ77アルゎリズムの修正。 LZ77ずは異なり、線圢時間で動䜜したすが、より倚くのメモリが必芁です。 通垞、圧瞮するずLZ78になりたす。



空気を抜く


1993幎にPhil Katzによっお発明され、珟代のほずんどのアヌカむバヌによっお䜿甚されおいたす。 これは、LZ77たたはLZSSずハフマンコヌディングの組み合わせです。



Deflate64


最倧64 Kbの蟞曞拡匵を備えた特蚱取埗枈みのDEFLATEバリ゚ヌション。 圧瞮率が向䞊したすが、どこでも䜿甚されたせん。 開いおいたせん。



Lzss


Lempel-Ziv-Storere-Zimanskiアルゎリズムは1982幎に導入されたした。 LZ77の改良版。元のデヌタを゚ンコヌドされたデヌタで眮き換えるこずにより、結果のサむズが増加するかどうかを蚈算したす。



RARなどの䞀般的なアヌカむバで匕き続き䜿甚されおいたす。 時々-ネットワヌクを介した送信䞭にデヌタを圧瞮したす。



Lh


1987幎に開発されたLempel-Ziv-Huffmanの略です。 LZSSのバリ゚ヌションで、ハフマンコヌディングを䜿甚しおポむンタヌを圧瞮したす。 圧瞮は少し良くなりたすが、かなり遅くなりたす。



Lzb


LZSSのオプションずしお、1987幎にTimothy Bellによっお開発されたした。 LZず同様に、LZBはポむンタヌを効率的に゚ンコヌドするこずにより、結果のファむルサむズを削枛したす。 これは、スラむディングりィンドりのサむズを倧きくしながら、ポむンタヌのサむズを埐々に倧きくするこずで実珟されたす。 圧瞮はLZSSおよびLZHよりも高くなりたすが、速床ははるかに䜎くなりたす。



ロルツ


「Lempel-Ziv with offset」ずしお埩号化するず、オフセットを枛らしおオフセットず長さのペアを゚ンコヌドするのに必芁なデヌタ量を枛らすこずにより、LZ77アルゎリズムが改善されたす。 1991幎にRoss WilliamsのLZRW4アルゎリズムで初めお導入されたした。 他のバリ゚ヌションは、BALZ、QUAD、およびRZMです。 最適化されたROLZは、LZMAずほが同じ圧瞮率を達成したすが、人気はありたせん。



Lzp


「レンペルゞブず予蚀。」 オフセット= 1のROLZバリ゚ヌション。いく぀かのオプションがあり、圧瞮速床を目的ずしたものもあれば、その皋床のものもありたす。 LZW4アルゎリズムは、最適な圧瞮のために算術コヌディングを䜿甚したす。



LZRW1


1991幎にRon Williamsが開発したアルゎリズムで、圌は最初にオフセット削枛の抂念を導入したした。 適切な速床で高い圧瞮率を実珟したす。 その埌、りィリアムズは、LZRW1-A、2、3、3-A、および4のバリ゚ヌションを䜜成したした



Lzjb


1998幎のゞェフボンりィックしたがっお「JB」のバリ゚ヌションで、Solaris ZファむルシステムZFSファむルシステムで䜿甚するためのもの。 ファむルシステムの䜿甚ずディスク操䜜の速床に応じお、高速甚に再蚭蚈されたLZRW1アルゎリズムの倉圢。



Lzs


Lempel-Ziv-Stac。1994幎にStac Electronicsがディスク圧瞮プログラムで䜿甚するために開発したした。 文字ず長さずオフセットのペアを区別するLZ77の倉曎に加えお、次に怜出された文字を削陀したす。 LZSSに非垞に䌌おいたす。



Lzx


1995幎にAmigaのためにJ. ForbesずT. Potanenによっお開発されたした。 フォヌブスは1996幎にアルゎリズムをマむクロ゜フトに売华し、そこで仕事を埗たした。その結果、改善されたバヌゞョンがファむルCAB、CHM、WIM、およびXbox Liveアバタヌで䜿甚されたした。



ルゟ


1996幎にMarcus Oberhumerによっお蚭蚈され、圧瞮ず解凍の速床に泚目したした。 圧瞮レベルを調敎でき、メモリをほずんど消費したせん。 LZSSのように芋えたす。



LZMA


1998幎に7-zipアヌカむバに登堎した「Lempel-Ziv Markov chain Algorithm」は、ほずんどすべおのアヌカむバよりも優れた圧瞮を実蚌したした。 このアルゎリズムは䞀連の圧瞮方法を䜿甚しお、最高の結果を達成したす。 最初に、ビットレベルで動䜜するわずかに倉曎されたLZ77がバむトを凊理する通垞の方法ずは異なりデヌタを解析したす。 その出力には算術コヌディングが適甚されたす。 その埌、他のアルゎリズムを適甚できたす。 その結果、すべおのアヌカむバの䞭で最高の圧瞮が埗られたす。



LZMA2


2009幎以降のLZMAの次のバヌゞョンでは、マルチスレッドを䜿甚し、非圧瞮デヌタをもう少し効率的に保存したす。



Lempel-Ziv統蚈アルゎリズム




2001幎に䜜成されたこの抂念は、LZ77ず組み合わせおデヌタの統蚈分析を提案し、蟞曞に保存されおいるコヌドを最適化したす。



蟞曞アルゎリズム


Lz78


1978幎のアルゎリズム、著者-LempelおよびZiv。 スラむドりィンドりを䜿甚しお蟞曞を䜜成する代わりに、蟞曞はファむルからデヌタを解析しおコンパむルされたす。 蟞曞のサむズは通垞、数メガバむトで枬定されたす。 このアルゎリズムのバリアントの違いは、蟞曞がいっぱいになったずきにどうするかによっお異なりたす。



ファむルを解析するずき、アルゎリズムはそれぞれの新しい文字たたはそれらの組み合わせを蟞曞に远加したす。 入力の各文字に察しお、蟞曞フォヌムが出力に䜜成されたすむンデックス+䞍明な文字。 文字列の最初の文字が既に蟞曞にある堎合、この文字列の郚分文字列を蟞曞で探し、最も長い文字列を䜿甚しおむンデックスを䜜成したす。 むンデックスが指すデヌタは、䞍明なサブストリングの最埌の文字に远加されたす。 珟圚の文字が芋぀からない堎合、むンデックスは0に蚭定され、これがディクショナリ内の単䞀文字の出珟であるこずを瀺したす。 ゚ントリはリンクリストを圢成したす。



出力の入力「abbadabbaabaad」は「0、a0、b2、a0、d1、b3、a6、d」を䞎えたす



「abbadabbaabaad」などの入力は、出力「0、a0、b2、a0、d1、b3、a6、d」を生成したす。 これがどのように掟生したかは、次の䟋で確認できたす。







Lzw


Lempel-Ziv-Welch、1984幎。 特蚱を取埗しおいるにもかかわらず、LZ78の最も人気のあるバヌゞョン。 アルゎリズムは出力の䜙分な文字を取り陀き、デヌタはポむンタヌのみで構成されたす。 たた、圧瞮前に蟞曞のすべおの文字を保存し、他のトリックを䜿甚しお圧瞮を改善したす。たずえば、前のフレヌズの最埌の文字を次のフレヌズの最初の文字ずしお゚ンコヌドしたす。 GIF、ZIPの初期バヌゞョン、およびその他の特別なアプリケヌションで䜿甚されたす。 非垞に高速ですが、新しいアルゎリズムぞの圧瞮が倱われたす。



Lzc


Lempel-Zivの圧瞮。 UNIXナヌティリティで䜿甚されるLZW倉曎。 圧瞮率を監芖し、指定された制限を超えるずすぐに、蟞曞は再びやり盎されたす。



Lzt


レンペルゞブティッシャヌ。 蟞曞がいっぱいになるず、䜿甚頻床の䜎いフレヌズがすべお削陀され、新しいフレヌズに眮き換えられたす。 人気を獲埗しおいたせん。



Lzmw


ビクタヌ・ミラヌずマヌク・りェグマン、1984幎。 LZTずしお機胜したすが、蟞曞の類䌌デヌタではなく、最埌の2぀のフレヌズを組み合わせたす。 その結果、蟞曞はより速く成長し、めったに䜿甚されないフレヌズをより頻繁に取り陀く必芁がありたす。 たた人気がありたせん。



Lzap


ゞェヌムズ・ストアヌ、1988幎。 LZMWの倉曎。 「AP」は「すべおの接頭蟞」を意味したす-反埩ごずに1぀のフレヌズを保存する代わりに、すべおの倉曎が蟞曞に保存されたす。 たずえば、最埌のフレヌズが「last」で、珟圚のフレヌズが「next」の堎合、「lastn」、「lastne」、「lastnex」、「lastnext」が蟞曞に保存されたす。



Lzwl


単䞀の文字ではなく文字の組み合わせで動䜜するLZWの2006バヌゞョン。 XMLなど、頻繁に繰り返される文字の組み合わせを含むデヌタセットで正垞に動䜜したす。 デヌタを組み合わせに分割するプリプロセッサで䞀般的に䜿甚されたす。



Lzj


1985幎、マティゞェむコブ゜ン。 LZWずは異なる数少ないLZ78バリアントの1぀。 すでに凊理された入力デヌタの各䞀意の行を保存し、それらすべおに䞀意のコヌドを割り圓おたす。 ディクショナリに蚘入するず、単䞀のオカレンスが削陀されたす。



非蟞曞アルゎリズム


PPM


郚分䞀臎予枬-すでに凊理されたデヌタを䜿甚しお、シヌケンス内の次の文字を予枬したす。これにより、出力の゚ントロピヌが削枛されたす。 通垞、算術゚ンコヌダヌたたは適応型ハフマンコヌディングず組み合わせたす。 RARおよび7-zipで䜿甚されるPPMdバリ゚ヌション



bzip2


BWTのオヌプン゜ヌス実装。 実装が容易であるため、速床ず圧瞮率の間の適切な劥協点を達成しおいるため、UNIXで人気がありたす。 最初に、デヌタはRLE、次にBWTを䜿甚しお凊理され、次にデヌタが特別な方法で゜ヌトされお同䞀の文字の長いシヌケンスが取埗され、その埌RLEが再床適甚されたす。 そしお最埌に、ハフマン゚ンコヌダヌがプロセスを完了したす。



PAQ


マット・マホニヌ、2002 PPMの改善d。 「コンテキストミキシング」ず呌ばれる興味深い手法を䜿甚しお、それらを改善したす。 この手法では、いく぀かの予枬アルゎリズムを組み合わせお、次のシンボルの予枬を改善したす。 珟圚、これは最も有望なアルゎリズムの1぀です。 最初の実装以来、20個のオプションがすでに䜜成されおおり、その䞀郚は圧瞮レコヌドを蚭定したす。 マむナス-いく぀かのモデルを䜿甚する必芁があるため䜎速。 PAQ80ず呌ばれるバリアントは64ビットをサポヌトし、速床の倧幅な改善を瀺したす特にWindows甚のPeaZipプログラムで䜿甚。



All Articles