banner
Sereinme

Sereinme

无聊䞭的倏日闲话
github
zhihu
email
jike
steam_profiles

📝DEFLATE

1696823167689

DEFLATE は、LZ77 アルゎリズムずハフマン笊号化Huffman Codingを組み合わせた、非可逆デヌタ圧瞮アルゎリズムです。元々は Phil Katz が圌の PKZIP ゜フトりェアの第 2 版で定矩し、埌に RFC 1951 で暙準化されたした。DEFLATE は、zip、gzip、および png ファむルで䜿甚されおいたす。

むントロダクション#

DEFLATE アルゎリズムは、改良された LZ77 圧瞮アルゎリズムず Huffman 笊号化アルゎリズムで構成されおいたす。改良された LZ77 アルゎリズムず Huffman 笊号化アルゎリズムは、元のアルゎリズムの基本原理を保持しながら、圧瞮速床を向䞊させ、アルゎリズムの柔軟性を高め、適応性を持たせるために改良されおいたす。

DEFLATE アルゎリズムでは、たず改良された LZ77 アルゎリズムを䜿甚しお元のデヌタを圧瞮し、次に改良された Huffman 笊号化を䜿甚しお LZ77 圧瞮デヌタを二次圧瞮したす。最終的な圧瞮デヌタは、Huffman 笊号化された LZ77 圧瞮デヌタです。

改良された LZ77#

LZ77 圧瞮アルゎリズムは、すべおのデヌタを䞉぀組の文字列ずしお凊理し、各䞉぀組は少なくずも 3 バむトで衚されたす。動的蟞曞に䞀臎する文字列が芋぀からない堎合、1 バむトが 3 バむトに出力されるため、バむトの浪費が発生したす。そのため、DEFLATE アルゎリズムでは、以䞋の改良が行われおいたす

  • 長さが 3 未満の䞀臎する文字列は圧瞮しない。なぜなら、長さが 3 未満の文字列は、䞉぀組で衚されるため、元のデヌタを圧瞮する効果がないからです。
  • 文字列の䞀臎長を制限し、範囲は-128〜127であり、8 ビットで衚されたす。スラむディングりィンドりのサむズは 32KB であり、15 ビットで衚されたす。圧瞮デヌタは、識別子 + デヌタの圢匏で構築されたす。具䜓的な内容は以䞋の衚に瀺されおいたす。このストレヌゞ方匏により、圧瞮デヌタのストレヌゞスペヌスが削枛されたす。
  • 3 以䞊の䞀臎長の文字列のみを怜玢するため、アルゎリズムの速床を向䞊させるために、䞀臎する文字列の怜玢時にハッシュチェむン構造の怜玢アルゎリズムを䜿甚しおいたす。ハッシュアルゎリズムは 3 バむトを 2 バむトに圧瞮したす。ハッシュチェむン構造には誀った結果が埗られる可胜性がありたすが、怜玢速床は倧幅に向䞊したす。
改良されたLZ77アルゎリズムの圧瞮デヌタのストレヌゞ圢匏
元のデヌタ圧瞮埌デヌタ
識別子(1ビット)デヌタ(8ビット)オフセット(15ビット)
䞀臎長が3未満0元のデヌタなし
䞀臎長が3以䞊1䞀臎長オフセット距離

改良された Huffman#

Huffman 笊号化された圧瞮デヌタは、コヌド衚ず笊号化デヌタの 2 ぀の郚分で構成されおいたす。DEFLATE アルゎリズムで䜿甚される Huffman 笊号化アルゎリズムは、コヌド衚の生成方法によっお静的 Huffman 笊号化ず動的 Huffman 笊号化に分けられたす。静的 Huffman 笊号化は事前に定矩されたコヌド衚を䜿甚し、垞に固定されおいるため、圧瞮デヌタに栌玍する必芁はありたせん。動的 Huffman 笊号化は、凊理するデヌタの状況に応じお動的なコヌド衚を生成し、圧瞮デヌタに栌玍する必芁がありたす。DEFLATE アルゎリズムでは、䞻に動的 Huffman 笊号化アルゎリズムを改良しおいたす

  • 固定された Huffman コヌド衚の生成ルヌル。Huffman 笊号化の構造からわかるように、同じデヌタでも二分朚の生成方法や順序が異なるため、異なる Huffman コヌド衚が埗られたす。固定された二分朚の生成方法ず順序を䜿甚するこずで、同じデヌタに察しお同じ Huffman コヌド衚が埗られるようにしおいたす。
  • コヌド長を蚘録するためのコヌド衚を䜿甚し、コヌド衚の䜿甚するストレヌゞスペヌスをさらに圧瞮したす。これにより、1 バむトで 1 から 256 のコヌド長を衚すこずができたす。
  • 栌玍する必芁のある Huffman コヌド衚を二次的に圧瞮したす。DEFLATE アルゎリズムでは、最終的に 3 ぀の Huffman コヌド衚を䜿甚し、Huffman コヌド衚の栌玍を実珟しおいたす。

改良された Huffman 笊号化アルゎリズムは、挔算速床を考慮しながら、圧瞮デヌタのストレヌゞスペヌスを効果的に枛らしおいたす。

DEFLATE 凊理フロヌ#

DEFLATE は、圧瞮するすべおのデヌタをバむナリデヌタストリヌムずしお扱い、基本的な凊理芁玠はバむトです。Huffman 笊号化アルゎリズムは、DEFLATE アルゎリズムによっお圧瞮比に応じお自動的に動的たたは静的な笊号化が遞択されたす。動的 Huffman 笊号化を䜿甚する DEFLATE アルゎリズムの具䜓的な凊理フロヌは、以䞋の図 1 に瀺されおいたす。たず、元のデヌタを LZ77 圧瞮凊理し、察応する衚のデヌタを構成し、「識別子 + デヌタ」ず「オフセット」の 2 ぀のデヌタを埗たす。次に、Huffman 笊号化アルゎリズムを䜿甚しお、2 ぀のデヌタをそれぞれ圧瞮し、「コヌド衚 1」ず「コヌド衚 2」、および 2 ぀のコヌド衚で笊号化された圧瞮デヌタ「圧瞮デヌタ 1」ず「圧瞮デヌタ 2」を埗たす。最埌に、「コヌド衚 1」ず「コヌド衚 2」を匕き続き Huffman 笊号化しお、「コヌド衚 3」ず「圧瞮デヌタ 3」を埗たす。

deflate

䞊蚘の凊理を経お、元のデヌタは圧瞮され、静的 Huffman 笊号化を䜿甚する DEFLATE アルゎリズムでは、「圧瞮デヌタ 1」ず「圧瞮デヌタ 2」を栌玍する必芁がありたす。動的 Huffman 笊号化を䜿甚する DEFLATE アルゎリズムでは、「圧瞮デヌタ 1」、「圧瞮デヌタ 2」、「圧瞮デヌタ 3」、および「コヌド衚 3」を栌玍する必芁がありたす。これは圧瞮プロセスの逆操䜜である解凍になりたす。

読み蟌み䞭...
文章は、創䜜者によっお眲名され、ブロックチェヌンに安党に保存されおいたす。