(Translated by https://www.hiragana.jp/)
Lempel-Ziv-Markov chain-Algorithm - Wikipedia コンテンツにスキップ

Lempel-Ziv-Markov chain-Algorithm

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
LZMAから転送てんそう

Lempel-Ziv-Markov chain-AlgorithmりゃくしてLZMA)は、2001ねんから開発かいはつされているデータ圧縮あっしゅくアルゴリズムで、7-Zipアーカイバの7zフォーマットやXZ Utilsxzフォーマットで使用しようされている。LZMAは、LZ77少々しょうしょう類似るいじした辞書じしょしき圧縮あっしゅくほう英語えいごばん使用しようし、通常つうじょうbzip2以上いじょうたか圧縮あっしゅくりつ伸張しんちょう速度そくど、および最大さいだい4GBのサイズ可変かへん圧縮あっしゅく辞書じしょ特徴とくちょうとする。

LZMA2は、圧縮あっしゅくされていないデータとLZMAデータの両方りょうほうふくむことができ、複数ふくすうことなるLZMAエンコーディングパラメータをふくむことができる単純たんじゅんなコンテナ形式けいしきである。 LZMA2は、任意にんいにスケーラブルなマルチスレッドの圧縮あっしゅく展開てんかいと、部分ぶぶんてき圧縮あっしゅくデータの効率こうりつてき圧縮あっしゅくをサポートする。

概要がいよう

[編集へんしゅう]

LZMAは、改良かいりょうLZ77圧縮あっしゅくアルゴリズムと、バックエンドにレンジコーダー(Range Coder)を使用しようしている。

辞書じしょ圧縮あっしゅくアルゴリズムは、巨大きょだい辞書じしょサイズと、かえ使用しようされる一致いっち距離きょり特別とくべつなサポートをLZ77変種へんしゅ使用しようし、その出力しゅつりょくはレンジコーダーで符号ふごうされ、複雑ふくざつなモデルを使用しようしてかくビットのかくりつ予測よそくおこなう。 辞書じしょ圧縮あっしゅく洗練せんれんされた辞書じしょデータ構造こうぞう使用しようして一致いっちれつつけ、レンジコーダーによりいちに1ビットずつリテラルシンボルとフレーズリファレンスのストリームを生成せいせいする。

LZMAよりまえのほとんどのエンコーダモデルは純粋じゅんすいにバイトベースだった。 LZMAのおも革新かくしんは、一般いっぱんてきなバイトベースのモデルのわりに、リテラルまたはフレーズのかく表現ひょうげんのビットフィールドに固有こゆうのコンテキストを使用しようする。これは、一般いっぱんてきなバイトベースのモデルほど簡単かんたんだが、関連かんれんせいのないビットをおなじコンテキストで混在こんざいさせないようにするためである。さらに、古典こてんてき辞書じしょ圧縮あっしゅく(zipやgzip形式けいしき使用しようされているものなど)とくらべて、辞書じしょのサイズは、現代げんだいのシステムで利用りよう可能かのう大量たいりょうのメモリを利用りようすることができる。

LZMA形式けいしき

[編集へんしゅう]

LZMA圧縮あっしゅくでは、圧縮あっしゅくストリームは、適応てきおうバイナリレンジコーダを使用しようして符号ふごうされたビットストリームである。 ストリームはパケットに分割ぶんかつされ、かくパケットは1バイトまたはLZ77シーケンスのながさと距離きょり暗黙あんもくてきまたは明示めいじてきにエンコードされている。 かくパケットのかく部分ぶぶん独立どくりつしたコンテキストでモデルされるので、かくビットのかくりつ予測よそくは、おなじタイプの以前いぜんのパケットのそのビット(およびおなじフィールドからの関連かんれんビット)の相関そうかんがある。

LZMA2形式けいしき

[編集へんしゅう]

LZMA2コンテナは、複数ふくすう圧縮あっしゅくLZMAデータと圧縮あっしゅくデータをサポートする。それぞれのLZMA圧縮あっしゅくされたラン(データのかたまり)は、ことなるLZMA構成こうせい辞書じしょつことができる。これにより、部分ぶぶんてきまたは完全かんぜん圧縮あっしゅくファイルの圧縮あっしゅく改善かいぜんされ、並列へいれつ独立どくりつして圧縮あっしゅくまたは展開てんかいすることができるようにファイルをランに分割ぶんかつしマルチスレッドで処理しょりすることが可能かのうになる。

xz形式けいしきと7z形式けいしき

[編集へんしゅう]

LZMA2データをふくむことができるxz形式けいしきtukaani.org[1]記載きさいされている。また、LZMAまたはLZMA2データをふくむことができる.7zファイル形式けいしきは、LZMA SDK[2]ふくまれる7zformat.txtファイルに記載きさいされている。

LZMAを圧縮あっしゅく伸長しんちょうするためのSDKが公開こうかいされている[1]。 ドキュメント、サンプル、ヘッダファイルソースコードなどをふくむ。 ライセンスはバージョン4.62以降いこうパブリックドメインとなった。 C++ANSI-CC#Java実装じっそうされている。 伸長しんちょうアルゴリズムはすべての32ビットCPU実装じっそう可能かのうであり、制約せいやくをつければ16ビットCPUでも実装じっそう可能かのうである。

速度そくど

[編集へんしゅう]
  • 圧縮あっしゅく速度そくど - 1GHzのCPUで0.5MB/s
  • 伸長しんちょう速度そくど - 1GHzのPentium IIIで8~12MB/s。100MHzのARMで0.5~1MB/s。

7-Zipリファレンス実装じっそう

[編集へんしゅう]

LZMAのリファレンス実装じっそうは、7z7-Zipツールセットの一部いちぶふくまれる。ソースコードはGNU LGPLライセンスで配布はいふされている。

オープンソースのリファレンス実装じっそうであるLZMA圧縮あっしゅくライブラリは、 C++記述きじゅつされていて、以下いか特性とくせいがある。

7-Zip実装じっそうには、ハッシュチェイン分木ぶんぎ基数きすう辞書じしょ検索けんさくアルゴリズムの基礎きそとする、複数ふくすう変種へんしゅがある。

LZMAの伸長しんちょう専用せんようコードはC言語げんご記述きじゅつされていて、通常つうじょう5kB前後ぜんこうにコンパイルされる。また、伸長しんちょう必要ひつようなRAMのりょうは、おも圧縮あっしゅくのスライドまどおおきさによって決定けっていする。ちいさいコードサイズと、辞書じしょちいさくすることにより比較的ひかくてき少量しょうりょうになるメモリ消費しょうひりょうは、LZMA伸長しんちょうアルゴリズムをアプリケーションにのにてきするものとしている。

最近さいきんでは、XZ Embeddedとして、とくみシステムけにとくされたライブラリが提供ていきょうされている。これはLinuxカーネル統合とうごうすること目的もくてきとしているが、独自どくじのシステムにも容易よういみが可能かのうである。

リファレンス実装じっそう移植いしょくせい

[編集へんしゅう]

ソースコードには、広範囲こうはんいMicrosoft Windows特有とくゆう機能きのう使用しようされ、しかも分離ぶんりされていない。このため、リファレンス実装じっそうフリーソフトウェアであるにもかかわらず、UNIX互換ごかんようバージョンが登場とうじょうするまでに時間じかんがかかった。

現在げんざいUnixけいプラットフォームでうご移植いしょくばんが2つある:

  • p7zip、これは7-Zip7z7zaコマンドラインツールの移植いしょくばんである。p7zipは、標準ひょうじゅん7zアーカイブストリームを生成せいせいする。これはLZMAにあわせることができる追加ついかフィルタで使用しようされている。フィルタは、たとえば、実行じっこうファイルのジャンプやサブルーチン命令めいれい相対そうたいアドレスぜん処理しょりなどである。
  • LZMA Utils、これはLZMAコードだけからなる移植いしょくばんである。これはなまのLZMAストリームを、gzipbzip2圧縮あっしゅくユーティリティと同様どうようあつかえるように設計せっけいされている。lzmaツールで、.tarのように複数ふくすうのファイルをアーカイブできる。出力しゅつりょくは、ヘッダ情報じょうほうのないなまのLZMAである。現在げんざいではXZ Utilsがメインストリームとなり、LZMA Utilsの開発かいはつ終息しゅうそくしている。
  • XZ Embedded、XZ Utilsの伸張しんちょうコードだけをして整理せいりしたライブラリで、おもLinuxカーネルのブート使用しようする前提ぜんてい設計せっけいされている。ただし、独自どくじのシステムにも容易ようい移植いしょく可能かのうとなっている。

注意ちゅうい:7-ZipとLZMAで生成せいせいされるLZMAストリームはことなる。つまり互換ごかんである。基本きほんてきに、一方いっぽうのツールで生成せいせいしたファイルはもう一方いっぽうあつかうことはできない。ただし7-Zipはバージョン4.58でLZMAストリームの伸張しんちょうをサポートした。7-Zipは圧縮あっしゅくのファイルサイズをふく64ビットヘッダエントリを付加ふかするが、LZMA Utilsではこれがない。

関連かんれんソフトウェア

[編集へんしゅう]

LZMAを使用しようするか、サポートするソフトウェア。

参照さんしょう

[編集へんしゅう]
  1. ^ The .xz File Format” (2009ねん8がつ27にち). 2018ねん4がつ22にち閲覧えつらん
  2. ^ Igor Pavlov (2013ねん). “LZMA SDK (Software Development Kit)”. 2018ねん4がつ22にち閲覧えつらん

外部がいぶリンク

[編集へんしゅう]