JP2013211643A - 圧縮方法、復元方法、情報処理装置及びプログラム - Google Patents

圧縮方法、復元方法、情報処理装置及びプログラム Download PDF

Info

Publication number
JP2013211643A
JP2013211643A JP2012079511A JP2012079511A JP2013211643A JP 2013211643 A JP2013211643 A JP 2013211643A JP 2012079511 A JP2012079511 A JP 2012079511A JP 2012079511 A JP2012079511 A JP 2012079511A JP 2013211643 A JP2013211643 A JP 2013211643A
Authority
JP
Japan
Prior art keywords
word
length
character string
encoding
match
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2012079511A
Other languages
English (en)
Inventor
Nobuko Itani
宣子 井谷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2012079511A priority Critical patent/JP2013211643A/ja
Publication of JP2013211643A publication Critical patent/JP2013211643A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

【課題】短い繰り返しと長い繰り返しとが混在するようなデータをより効率的に圧縮する。
【解決手段】圧縮方法は、data_compression_com_decompressionのような文字列を圧縮する場合に、_comについては、その_coが_compressionにおける_coと一致するので_coと語頭文字列m=0且つ一致長l=1で_co(0,1)と符号化する。また、decompressionにおけるcompressionについては、直前のcomを用いずに、語頭文字pを設定することでcompが共通するcompressionを直近出現位置として特定し、語頭文字列長m=1及び一致長l=7であるからcom(1,7)pと符号化する。
【選択図】図13

Description

本技術は、データ圧縮技術に関する。
データを圧縮する技術には、LZ(Lempel Ziv)77符号やSLC(Super Lossless data Compression)符号が知られている。なお、本願では、データの種類を問わず、データの1語(word)単位を文字と呼び、データの任意の長さの語が繋がったものを文字列と呼ぶこととする。
LZ77符号は、繰り返し出現する文字列を過去に出現した文字列の出現位置とその長さで表現する。SLC符号は繰り返しの先頭N文字を繰返し符号の一部と扱わないで残すことで、残した先頭N文字(=語頭N文字)に過去の最近一致位置を関連付け、一致長のみで符号化を行う。LZ77符号が長い繰り返しのみを効率的に扱うのに対して、SLC符号は短い繰り返しと長い繰り返しの双方を効率的に圧縮できるメリットがある。
例えば図1に示すように、Data_compression_&_decompressionという文字列(アンダーバーはスペースを表すものとする)を圧縮する場合、compressionという文字列が繰り返されている。LZ77符号によれば、decompressionに含まれるcompressionは、位置6から11文字(長さ11)一致するので、(6,11)と表される。一方、SLC符号では、N=3とするとcomが語頭文字列となり、この語頭文字列の後の文字列の一致長は8となるので、decompressionに含まれるcompressionは、(com,8)と表される。
SLC符号は、短い繰り返しも効率的に圧縮できるメリットがある一方、過去の一致位置と関連付けるために残す語頭N文字が多頻出するデータでは、長い繰返しを短い繰返しと同じに扱うことになり、効率的に圧縮できない問題がある。例えば、図2のような文字列を考える。この文字列Data_compression_com_decompression(アンダーバーはスペースを表すものとする)では、文字列comが3回出現している。decompressionにおけるcomは、直前のcomと一致しているので、SLC符号によれば(com,0)と表される。しかしながら、decompressionにおけるcompressionは、それより前にcompressionそのものが出現しているので、こちらを利用できればより効率的な符号化が可能となる。このように、SLC符号では、固定の長さNの文字列に関連付けられた1つの最近一致位置しか用いることができないため、LZ77符号のように離れた長い繰返しを利用できない場合がある。図2の例に対してLZ77符号を用いれば、decompressionにおけるcompressionは、同じく(6,11)と符号化できる。ログデータのように、短い繰り返しが頻出する一方で、長い繰り返しも含むようなデータでは、このような問題が顕在化する。
特開2000−124810号公報
従って、本技術の目的は、短い繰り返しと長い繰り返しとが混在するようなデータをより効率的に圧縮するための技術を提供することである。
本技術の第1の態様に係る圧縮方法は、(A)第1のデータ格納部に格納されており且つ複数の語を含む圧縮対象データにおいて直前に符号化された第1の語長の語が過去に出現していたことを検出すると、上記第1の語長の語の後ろに出現する符号化前の語と過去に出現した上記第1の語長の語の後ろに出現する符号化済みの語とが一致する第1の一致長を特定する第1の特定処理と、(B)上記第1の語長の語に当該第1の語長の語の後ろに出現する第2の語長の符号化前の語を加えることで得られる第3の語長の語が圧縮対象データにおいて過去に出現した位置を探索して、第3の語長の語の過去の出現位置が検出されると、第3の語長の語の後ろに出現する符号化前の語と過去に出現した第3の語長の語の後ろに出現する符号化済みの語とが一致する第2の一致長を特定する第2の特定処理と、(C)第1の一致長より第2の一致長が長い場合には、第2の語長又は第3の語長と第2の一致長と第2の語長の符号化前の語とを符号化して、第2のデータ格納部に格納する第1の符号化処理と、(D)第1の一致長が第2の一致長以上である場合又は第2の一致長が特定されない場合には、ゼロ又は第1の語長と前記第1の一致長とを符号化して、第2のデータ格納部に格納する第2の符号化処理と、(E)圧縮対象データにおいて第1の語長の語が過去に出現していない場合には、第1の語長の語の後ろに出現する符号化前の語を符号化して、第2のデータ格納部に格納する処理とを含む。
本技術の第2の態様に係る復元方法は、(A)第1のデータ格納部に格納されており且つ復元された複数の語において直前に復元された第1の語長の語が過去に復元されていたことを検出すると、第2のデータ格納部に格納されており且つ上記第1の語長の語の後ろに出現し且つ連結すべき語の語長を特定するための第2の語長に相当する第1の符号と、連結すべき語の後ろで一致する語の一致長を表す第3の語長に相当する第2の符号と、上記連結すべき語に相当する第3の符号とを復元する処理と、(B)復元された上記連結すべき語を、第1のデータ格納部に格納する処理と、(C)複数の語において、上記第1の語長の語と連結すべき語とを連結することで得られる第4の語長の語の後ろで復元されている第3の語長の語をコピーして、第1のデータ格納部に格納する処理と、(D)複数の語において、上記第1の語長の語が過去に復元されていないことを検出すると、第2のデータ格納部に格納されており且つ第1の語長の語の符号の後ろに出現する符号を復元して、第1のデータ格納部に格納する処理とを含む。
短い繰り返しと長い繰り返しとが混在するようなデータをより効率的に圧縮できるようになる。
図1は、圧縮すべきデータの一例を示す図である。 図2は、圧縮すべきデータの一例を示す図である。 図3は、圧縮すべきデータの一例を示す図である。 図4は、圧縮処理の一例を説明するための図である。 図5は、最近出現位置を格納するデータ構造例を示す図である。 図6は、圧縮処理の一例を説明するための図である。 図7は、最近出現位置を格納するデータ構造例を示す図である。 図8は、圧縮処理の一例を説明するための図である。 図9は、最近出現位置を格納するデータ構造例を示す図である。 図10は、圧縮処理の一例を説明するための図である。 図11は、最近出現位置を格納するデータ構造例を示す図である。 図12は、圧縮データの一例を示す図である。 図13は、圧縮処理を行う情報処理装置の機能ブロック図である。 図14は、圧縮処理の処理フローを示す図である。 図15は、圧縮処理の処理フローを示す図である。 図16は、復元処理の一例を説明するための図である。 図17は、最近出現位置を格納するデータ構造例を示す図である。 図18は、復元処理の一例を説明するための図である。 図19は、最近出現位置を格納するデータ構造例を示す図である。 図20は、復元処理の一例を説明するための図である。 図21は、最近出現位置を格納するデータ構造例を示す図である。 図22は、復元処理の一例を説明するための図である。 図23は、最近出現位置を格納するデータ構造例を示す図である。 図24は、復元処理を行う情報処理装置の機能ブロック図である。 図25は、復元処理の処理フローを示す図である。 図26は、第2の実施の形態における圧縮処理の処理フローを示す図である。 図27は、第3の実施の形態における第2符号化部の構成例を示す図である。 図28は、第3の実施の形態における第2符号化部の処理フローを示す図である。 図29は、コンピュータの機能ブロック図である。
[実施の形態1]
まず、本実施の形態においてどのように圧縮がなされるかについて具体例を用いて説明する。本実施の形態では、図3に示すような文字列を圧縮する場合を考える。すなわち、data_compression_com_decompression_data_comという文字列を圧縮する。なお、図3において文字の上に記載された数字は位置を表すものである。
この圧縮処理の過程を図4乃至図12を用いて説明する。なお、既に符号化を行った直前N文字のNは3であるものとする。ステップ(1)では、既に符号化を行った直前N文字は存在しないので、現在位置の文字「d」については、そのまま符号化して”d”が生成される。”d”は文字「d」の符号を表すものとする。そして、現在位置を1つ先に進める。
ステップ(2)では、直前N文字はまだ揃っていないので、現在位置の文字「a」については、そのまま符号化して”a”が生成される。そして、現在位置を1つ先に進める。ステップ(3)では、直前N文字はまだ揃っていないので、現在位置の文字「t」については、そのまま符号化して”t”が生成される。そして、現在位置を1つ先に進める。
ステップ(4)では、直前N文字が「dat」となるので、過去に文字列「dat」が出現していたか確認する。この場合出現していないので、現在位置の文字「a」を、そのまま符号化して”a”を生成する。さらに、図5に示すように、直前N文字に連結する文字列である語頭文字列の文字列長i=0について、文字列「dat」と出現位置「1」(ここでは先頭の文字「d」の出現位置を示しているが、最後の文字「t」の出現位置であっても良い)とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(5)では、直前N文字が「ata」となるので、過去に文字列「ata」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「_」を、そのまま符号化して”_”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「ata」と出現位置「2」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「data」と出現位置「1」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(6)では、直前N文字が「ta_」となるので、過去に文字列「ta_」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「c」を、そのまま符号化して”c”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「ta_」と出現位置「3」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「ata_」と出現位置「2」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「data_」と出現位置「1」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(7)では、直前N文字が「a_c」となるので、過去に文字列「a_c」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「o」を、そのまま符号化して”o”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「a_c」と出現位置「4」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「ta_c」と出現位置「3」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「ata_c」と出現位置「2」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「data_c」と出現位置「1」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(8)では、直前N文字が「_co」となるので、過去に文字列「_co」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「m」を、そのまま符号化して”m”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「_co」と出現位置「5」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「a_co」と出現位置「4」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「ta_co」と出現位置「3」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ata_co」と出現位置「2」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「data_co」と出現位置「1」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(9)では、直前N文字が「com」となるので、過去に文字列「com」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「p」を、そのまま符号化して”p”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「com」と出現位置「6」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「_com」と出現位置「5」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「a_com」と出現位置「4」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ta_com」と出現位置「3」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ata_com」と出現位置「2」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(10)では、直前N文字が「omp」となるので、過去に文字列「omp」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「r」を、そのまま符号化して”r”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「omp」と出現位置「7」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「comp」と出現位置「6」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「_comp」と出現位置「5」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「a_comp」と出現位置「4」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ta_comp」と出現位置「3」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(11)では、直前N文字が「mpr」となるので、過去に文字列「mpr」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「e」を、そのまま符号化して”e”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「mpr」と出現位置「8」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「ompr」と出現位置「7」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「compr」と出現位置「6」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「_compr」と出現位置「5」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「a_compr」と出現位置「4」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(12)では、直前N文字が「pre」となるので、過去に文字列「pre」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「s」を、そのまま符号化して”s”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「pre」と出現位置「9」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「mpre」と出現位置「8」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「ompre」と出現位置「7」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「compre」と出現位置「6」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「_compre」と出現位置「5」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(13)では、直前N文字が「res」となるので、過去に文字列「res」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「s」を、そのまま符号化して”s”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「res」と出現位置「10」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「pres」と出現位置「9」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「mpres」と出現位置「8」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ompres」と出現位置「7」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「compres」と出現位置「6」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(14)では、直前N文字が「ess」となるので、過去に文字列「ess」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「i」を、そのまま符号化して”i”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「ess」と出現位置「11」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「ress」と出現位置「10」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「press」と出現位置「9」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「mpress」と出現位置「8」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ompress」と出現位置「7」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(15)では、直前N文字が「ssi」となるので、過去に文字列「ssi」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「o」を、そのまま符号化して”o”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「ssi」と出現位置「12」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「essi」と出現位置「11」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「ressi」と出現位置「10」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「pressi」と出現位置「9」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「mpressi」と出現位置「8」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(16)では、直前N文字が「sio」となるので、過去に文字列「sio」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「n」を、そのまま符号化して”n”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「sio」と出現位置「13」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「ssio」と出現位置「12」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「essio」と出現位置「11」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ressio」と出現位置「10」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「pressio」と出現位置「9」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(17)では、直前N文字が「ion」となるので、過去に文字列「ion」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「_」を、そのまま符号化して”_”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「ion」と出現位置「14」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「sion」と出現位置「13」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「ssion」と出現位置「12」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ession」と出現位置「11」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ression」と出現位置「10」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(18)では、直前N文字が「on_」となるので、過去に文字列「on_」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「c」を、そのまま符号化して”c”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「on_」と出現位置「15」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「ion_」と出現位置「14」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「sion_」と出現位置「13」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ssion_」と出現位置「12」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ession_」と出現位置「11」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(19)では、直前N文字が「n_c」となるので、過去に文字列「n_c」が出現していたかを図5のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「o」を、そのまま符号化して”o”を生成する。さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「n_c」と出現位置「16」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「on_c」と出現位置「15」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「ion_c」と出現位置「14」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「sion_c」と出現位置「13」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ssion_c」と出現位置「12」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(20)では、直前N文字が「_co」となるので、過去に文字列「_co」が出現していたかを図5のi=0についてのデータを用いて確認する。そうすると、出現位置5において検出される。そうすると、i=0として、出現位置5における「_co」の後ろの文字列と現在位置以降の文字列とで一致する文字列の長さを特定する。この場合「m」だけが一致するので一致長l=1と特定される。次に、i=1として、現在位置の文字「m」を直前N文字に連結した「_com」が過去に出現していたかを図5のi=1についてのデータを用いて確認する。そうすると、出現位置5において検出される。そうすると、i=1として、直前N文字+現在位置の文字である「_com」より後ろの文字列と出現位置5における「_com」より後ろの文字列とで一致する文字列の長さを特定する。この場合一致する文字列がないのでl=0と特定される。さらに、i=2として、現在位置の文字「m」及びその後ろの文字「_」を直前N文字に連結した「_com_」が過去に出現していたかを図5のi=2についてのデータを用いて確認する。そうすると、出現位置が検出されない。従って、一致長l=0と特定される。同様に、i=3及びi=4についても、出現位置が検出されないので、l=0と特定される。
そうすると、i=0の場合に、一致長l=1となって、最大一致長max_l=1で、その時の語頭文字列長m=0と特定される。従って、語頭文字列長m=「0」と最大一致長max_l=「1」とを符号化して”0,1”を生成する。なお、語頭文字列長mにNを加算したN+mを符号化する場合もある。
さらに、図5に示すように、語頭文字列の文字列長i=0について、文字列「_co」と出現位置「17」とを対応付けておく。なお、文字列「_co」の最近出現位置は「5」から「17」に更新される。図5は時系列での登録状況を示しているので、図5では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長i=1について、文字列「n_co」と出現位置「16」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「on_co」と出現位置「15」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ion_co」と出現位置「14」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「sion_co」と出現位置「13」とを対応付けておく。そして、現在位置を1つ先に進める。
図6に示すように、ステップ(21)では、直前N文字が「com」となるので、過去に文字列「com」が出現していたかを図5のi=0についてのデータを用いて確認する。そうすると、出現位置6において検出される。そうすると、i=0として、出現位置6における「com」の後ろの文字列と現在位置以降の文字列とで一致する文字列の長さを特定する。この場合、どの文字も一致しないので、一致長l=0と特定される。次に、i=1として、現在位置の文字「_」を直前N文字に連結した「com_」が過去に出現していたかを図5のi=1についてのデータを用いて確認する。そうすると、過去の出現位置が検出されないので、l=0と特定される。i=2として、現在位置の文字「_」及び次の文字「d」を直前N文字に連結した「com_d」が過去の出現していたかを図5のi=2についてのデータを用いて確認する。そうすると、過去の出現位置が検出されないので、l=0と特定される。同様に、i=3及びi=4についても、出現位置が検出されないので、l=0と特定される。
このようにi=0からi=4までl=0である場合には、語頭文字列長m=「0」で最大一致長max_l=「0」として特定し、これらを符号化して”0,0”を生成する。max_l=0の場合には、現在位置の文字「_」を符号化して”_”を生成する。
さらに、図7に示すように、語頭文字列の文字列長i=0について、文字列「com」と出現位置「18」とを対応付けておく。なお、文字列「com」の最近出現位置は「6」から「18」に更新される。図5及び図7は時系列での登録状況を示しているので、図7では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長i=1について、文字列「_com」と出現位置「17」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「n_com」と出現位置「16」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「on_com」と出現位置「15」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ion_com」と出現位置「14」とを対応付けておく。そして、現在位置を1つ先に進める。
図8に示すように、ステップ(22)では、直前N文字が「om_」となるので、過去に文字列「om_」が出現していたかを図5及び図7のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「d」を、そのまま符号化して”d”を生成する。さらに、図9に示すように、語頭文字列の文字列長i=0について、文字列「om_」と出現位置「19」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「com_」と出現位置「18」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「_com_」と出現位置「17」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「n_com_」と出現位置「16」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「on_com_」と出現位置「15」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(23)では、直前N文字が「m_d」となるので、過去に文字列「m_d」が出現していたかを図5、図7及び図9のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「e」を、そのまま符号化して”e”を生成する。さらに、図9に示すように、語頭文字列の文字列長i=0について、文字列「m_d」と出現位置「20」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「om_d」と出現位置「19」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「com_d」と出現位置「18」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「_com_d」と出現位置「17」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「n_com_d」と出現位置「16」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(24)では、直前N文字が「_de」となるので、過去に文字列「_de」が出現していたかを図5、図7及び図9のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「c」を、そのまま符号化して”c”を生成する。さらに、図9に示すように、語頭文字列の文字列長i=0について、文字列「_de」と出現位置「21」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「m_de」と出現位置「20」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「om_de」と出現位置「19」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「com_de」と出現位置「18」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「_com_de」と出現位置「17」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(25)では、直前N文字が「dec」となるので、過去に文字列「dec」が出現していたかを図5、図7及び図9のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「o」を、そのまま符号化して”o”を生成する。さらに、図9に示すように、語頭文字列の文字列長i=0について、文字列「dec」と出現位置「22」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「_dec」と出現位置「21」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「m_dec」と出現位置「20」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「om_dec」と出現位置「19」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「com_dec」と出現位置「18」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(26)では、直前N文字が「eco」となるので、過去に文字列「eco」が出現していたかを図5、図7及び図9のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「m」を、そのまま符号化して”m”を生成する。さらに、図9に示すように、語頭文字列の文字列長i=0について、文字列「eco」と出現位置「23」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「deco」と出現位置「22」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「_deco」と出現位置「21」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「m_deco」と出現位置「20」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「om_deco」と出現位置「19」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(27)では、直前N文字が「com」となるので、過去に文字列「com」が出現していたかを図5、図7及び図9のi=0についてのデータを用いて確認する。そうすると、出現位置18において検出される。そうすると、i=0として、出現位置18における「com」の後ろの文字列と現在位置以降の文字列とで一致する文字列の長さを特定する。この場合、出現位置18の次の文字は「_」であるから、現在位置の文字「p」と異なる。従って一致長l=0と特定される。
次に、i=1として、現在位置の文字「p」を直前N文字に連結した「comp」が過去に出現していたかを図5、図7及び図9のi=1についてのデータを用いて確認する。そうすると、出現位置6において検出される。そうすると、i=1として、直前N文字+現在位置の文字である「comp」より後ろの文字列と出現位置6における「comp」より後ろの文字列とで一致する文字列の長さを特定する。この場合、文字列「ression_」が一致するので、l=8と特定される。さらに、i=2として、現在位置の文字「p」及びその後ろの文字「r」を直前N文字に連結した「compr」が過去に出現していたかを図5、図7及び図9のi=2についてのデータを用いて確認する。そうすると、出現位置6において検出される。そうすると、i=2として、直前N文字+現在位置の文字「p」+次の文字「r」の文字列「compr」より後ろの文字列と、出現位置6における「compr」より後ろの文字列とで一致する文字列の長さを特定する。この場合、文字列「ession_」が一致するので、l=7と特定される。さらに、i=3として、現在位置の文字「p」及びその後ろの文字列「re」を直前N文字に連結した「compre」が過去に出現していたかを図5、図7及び図9のi=3についてのデータを用いて確認する。そうすると、出現位置6において検出される。そうすると、i=3として、直前N文字+現在位置の文字「p」+次の文字列「re」の文字列「compre」より後ろの文字列と、出現位置6における「compre」より後ろの文字列とで一致する文字列の長さを特定する。この場合、文字列「ssion_」が一致するので、l=6と特定される。さらに、i=4として、現在位置の文字「p」及びその後ろの文字列「res」を直前N文字に連結した「compres」が過去に出現していたかを図5、図7及び図9のi=4についてのデータを用いて確認する。そうすると、出現位置6において検出される。そうすると、i=4として、直前N文字+現在位置の文字「p」+次の文字列「res」の文字列「compres」より後ろの文字列と、出現位置6における「compres」より後ろの文字列とで一致する文字列の長さを特定する。この場合、文字列「sion_」が一致するので、l=5と特定される。
図8の下段のテーブルから、一致長lが最も長い最大一致長max_l=8と特定され、その時の語頭文字列の文字列長m=1と特定される。そうすると、これらを符号化して”1,8”を生成する。さらに、現在位置からm文字の語頭文字「p」を符号化して”p”を生成する。
さらに、図9に示すように、語頭文字列の文字列長i=0について、文字列「com」と出現位置「24」とを対応付けておく。なお、文字列「com」の最近出現位置は「18」から「24」に更新される。図5、図7及び図9は時系列での登録状況を示しているので、図9では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長i=1について、文字列「ecom」と出現位置「23」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「decom」と出現位置「22」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「_decom」と出現位置「21」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「m_decom」と出現位置「20」とを対応付けておく。
なお、現在位置は、符号化済みの文字の次の文字に進む。この例では、”_”の次の文字である文字「d」に進む。i=0からi=4までの文字列と出現位置との対応付けについては、現在位置の移動とは別に1つずつ文字の位置をずらして行っても良いし、本例のように、現在位置の移動に伴いスキップするようにしても良い。
次に、図10に示すように、ステップ(28)では、直前N文字が「on_」となるので、過去に文字列「on_」が出現していたかを図5、図7及び図9のi=0についてのデータを用いて確認する。そうすると、出現位置15において検出される。そうすると、i=0として、出現位置15における「on_」の後ろの文字列と現在位置以降の文字列とで一致する文字列の長さを特定する。この場合、どの文字も一致しないので、一致長l=0と特定される。次に、i=1として、現在位置の文字「d」を直前N文字に連結した「on_d」が過去に出現していたかを図5、図7及び図9のi=1についてのデータを用いて確認する。そうすると、過去の出現位置が検出されないので、l=0と特定される。i=2として、現在位置の文字「d」及び次の文字「a」を直前N文字に連結した「on_da」が過去の出現していたかを図5、図7及び図9のi=2についてのデータを用いて確認する。そうすると、過去の出現位置が検出されないので、l=0と特定される。同様に、i=3及びi=4についても、出現位置が検出されないので、l=0と特定される。
このようにi=0からi=4までl=0である場合には、語頭文字列長m=「0」で最大一致長max_l=「0」として特定し、これらを符号化して”0,0”を生成する。max_l=0の場合には、現在位置の文字「d」を符号化して”d”を生成する。
さらに、図11に示すように、語頭文字列の文字列長i=0について、文字列「on__」と出現位置「25」とを対応付けておく。なお、文字列「on_」の最近出現位置は「15」から「25」に更新される。図5、図7、図9及び図11は時系列での登録状況を示しているので、図11では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長i=1について、文字列「ion_」と出現位置「24」とを対応付けておく。なお、文字列「ion_」の最近出現位置は「14」から「24」に更新される。また、語頭文字列の文字列長i=2について、文字列「sion_」と出現位置「23」とを対応付けておく。なお、文字列「sion_」の最近出現位置は「13」から「23」に更新される。さらに、語頭文字列の文字列長i=3について、文字列「ssion_」と出現位置「22」とを対応付けておく。なお、文字列「ssion_」の最近出現位置は「12」から「22」に更新される。さらに、語頭文字列の文字列長i=4について、文字列「ession_」と出現位置「21」とを対応付けておく。なお、文字列「ession_」の最近出現位置は「11」から「21」に更新される。そして、現在位置を1つ先に進める。
図10に示すように、ステップ(29)では、直前N文字が「n_d」となるので、過去に文字列「n_d」が出現していたかを図5、図7、図9及び図11のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「a」を、そのまま符号化して”a”を生成する。さらに、図11に示すように、語頭文字列の文字列長i=0について、文字列「n_d」と出現位置「26」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「on_d」と出現位置「25」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「ion_d」と出現位置「24」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「sion_d」と出現位置「23」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ssion_d」と出現位置「22」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(30)では、直前N文字が「_da」となるので、過去に文字列「_da」が出現していたかを図5、図7、図9及び図11のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「t」を、そのまま符号化して”t”を生成する。さらに、図11に示すように、語頭文字列の文字列長i=0について、文字列「_da」と出現位置「27」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「n_da」と出現位置「26」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「on_da」と出現位置「25」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ion_da」と出現位置「24」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「sion_da」と出現位置「23」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(31)では、直前N文字が「dat」となるので、過去に文字列「dat」が出現していたかを図5、図7、図9及び図11のi=0についてのデータを用いて確認する。そうすると、出現位置1において検出される。そして、i=0として、出現位置1における「dat」の後ろの文字列と現在位置以降の文字列とで一致する文字列の長さを特定する。この場合、文字列「a_com」が一致するので、一致長l=5と特定される。次に、i=1として、現在位置の文字「a」を直前N文字に連結した「data」が過去に出現していたかを図5、図7、図9及び図11のi=1についてのデータを用いて確認する。そうすると、出現位置1が検出される。この場合、文字列「_com」が一致するので、一致長l=4と特定される。i=2として、現在位置の文字「a」及び次の文字列「_」を直前N文字に連結した「data_」が過去に出現していたかを図5、図7、図9及び図11のi=2についてのデータを用いて確認する。そうすると、出現位置1が検出される。この場合、文字列「com」が一致するので、一致長l=3と特定される。i=3として、現在位置の文字「a」と後ろの文字列「_c」を直前N文字に連結した「data_c」が過去に出現していたかを図5、図7、図9及び図11のi=3についてのデータを用いて確認する。そうすると、出現位置1が検出される。この場合、文字列「om」が一致するので、一致長l=2が特定される。i=4として、現在位置の文字「a」と後ろの文字列「_co」を直前N文字に連結した「data_co」が過去に出現していたかを図5、図7、図9及び図11のi=3についてのデータを用いて確認する。そうすると、出現位置1が検出される。この場合、文字列「m」が一致するので、一致長l=1が特定される。
図10の最も下のテーブルから、一致長lが最も長い最大一致長max_l=5と特定され、その時の語頭文字列の文字列長m=0と特定される。そうすると、これらを符号化して”0,5”を生成する。さらに、現在位置からm文字を語頭文字列として符号化するが、m=0であるから、符号化は行われない。
さらに、図11に示すように、語頭文字列の文字列長i=0について、文字列「dat」と出現位置「28」とを対応付けておく。なお、文字列「dat」の最近出現位置は「1」から「28」に更新される。図5、図7、図9及び図11は時系列での登録状況を示しているので、図11では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長i=1について、文字列「_dat」と出現位置「27」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「n_dat」と出現位置「26」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「on_dat」と出現位置「25」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ion_dat」と出現位置「24」とを対応付けておく。
以上のような処理を行えば、図12のような符号列が生成されるようになる。このように、decompressionのうちのcompressionについては、直前のcomではなく、さらに前のcompressionに基づいて符号化されるようになっているので、SLC符号よりも効率的な符号化がなされている。
次に、上で述べたような処理を行うための情報処理装置100の構成を図13に示す。情報処理装置100は、元データ格納部11と、入力部12と、入力バッファ13と、位置探索部14と、符号化制御部15と、第1符号化部16と、第2符号化部17と、出力バッファ18と、出力部19と、圧縮データ格納部20とを有する。入力部12と、入力バッファ13と、位置探索部14と、符号化制御部15と、第1符号化部16と、第2符号化部17と、出力バッファ18と、出力部19とは、圧縮処理プログラムを実行することによって実現される。
元データ格納部11は、複数の文字を含む圧縮対象データを格納する。入力部12は、元データ格納部11に格納されている圧縮対象データを読み出し、入力バッファ13に格納する。符号化制御部15は、位置探索部14と連携して、入力バッファ13に格納されているデータに基づき、第1符号化部16及び第2符号化部17に出力すべきデータを決定して出力する。
位置探索部14は、位置保持部141と、位置取得部142と、一致長取得部143とを有する。位置保持部141は、元データに出現する各N文字の最近出現位置を保持するデータ構造と、元データに出現する各N+1文字の最近出現位置を保持するデータ構造と、元データに出現する各N+2文字の最近出現位置を保持するデータ構造と、...元データに出現する各N+M文字の最近出現位置を保持するデータ構造とを有している。Mは、予め定めておく。なお、上で述べた例ではM=4となっている。但し、M=4に限定されるものではない。データ構造は、例えばハッシュテーブルが考えられる。例えば、N文字のハッシュ値を算出して、当該ハッシュ値をアドレスとして用いて当該アドレスに最近出現位置を表すデータを格納しておく。検索する場合にも、検索対象の文字列のハッシュ値を算出して、当該ハッシュ値をアドレスとして用いて当該アドレスにアクセスし、最近出現位置を表すデータを読み出す。但し、最近出現位置が未登録である場合には、過去に出現していないことが分かる。上で述べた図5、図7、図9及び図11で模式的に述べたデータと類似のデータが、位置保持部141に保持される。
位置取得部142は、特定の文字列の最近出現位置を位置保持部142から取得する。過去に出現していない場合には、最近出現位置を位置保持部142から取得できないということになる。具体的には、直前N文字と語頭文字列(文字列長i(iは0以上M以下))とを連結した文字列の最近出現位置を抽出する。
また、一致長取得部143は、語頭文字列の文字列長iに応じて、例えば入力バッファ13から、直前N文字の後ろに出現する符号化前のi文字とを連結した文字列の後ろに出現する文字列と、取得された最近出現位置において過去に出現したと判断されたN+i文字より後ろに出現する文字列との一致長を特定する。
符号化制御部15は、例えば語頭文字列の文字列長iの各々について、位置探索部14から、最近出現位置及び一致長を取得して、最適な語頭文字列及びその文字列長(すなわち語頭文字列長)を決定する。
符号化制御部15は、直前N文字が過去に出現していない場合等には、符号化すべき文字のデータを第2符号化部17に出力する。第2符号化部17は、文字のデータを、所定のルールに従って符号化して、出力バッファ18に出力する。具体的には末尾位置に符号を格納する。また、符号化制御部15は、直前N文字が過去に出現している場合には、語頭文字列及び語頭文字列長と一致長とを、第1符号化部16に出力する。第1符号化部16は、語頭文字列長mを符号化するm符号化部161と、一致長lを符号化するl符号化部162とを有する。m符号化部161は、語頭文字列長mを所定のルールで符号化して、出力バッファ18に出力する。l符号化部162は、一致長lを所定のルールで符号化して、出力バッファ18に出力する。なお、第1符号化部16は、語頭文字列を受け取ると、第2符号化部17に出力して、符号化を行わせる。出力部19は、入力バッファ13に格納された元データの符号化が完了すると、出力バッファ18から符号化後のデータを読み出して、圧縮データ格納部20に格納する。
次に、本情報処理装置100の処理内容を図14及び図15を用いて説明する。ここでは、入力部12が、元データ格納部11から、元データを読み出して、入力バッファ13に格納したものとする。そして、位置探索部14及び符号化制御部15は、入力バッファ13における現在位置を先頭に設定した後、以下のような処理を実施する。
位置探索部14は、現在位置の直前N文字を特定する(図14:ステップS1)。そして、位置探索部14の位置取得部142は、位置保持部141に対して直前N文字の最近出現位置を要求し、位置保持部141から出力を得ると、当該出力を符号化制御部15に出力する。
符号化制御部15は、位置探索部14からの出力を受け取ると、最近出現位置が取得できたか判断する(ステップS3)。最近出現位置が取得できた場合には、処理は端子Aを介して図15の処理に移行する。一方、最近出現位置が取得できない場合には、符号化制御部15は、現在位置の文字を第2符号化部17に出力して、第2符号化部17は、当該現在位置の文字を符号化して、出力バッファ18に出力する(ステップS5)。上で述べた例では、図4におけるステップ(1)からステップ(19)までは、最近出現位置が取得できないので、ステップS5で処理されている。そして、データ終了であれば(ステップS7:Yesルート)処理を終了し、出力部19は、出力バッファ18に格納されている符号を圧縮データ格納部20に格納する。そして処理は終了する。
一方、未処理のデータが存在している場合には(ステップS7:Noルート)、位置探索部14の位置保持部141は、直前N文字及び直前N+i文字列(iは1以上M以下の整数)の最近出現位置の更新を行う(ステップS9)。図5、図7、図9及び図11に模式的に示したようなデータを蓄積する。なお、同一文字列について既に最近出現位置が登録されている場合には、最近出現位置を更新する。
また、符号化制御部15及び位置探索部14は、入力バッファ13における現在位置を移動させる(ステップS11)。そして処理はステップS1に戻る。
次に、端子Aの後ろの処理を図15を用いて説明する。符号化制御部15及び位置探索部14は、語頭文字列のカウンタiを0に初期化し、語頭文字列長mを0に初期化し、最大一致長max_lを0に初期化する(ステップS13)。そして、位置探索部14の位置取得部142は、直前N文字にこれから符号化するi文字列を加えたN+i文字の最近出現位置Pを位置保持部141から特定し、一致長取得部143は、これから符号化するi文字より後ろの文字列と位置PにおけるN+i文字より後方の文字列とが一致する文字列長である一致長lを例えば入力バッファ13から特定する(ステップS15)。位置探索部14は、i毎に、最近出現位置と一致長lとを符号化制御部15に出力する。
なお、i=0の場合には、既に最近出現位置Pは得られているので、この場合にはこの最近出現位置Pに基づき一致長lを特定する。
そして、符号化制御部15は、今回特定された一致長lが最大一致長max_lより長いか判断する(ステップS17)。今回特定された一致長lが最大一致長max_lより長い場合には、符号化制御部15は、max_lに今回特定された一致長lを設定し、さらに語頭文字列長mにiを設定する(ステップS19)。一方、今回特定された一致長lが最大一致長max_l以下であれば、処理はステップS21に移行する。
そして、iが所定の定数M未満であれば(ステップS21:Noルート)、位置探索部14及び符号化制御部15は、iを1インクリメントして(ステップS23)、処理はステップS15に戻る。一方、iが定数M以上であれば(ステップS21:Yesルート)、符号化制御部15は、語頭文字列長m及び語頭文字列と最大一致長max_lとを第1符号化部16に出力する。
そして、第1符号化部16のm符号化部161は、語頭文字列長mを所定のルールで符号化して、出力バッファ18に出力する。さらに、第1符号化部16のl符号化部162は、最大一致長max_lを所定のルールで符号化して、出力バッファ18に出力する(ステップS25)。
ここで、最大一致長max_lが0である場合には(ステップS27:Yesルート)処理は端子Bを介して図14のステップS5に戻る。すなわち、現在位置の1文字を符号化制御部15が、第2符号化部17に出力して符号化を行わせる。
一方、最大一致長max_lが1以上である場合には、第1符号化部16は、語頭文字列長mの語頭文字列を第2符号化部17に出力して、第2符号化部17は、受け取った語頭文字列を所定のルールに従って符号化して、出力バッファ18に出力する。そして処理は端子Cを介して図14のステップS7に戻る。
図15の処理フローは、上で述べた例では、ステップ(20)において実行される。すなわち、図4の最下段のテーブルに示したようなデータを生成し、m=0及びmax_l=1が符号化される。m=0であるから、第1符号化部16から第2符号化部17に出力される文字はない。
また、ステップ(21)でも、図15の処理フローは実行されるが、図6の最下段のテーブルに示したようなデータを生成し、m=0及びmax_l=0が符号化される。但し、max_l=0であるからステップS27で端子Bを介して図14のステップS5に戻るため、現在位置の文字「_」が符号化される。
さらに、ステップ(22)乃至ステップ(26)については、図14の処理フローが実行される。そして、ステップ(27)でも、図15の処理フローが実行される。この場合、図8の最下段のテーブルに示したようなデータを生成し、m=1及びmax_l=8が符号化される。さらに、語頭文字列「p」がステップS29で符号化される。
また、ステップ(28)でも、図15の処理フローが実行される。但し、図10の中段のテーブルに示されるようなデータを生成し、m=0及びmax_l=0が符号化される。max_l=0であるため、ステップS27で端子Bを介して図14のステップS5に戻るため、現在位置の文字「d」が符号化される。
さらに、ステップ(29)及び(30)については、図14の処理フローが実行される。そして、ステップ(31)でも、図15の処理フローが実行される。この場合、図10の最下段のテーブルに示されるようなデータを生成し、m=0及びmax_l=5が符号化される。なお、m=0であるから語頭文字列は符号化されない。
以上のような処理を実施することによって、上で述べたように、短い文字列と長い文字列の繰り返しがある場合でもより効率的に圧縮することができるようになる。なお、m及びmax_lの順番については、逆であっても良い。また、語頭文字列については、mより後に符号化されていればよい。max_lは語頭文字の後ろで符号化されても良い。
次に、復元処理について図16乃至図23を用いて説明する。図12に示した符号列から、図3に示した文字列を復元する場合を一例として述べる。なお、既に符号化を行った直前N文字のNは3であるものとする。ステップ(101)では、既に符号化を行った直前N文字は存在しないので、現在位置の符号”d”については、そのまま復元して文字「d」が生成される。そして、現在位置を1つ先に進める。
ステップ(102)では、直前N文字はまだ揃っていないので、現在位置の符号”a”については、そのまま復元して文字「a」が生成される。そして、現在位置を1つ先に進める。ステップ(103)では、直前N文字はまだ揃っていないので、現在位置の符号”t”については、そのまま復元して文字「t」が生成される。そして、現在位置を1つ先に進める。
ステップ(104)では、直前N文字が「dat」となるので、過去に文字列「dat」が出現していたか確認する。この場合出現していないので、現在位置の符号”a”を、そのまま復元して文字「a」を生成する。さらに、図17に示すように、直前N文字に連結する文字列である語頭文字列の文字列長i=0について、文字列「dat」と出現位置「1」(ここでは先頭の文字「d」の出現位置を示しているが、最後の文字「t」の出現位置であっても良い)とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(105)では、直前N文字が「ata」となるので、過去に文字列「ata」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号「_」を、そのまま復元して文字「_」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「ata」と出現位置「2」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「data」と出現位置「1」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(106)では、直前N文字が「ta_」となるので、過去に文字列「ta_」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”c”を、そのまま復元して文字「c」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「ta_」と出現位置「3」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「ata_」と出現位置「2」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「data_」と出現位置「1」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(107)では、直前N文字が「a_c」となるので、過去に文字列「a_c」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”o”を、そのまま復元して文字「o」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「a_c」と出現位置「4」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「ta_c」と出現位置「3」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「ata_c」と出現位置「2」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「data_c」と出現位置「1」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(108)では、直前N文字が「_co」となるので、過去に文字列「_co」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”m”を、そのまま復元して文字「m」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「_co」と出現位置「5」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「a_co」と出現位置「4」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「ta_co」と出現位置「3」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ata_co」と出現位置「2」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「data_co」と出現位置「1」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(109)では、直前N文字が「com」となるので、過去に文字列「com」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”p”を、そのまま復元して文字「p」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「com」と出現位置「6」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「_com」と出現位置「5」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「a_com」と出現位置「4」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ta_com」と出現位置「3」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ata_com」と出現位置「2」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(110)では、直前N文字が「omp」となるので、過去に文字列「omp」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”r”を、そのまま復元して文字「r」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「omp」と出現位置「7」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「comp」と出現位置「6」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「_comp」と出現位置「5」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「a_comp」と出現位置「4」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ta_comp」と出現位置「3」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(111)では、直前N文字が「mpr」となるので、過去に文字列「mpr」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”e”を、そのまま復元して文字「e」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「mpr」と出現位置「8」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「ompr」と出現位置「7」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「compr」と出現位置「6」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「_compr」と出現位置「5」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「a_compr」と出現位置「4」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(112)では、直前N文字が「pre」となるので、過去に文字列「pre」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”s”を、そのまま復元して文字「s」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「pre」と出現位置「9」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「mpre」と出現位置「8」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「ompre」と出現位置「7」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「compre」と出現位置「6」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「_compre」と出現位置「5」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(113)では、直前N文字が「res」となるので、過去に文字列「res」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”s”を、そのまま復元して文字「s」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「res」と出現位置「10」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「pres」と出現位置「9」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「mpres」と出現位置「8」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ompres」と出現位置「7」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「compres」と出現位置「6」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(114)では、直前N文字が「ess」となるので、過去に文字列「ess」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”i”を、そのまま復元して文字「i」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「ess」と出現位置「11」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「ress」と出現位置「10」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「press」と出現位置「9」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「mpress」と出現位置「8」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ompress」と出現位置「7」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(115)では、直前N文字が「ssi」となるので、過去に文字列「ssi」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”o”を、そのまま復元して文字「o」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「ssi」と出現位置「12」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「essi」と出現位置「11」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「ressi」と出現位置「10」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「pressi」と出現位置「9」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「mpressi」と出現位置「8」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(116)では、直前N文字が「sio」となるので、過去に文字列「sio」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”n”を、そのまま復元して文字「n」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「sio」と出現位置「13」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「ssio」と出現位置「12」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「essio」と出現位置「11」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ressio」と出現位置「10」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「pressio」と出現位置「9」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(117)では、直前N文字が「ion」となるので、過去に文字列「ion」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”_”を、そのまま復元して文字「_」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「ion」と出現位置「14」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「sion」と出現位置「13」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「ssion」と出現位置「12」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ession」と出現位置「11」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ression」と出現位置「10」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(118)では、直前N文字が「on_」となるので、過去に文字列「on_」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”c”を、そのまま復元して文字「c」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「on_」と出現位置「15」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「ion_」と出現位置「14」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「sion_」と出現位置「13」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ssion_」と出現位置「12」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ession_」と出現位置「11」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(119)では、直前N文字が「n_c」となるので、過去に文字列「n_c」が出現していたかを図17のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”o”を、そのまま復元して文字「o」を生成する。さらに、図17に示すように、語頭文字列の文字列長i=0について、文字列「n_c」と出現位置「16」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「on_c」と出現位置「15」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「ion_c」と出現位置「14」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「sion_c」と出現位置「13」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ssion_c」と出現位置「12」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(120)では、直前N文字が「_co」となるので、過去に文字列「_co」が出現していたかを図17のi=0についてのデータを用いて確認する。そうすると、出現位置5において検出される。そうすると、現在位置の符号に含まれる語頭文字列長mと一致長lとに相当する符号を復元する。図16の最下段のテーブルに示すように、m=0及びl=1が得られる。m=0であるから、検出された出現位置5がそのまま有効となり、出現位置5における「_co」の後ろの文字列「m」を1文字文コピーすることで復元する。
なお、図17に示すように、語頭文字列の文字列長i=0について、文字列「_co」と出現位置「17」とを対応付けておく。なお、文字列「_co」の最近出現位置は「5」から「17」に更新される。図17は時系列での登録状況を示しているので、図17では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長i=1について、文字列「n_co」と出現位置「16」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「on_co」と出現位置「15」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ion_co」と出現位置「14」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「sion_co」と出現位置「13」とを対応付けておく。そして、現在位置を1つ先に進める。
図18に示すように、ステップ(121)では、直前N文字が「com」となるので、過去に文字列「com」が出現していたかを図17のi=0についてのデータを用いて確認する。そうすると、出現位置6において検出される。そして、現在位置の符号に含まれる語頭文字列長mと一致長lとに相当する符号を復元する。図18の下段のテーブルに示すように、m=0及びl=0が得られる。l=0の場合には、コピー文字列は無いということになるので、次の符号”_”を復元して、文字「_」を生成する。
さらに、図19に示すように、語頭文字列の文字列長i=0について、文字列「com」と出現位置「18」とを対応付けておく。なお、文字列「com」の最近出現位置は「6」から「18」に更新される。図17及び図19は時系列での登録状況を示しているので、図19では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長i=1について、文字列「_com」と出現位置「17」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「n_com」と出現位置「16」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「on_com」と出現位置「15」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ion_com」と出現位置「14」とを対応付けておく。そして、現在位置を1つ先に進める。
図20に示すように、ステップ(122)では、直前N文字が「om_」となるので、過去に文字列「om_」が出現していたかを図17及び図19のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”d”を、そのまま復元して文字「d」を生成する。さらに、図21に示すように、語頭文字列の文字列長i=0について、文字列「om_」と出現位置「19」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「com_」と出現位置「18」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「_com_」と出現位置「17」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「n_com_」と出現位置「16」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「on_com_」と出現位置「15」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(123)では、直前N文字が「m_d」となるので、過去に文字列「m_d」が出現していたかを図17、図19及び図21のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”e”を、そのまま復元して文字「e」を生成する。さらに、図21に示すように、語頭文字列の文字列長i=0について、文字列「m_d」と出現位置「20」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「om_d」と出現位置「19」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「com_d」と出現位置「18」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「_com_d」と出現位置「17」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「n_com_d」と出現位置「16」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(124)では、直前N文字が「_de」となるので、過去に文字列「_de」が出現していたかを図17、図19及び図21のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”c”を、そのまま復元して文字「c」を生成する。さらに、図21に示すように、語頭文字列の文字列長i=0について、文字列「_de」と出現位置「21」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「m_de」と出現位置「20」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「om_de」と出現位置「19」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「com_de」と出現位置「18」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「_com_de」と出現位置「17」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(125)では、直前N文字が「dec」となるので、過去に文字列「dec」が出現していたかを図17、図19及び図21のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”o”を、そのまま復元して文字「o」を生成する。さらに、図21に示すように、語頭文字列の文字列長i=0について、文字列「dec」と出現位置「22」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「_dec」と出現位置「21」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「m_dec」と出現位置「20」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「om_dec」と出現位置「19」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「com_dec」と出現位置「18」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(126)では、直前N文字が「eco」となるので、過去に文字列「eco」が出現していたかを図17、図19及び図21のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”m”を、そのまま復元して文字「m」を生成する。さらに、図21に示すように、語頭文字列の文字列長i=0について、文字列「eco」と出現位置「23」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「deco」と出現位置「22」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「_deco」と出現位置「21」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「m_deco」と出現位置「20」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「om_deco」と出現位置「19」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(127)では、直前N文字が「com」となるので、過去に文字列「com」が出現していたかを図17、図19及び図21のi=0についてのデータを用いて確認する。そうすると、出現位置18において検出される。そうすると、現在位置の符号に含まれる語頭文字列長mと一致長lとに相当する符号を復元する。図20の下段のテーブルに示すように、m=1及びl=8が得られる。l=0ではないので、m=1で次の符号”p”を復元して語頭文字「p」を生成する。そして、直前N文字「com」に語頭文字「p」を連結した文字列「comp」の最近出現位置を、図17、図19及び図21のi=1についてのデータを用いて検出する。そうすると、最近出現位置は「6」と特定されるので、最近出現位置の「comp」の後ろの一致文字列8文字文「ression_」をコピーすることで復元する。語頭文字列「p」と共に「pression_」が復元される。
さらに、図21に示すように、語頭文字列の文字列長i=0について、文字列「com」と出現位置「24」とを対応付けておく。なお、文字列「com」の最近出現位置は「18」から「24」に更新される。図17、図19及び図21は時系列での登録状況を示しているので、図21では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長i=1について、文字列「ecom」と出現位置「23」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「decom」と出現位置「22」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「_decom」と出現位置「21」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「m_decom」と出現位置「20」とを対応付けておく。そして、現在位置を1つ先に進める。
次に、図22に示すように、ステップ(128)では、直前N文字が「on_」となるので、過去に文字列「on_」が出現していたかを図17、図19及び図21のi=0についてのデータを用いて確認する。そうすると、出現位置15において検出される。そうすると、現在位置の符号に含まれる語頭文字列長mと一致長lとに相当する符号を復元する。図22の中段のテーブルに示すように、m=0及びl=0が得られる。l=0であるので、次の符号”d”を復元して文字「d」を生成する。
さらに、図23に示すように、語頭文字列の文字列長i=0について、文字列「on__」と出現位置「25」とを対応付けておく。なお、文字列「on_」の最近出現位置は「15」から「25」に更新される。図17、図19、図21及び図23は時系列での登録状況を示しているので、図23では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長i=1について、文字列「ion_」と出現位置「24」とを対応付けておく。なお、文字列「ion_」の最近出現位置は「14」から「24」に更新される。また、語頭文字列の文字列長i=2について、文字列「sion_」と出現位置「23」とを対応付けておく。なお、文字列「sion_」の最近出現位置は「13」から「23」に更新される。さらに、語頭文字列の文字列長i=3について、文字列「ssion_」と出現位置「22」とを対応付けておく。なお、文字列「ssion_」の最近出現位置は「12」から「22」に更新される。さらに、語頭文字列の文字列長i=4について、文字列「ession_」と出現位置「21」とを対応付けておく。なお、文字列「ession_」の最近出現位置は「11」から「21」に更新される。そして、現在位置を1つ先に進める。
図22に示すように、ステップ(129)では、直前N文字が「n_d」となるので、過去に文字列「n_d」が出現していたかを図17、図19、図21及び図23のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”a”を、そのまま復元して文字「a」を生成する。さらに、図23に示すように、語頭文字列の文字列長i=0について、文字列「n_d」と出現位置「26」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「on_d」と出現位置「25」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「ion_d」と出現位置「24」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「sion_d」と出現位置「23」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「ssion_d」と出現位置「22」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(130)では、直前N文字が「_da」となるので、過去に文字列「_da」が出現していたかを図17、図19、図21及び図23のi=0についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”t”を、そのまま復元して文字「t」を生成する。さらに、図23に示すように、語頭文字列の文字列長i=0について、文字列「_da」と出現位置「27」とを対応付けておく。さらに、語頭文字列の文字列長i=1について、文字列「n_da」と出現位置「26」とを対応付けておく。また、語頭文字列の文字列長i=2について、文字列「on_da」と出現位置「25」とを対応付けておく。さらに、語頭文字列の文字列長i=3について、文字列「ion_da」と出現位置「24」とを対応付けておく。さらに、語頭文字列の文字列長i=4について、文字列「sion_da」と出現位置「23」とを対応付けておく。そして、現在位置を1つ先に進める。
ステップ(131)では、直前N文字が「dat」となるので、過去に文字列「dat」が出現していたかを図17、図19、図21及び図23のi=0についてのデータを用いて確認する。そうすると、出現位置1において検出される。そうすると、現在位置の符号に含まれる語頭文字列長mと一致長lとに相当する符号を復元する。図22の最下段のテーブルに示すように、m=0及びl=5が得られる。m=0であるから、語頭文字列については存在しない。従って、最近出現位置1における文字列「dat」から一致長l=5文字分だけコピーすることで復元する。すなわち、「a_com」という文字列がコピーされる。
従って、図3に示すような文字列が復元される。
次に、このような復元処理を行う情報処理装置200の構成を図24に示す。情報処理装置200は、圧縮データ格納部21と、入力部22と、復元制御部23と、位置保持部24と、位置取得部25と、一致長復元部26と、文字復元部27と、コピー部28と、出力バッファ29と、出力部30と、元データ格納部31とを有する。入力部22と、復元制御部23と、位置保持部24と、位置取得部25と、一致長復元部26と、文字復元部27と、コピー部28と、出力バッファ29と、出力部30とは、復元処理プログラムを情報処理装置200で実行することによって実現される。
入力部22は、圧縮データ格納部21に格納されている圧縮データの符号を復元制御部23に出力する。復元制御部23は、位置保持部24からの出力に応じて位置取得部25、一致長復元部26及び文字復元部27を制御する。また、復元制御部23は、語頭文字列長mに相当する符号を復元する。位置保持部24は、出力バッファ29に格納されている復元済みの文字列からN文字及びN+i(iは1以上M以下の整数)文字の最近出現位置を管理している。一致長復元部26は、一致長lに相当する符号を復元して、コピー部28に出力する。位置取得部25は、復元制御部23から語頭文字列長m及び語頭文字列を受け取り、直前N文字+語頭文字列についての最近出現位置を、位置保持部24から取得して、コピー部28に出力する。コピー部28は、位置取得部25からの最近出現位置と一致長復元部26からの一致長lに従って、出力バッファ29から適切な位置の文字列を読み出して、出力バッファ29に追加登録する。文字復元部27は、所定のルールに従って文字に相当する符号を復元して、出力バッファ29に出力する。出力バッファ29では、入力される文字が順番に格納される。出力部30は、復元処理が完了すると、出力バッファ29から復元データを読み出して、元データ格納部31に格納する。
次に、図25を用いて情報処理装置200の処理内容を説明する。ここでは、入力部22が、圧縮データ格納部21から、圧縮データに含まれる符号を読み出して、復元制御部23に出力するものとする。そして、位置保持部24及び復元制御部23は、同期して以下のような処理を実施する。なお、復元制御部23が、現在処理しようとしている符号が現在位置の符号である。
位置保持部24は、出力バッファ29に最近入力されたN文字である直前N文字を特定し(ステップS41)、この直前N文字の最近出現位置を保持しているか判断する(ステップS43)。直前N文字の最近出現位置を保持しているか否かについての判断結果は、位置保持部24から符号制御部23に出力される。
位置保持部24が直前N文字の最近出現位置を保持していない場合には、復元制御部2は、現在位置の符号を文字復元部27に出力し、文字復元部27は、受け取った符号を所定のルールに従って復元して、復元によって生成された文字を出力バッファ29に出力する(ステップS45)。上で述べた例では、図16におけるステップ(101)からステップ(119)までは、最近出現位置が取得できないので、ステップS45で処理されている。そして、データ終了であれば(ステップS47:Yesルート)処理を終了し、出力部30は、出力バッファ29に格納されているデータを元データ格納部31に格納する。そして処理は終了する。
一方、未処理のデータが存在している場合には(ステップS47:Noルート)、位置保持部24は、直前N文字及び直前N+i文字(iは1以上M以下の整数)の最近出現位置の更新を行う(ステップS49)。図17、図19、図21及び図23に模式的に示したようなデータを蓄積する。なお、同一文字列について既に最近出現位置が登録されている場合には、最近出現位置を更新する。
また、位置保持部24及び復元制御部23は、現在位置を移動させる(ステップS51)。そして処理はステップS41に戻る。
一方、位置保持部24が直前N文字の最近出現位置を保持している場合には、復元制御部23は、現在位置の符号として語頭文字列長mに相当する符号及び一致長lに相当する符号を保持しているので、語頭文字列長mに相当する符号を復元し、さらに一致長lに相当する符号を一致長復元部26に出力して復元処理を行わせる(ステップS53)。一致長復元部26は、復元制御部23から受け取った、一致長lに相当する符号を復元して、一致長lを生成し、復元制御部23及びコピー部28に出力する。
復元制御部23は、一致長復元部26から受け取った一致長lが0であるか判断する(ステップS55)。一致長l=0であれば、復元制御部23は、現在位置を1つ後ろにずらして、次の符号を文字復元部27に出力する。そして処理はステップS45に移行する。コピー部28は、l=0であればコピー処理を行わない。このように、図18に示したステップ(121)及び図22に示したステップ(128)のような場合を処理する。
一方、一致長lが0ではない場合には、復元制御部23は、語頭文字列長m分の符号を文字復元部27に出力し、m文字分の符号を復元させる。文字復元部27は、m文字分の符号を所定のルールで復元してm文字生成すると、出力バッファ29に出力する(ステップS57)。復元制御部23は、語頭文字列長mを、位置取得部25に出力し、位置取得部25は、復元制御部23から受け取った語頭文字列長mに従って、直前N文字と復元したm文字とを加えたN+m文字の最近出現位置を位置保持部24から取得し、最近出現位置及びm(又はN+m)をコピー部28に出力する。コピー部28は、出力バッファ29から最近出現位置におけるN+m文字より後方の一致長lの文字をコピーして、出力バッファ29に出力する(ステップS59)。そして処理はステップS47に移行する。
このような処理を行えば、図16に示したステップ(120)、図20に示したステップ(127)及び図22に示したステップ(131)のような処理が行われる。
なお、語頭文字列長にN+m=Xを設定して符号化した場合には、復元する際には、X−Nを算出すれば、上で述べた語頭文字列長mが得られる。また、圧縮の際にも述べたが、mとlと語頭文字の順番は異なる態様が可能であるので、復元の際には、それに応じて処理の順番を変えることになる。
[実施の形態2]
上で述べた実施の形態では、位置保持部141及び位置保持部24において、直前N文字と直前N文字+i文字(iは1以上M以下)とについて最近出現位置を保持するような構成を採用していた。しかしながら、このような最近出現位置を保持するデータ構造を多く持つとメモリを多く消費することになる。従って、iを固定の1つにしてしまうことも可能である。図3のような文字列を符号化する場合には、i=1のみあれば処理可能である。
このような場合、図15の処理については、図26に示すような処理に変更する。なお、直前N文字の最近出現位置を最近出現位置Aとする。
具体的には、位置探索部14の一致長取得部143は、これから符号化する文字列と、最近出現位置Aにおける直前N文字より後方の文字列とが一致する長さである第1の一致長l1を例えば入力バッファ13から特定する(ステップS61)。
また、位置取得部142は、位置保持部141から、直前N文字にこれから符号化するM文字を加えた文字列の最近出現位置Bを特定し、一致長取得部143は、これから符号化するM文字より後ろの文字列と位置BにおけるN+M文字より後方の文字列とが一致する長さである第2の一致長l2を例えば入力バッファ13から特定する(ステップS63)。上でも述べたようにMは固定である。
そして、位置探索部14は、直前N文字についての最近出現位置A及び一致長l1と、直前N文字+M文字についての最近出現位置B及び一致長l2を符号化制御部15に出力する。
そして、符号化制御部15は、一致長l1が一致長l2以上であるか判断する(ステップS65)。一致長l1が一致長l2以上である場合には、語頭長m=0である。従って、本実施の形態では、符号化制御部15は、一致長l1及び語頭長m=N(m=0でもよい)を第1符号化部16に出力する。第1符号化部16のm符号化部161は、語頭長m=Nを所定のルールで符号化し、出力バッファ18に出力する。また、第1符号化部16のl符号化部162は、一致長l1を所定のルールで符号化し、出力バッファ18に出力する(ステップS71)。
そして、符号化制御部15は、一致長l1が0であるか判断する(ステップS73)。一致長l1が0である場合には、処理は端子Bを介して図14のステップS5に移行する。一方、一致長l1=0ではない場合には、端子Cを介して図14のステップS7に戻る。
また、l1<l2であれば、符号化制御部15は、N+M(Mであってもよい)を語頭文字列長mとして第1符号化部16に出力し、一致長l2を第1符号化部16に出力する。
第1符号化部16のm符号化部161は、符号化制御部15から受け取った語頭文字列長mを所定のルールで符号化して、生成された符号を出力バッファ18に出力する。また、第1符号化部16のl符号化部162は、一致長l2を所定のルールに従って符号化して、生成された符号を出力バッファ18に出力する(ステップS67)。さらに、符号化制御部15は、これから符号化するM文字を、第2符号化部17に出力する。第2符号化部17は、符号化制御部15から受け取ったM文字を所定のルールで符号化して、出力バッファ18に出力する(ステップS69)。そして処理は端子Cを介して図14のS7の処理に戻る。
このようにすれば圧縮処理における処理負荷を下げることもできる。
[実施の形態3]
圧縮効果を高めるために、入力文字と直前の文字との依存関係(以下、文脈と称する)を取り入れた条件付き出現確率に基づいて可変長符号化を行う手法が存在している。この手法は、例えば、“Unbounded Length Contexts for PPM ”John G.Cleary他著1995 IEEE Data Compression Conference, p52−61に詳細が記載されている。
このような条件付き出現確率に基づいた可変長符号化の手法を、第2符号化部17に用いることが有効である。
例えば、1文字を文脈とした場合における第2符号化部17の構成例を図27に示す。但し、1文字ではなくより多くの文字数の文字列を文脈として用いる場合もある。
図27の例では、第2符号化部17は、固定1次文脈を用いて符号化を行うために直前文字に対応した256個の符号テーブル172乃至174を含む符号テーブル保持部171と、符号生成部175とを有する。
符号化制御部15は、符号化すべき文字のデータ(元データ)を第2符号化部17に出力するので、第2符号化部17は、元データが入力されると、入力された文字の直前文字に対応する符号テーブル172乃至174のいずれかを選択する(図28:ステップS81)。
そして、符号生成部175は、選択された符号テーブル172乃至174のいずれかに登録されている符号から、入力された文字を符号化して、出力バッファ18に出力する(図28:ステップS83)。
なお、図27の例では、符号テーブル172乃至174が1バイト256種類全ての文字に対応して設けられているが、直前文字から抜き出した特徴に対応させて符号テーブルを設けることにより、符号テーブルの数を減らしてもよい。例えば、文字データの最上位ビットを除き、文字データの残り7ビットに対応させて符号テーブルを設けるようにしてもよい。
なお、圧縮処理において上記のような条件付き出現確率に基づいて可変長符号化を行った場合には、情報処理装置200における文字復元部27についても、条件付き出現確率に基づく可変長復元処理を実施することになる。
これによって、より効率的に圧縮することができるようになる。
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、情報処理装置100及び200の機能ブロック図は一例であって、必ずしも実際のモジュール構成と一致するわけではない。また、処理フローについても、処理結果が変わらない限り処理ステップの順番を入れ替えたり、並列に実行するようにしても良い。
また、情報処理装置100と情報処理装置200とが別々に設けられるだけではなく、一体となっている場合もある。
さらに、上で述べたM及びNについては、一例であって他の値を用いる場合でも良い。例えばN=3以外であっても良い。また、Mは1、2、3又は13等が可能であるが、他の値であっても良い。
なお、上で述べた情報処理装置100及び200は、コンピュータ装置であって、図29に示すように、メモリ2501とCPU(Central Processing Unit)2503とハードディスク・ドライブ(HDD:Hard Disk Drive)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本実施の形態をまとめると、以下のようになる。
本実施の形態に係る圧縮方法は、(A)第1のデータ格納部に格納されており且つ複数の語を含む圧縮対象データにおいて直前に符号化された第1の語長の語が過去に出現していたことを検出すると、上記第1の語長の語の後ろに出現する符号化前の語と過去に出現した上記第1の語長の語の後ろに出現する符号化済みの語とが一致する第1の一致長を特定する第1の特定処理と、(B)上記第1の語長の語に当該第1の語長の語の後ろに出現する第2の語長の符号化前の語を加えることで得られる第3の語長の語が圧縮対象データにおいて過去に出現した位置を探索して、第3の語長の語の過去の出現位置が検出されると、第3の語長の語の後ろに出現する符号化前の語と過去に出現した第3の語長の語の後ろに出現する符号化済みの語とが一致する第2の一致長を特定する第2の特定処理と、(C)第1の一致長より第2の一致長が長い場合には、第2の語長又は第3の語長と第2の一致長と第2の語長の符号化前の語とを符号化して、第2のデータ格納部に格納する第1の符号化処理と、(D)第1の一致長が第2の一致長以上である場合又は第2の一致長が特定されない場合には、ゼロ又は第1の語長と第1の一致長とを符号化して、第2のデータ格納部に格納する第2の符号化処理と、(E)圧縮対象データにおいて第1の語長の語が過去に出現していない場合には、上記第1の語長の語の後ろに出現する符号化前の語を符号化して、第2のデータ格納部に格納する処理とを含む。
このように第2の語長及び第2の語長の符号化前の語を符号化することで、短い繰り返しと長い繰り返しが混在する場合においてもより効率よく圧縮できるようになる。
また、上で述べた第2の特定処理が、第2の語長を1乃至M(Mは1以上の整数)まで変化させて、複数の第2の一致長を特定する処理を含む場合もある。この場合には、第1の符号化処理及び第2の符号化処理における第2の一致長は、複数の第2の一致長のうち最も長い一致長であり、第2の語長は、当該最も長い一致長が特定された際の第2の語長である場合もある。このようにすればより効率的に符号化することができる。
また、上記圧縮方法は、第1の一致長と前記第2の一致長とがゼロである場合又は第1の一致長がゼロで且つ第2の一致長が特定されない場合には、第1の語長の語の後ろに出現する符号化前の語を符号化する処理をさらに含むようにしても良い。
さらに、上記圧縮方法において、符号化前の語を符号化する場合には、直前の1又は複数の語からなる文脈に対して次に出現する語の符号を保持する符号保持部から、符号化前の語と符号化前の語の直前の1又は複数の語とから符号化前の語の符号を特定するようにしても良い。このようにすればより効率的な符号化が可能となる。
本実施の形態に係る復元方法は、(A)第1のデータ格納部に格納されており且つ復元された複数の語において直前に復元された第1の語長の語が過去に復元されていたことを検出すると、第2のデータ格納部に格納されており且つ第1の語長の語の後ろに出現し且つ連結すべき語の語長を特定するための第2の語長に相当する第1の符号と、連結すべき語の後ろで一致する語の一致長を表す第3の語長に相当する第2の符号と、上記連結すべき語に相当する第3の符号とを復元する処理と、(B)復元された上記連結すべき語を、第1のデータ格納部に格納する処理と、(C)複数の語において、第1の語長の語と連結すべき語とを連結することで得られる第4の語長の語の後ろで復元されている第3の語長の語をコピーして、第1のデータ格納部に格納する処理と、(D)複数の語において、第1の語長の語が過去に復元されていないことを検出すると、第2のデータ格納部に格納されており且つ第1の語長の語の符号の後ろに出現する符号を復元して、第1のデータ格納部に格納する処理とを含む。
これによって、上記の圧縮方法で符号化された圧縮データを復元できるようになる。
なお、上で述べた連結すべき語の語長は、第2の語長から第1の語長を減じた数である場合もある。上でも述べたように、語頭長についてはN+mの場合もあればmだけの場合もある。
また、圧縮処理を行う情報処理装置は、(A)複数の語を含む圧縮対象データを記憶する第1の記憶部と、(B)予め定められた複数の語長の各々について、当該語長を有する語の、圧縮対象データにおける最近出現位置を保持する位置保持部と、(C)位置保持部から、直前に符号化された第1の語長の語の最近出現位置を取得し、第1の語長の語に当該第1の語長の語の後ろに出現する第2の語長の符号化前の語を加えることで得られる第3の語長の語の最近出現位置を取得する位置取得部と、(D)位置取得部により第1の語長の語の最近出現位置が取得された場合に、第1の語長の語の後ろに出現する符号化前の語と取得された最近出現位置における第1の語長の語の後ろに出現する符号化済みの語とが一致する第1の一致長を特定し、位置取得部により第3の語長の語の最近出現位置が取得された場合に、第3の語長の語の後ろに出現する符号化前の語と特定された最近出現位置における第3の語長の語の後ろに出現する符号化済みの語とが一致する第2の一致長を特定する一致長特定部と、(E)指定された語長を符号化する第1の符号化部と、(F)複数の語のうち指定された語を符号化する第2の符号化部と、(G)制御部と、(H)第2の記憶部とを有する。
そして、位置取得部が第1の語長の語の最近出現位置を取得すると、一致長特定部が第1の一致長を特定し、位置取得部が第3の語長の語の最近出現位置を取得すると、一致長特定部が前記第2の一致長を特定する。また、上で述べた制御部は、第1の一致長より第2の一致長が長い場合には、第2の語長又は第3の語長と第2の一致長とを指定して第1の符号化部に符号化を行わせ、第2の語長の符号化前の語を第2の符号化部に符号化を行わせ、符号化により生成された符号を第2の記憶部に記憶させる。また、上記制御部は、第1の一致長が第2の一致長以上である場合又は第2の一致長が特定されない場合、ゼロ又は第1の語長と第1の一致長とを第1の符号化部に符号化を行わせ、符号化により生成された符号を第2の記憶部に記憶させる。そして、上記制御部は、圧縮対象データにおいて第1の語長の語が過去に出現していない場合には、第1の語長の語の後ろに出現する符号化前の語を第2の符号化部に符号化を行わせ、符号化により生成された符号を第2の記憶部に記憶させる。
また、上で述べた位置取得部は、第2の語長を1乃至M(Mは1以上の整数)まで変化させて、第2の語長の各々について第3の語長の語の最近出現位置を取得するようにしても良い。また、一致長特定部は、位置取得部が第3の語長の語の最近出現位置を取得すると、対応する第2の一致長を特定するようにしても良い。このような場合には、上で述べた制御部は、第1の一致長より第2の一致長のうち最も長い第2の一致長が長い場合には、当該最も長い第2の一致長に対応する第2の語長又は第3の語長と当該最も長い第2の一致長とを指定して第1の符号化部に符号化を行わせ、当該最も長い第2の一致長に対応する第2の語長の符号化前の語を第2の符号化部に符号化を行わせ、符号化により生成された符号を第2の記憶部に記憶させてもよい。また、第1の一致長が第2の一致長のいずれのもの以上である場合又は第2の一致長が特定されない場合、ゼロ又は第1の語長と第1の一致長とを第1の符号化部に符号化を行わせ、符号化により生成された符号を第2の記憶部に記憶させるようにしても良い。
また、復元を行う情報処理装置は、(A)復元された複数の語を記憶する第1の記憶部と、(B)予め定められた複数の語長の各々について、当該語長を有する語の、復元された複数の語における最近出現位置を保持する位置保持部と、(C)位置保持部から、直前に復元された第1の語長の語に当該第1の語長の語の後で復元された第2の語長の語を加えることで得られる第3の語長の語の過去の最近出現位置を取得する位置取得部と、(D)圧縮データに含まれる複数の符号のうち第2の語長を特定するための符号を復元する制御部と、(E)複数の符号のうち文字に相当する符号を復元する第1の復元部と、(F)第2の語長の語の後ろで一致する語の語長を表す一致長に相当する符号を復元する第2の復元部と、(G)位置取得部から出力される第3の語長の語の過去の最近出現位置と第2の復元部から出力される一致長とで特定される語を、第1の記憶部からコピーして、第1の記憶部に記憶するコピー部とを有する。
そして、上で述べた制御部は、位置保持部から、第1の語長の語の最近出現位置が取得できない場合には、複数の符号のうち第1の語長の語に相当する符号の後に出現する符号を、第1の符号部により復元させ、第1の記憶部に記憶させる。また、上で述べた制御部は、位置保持部から、第1の語長の語の最近出現位置が取得されると、複数の符号のうち第1の語長の語に相当する符号の後に出現し且つ第2の語長を特定するための符号を復元し、複数の符号のうち第2の語長を特定するための符号の後に出現する一致長に相当する符号を第2の復元部に復元させ、復元された第2の語長及び一致長に応じて位置取得部及びコピー部を動作させる。
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROMなどの光ディスク、光磁気ディスク、半導体メモリ(例えばROM)、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
第1のデータ格納部に格納されており且つ複数の語を含む圧縮対象データにおいて直前に符号化された第1の語長の語が過去に出現していたことを検出すると、前記第1の語長の語の後ろに出現する符号化前の語と過去に出現した前記第1の語長の語の後ろに出現する符号化済みの語とが一致する第1の一致長を特定する第1の特定処理と、
前記第1の語長の語に当該第1の語長の語の後ろに出現する第2の語長の符号化前の語を加えることで得られる第3の語長の語が前記圧縮対象データにおいて過去に出現した位置を探索して、前記第3の語長の語の過去の出現位置が検出されると、前記第3の語長の語の後ろに出現する符号化前の語と過去に出現した前記第3の語長の語の後ろに出現する符号化済みの語とが一致する第2の一致長を特定する第2の特定処理と、
前記第1の一致長より前記第2の一致長が長い場合には、前記第2の語長又は前記第3の語長と前記第2の一致長と前記第2の語長の符号化前の語とを符号化して、第2のデータ格納部に格納する第1の符号化処理と、
前記第1の一致長が前記第2の一致長以上である場合又は前記第2の一致長が特定されない場合には、ゼロ又は前記第1の語長と前記第1の一致長とを符号化して、前記第2のデータ格納部に格納する第2の符号化処理と、
前記圧縮対象データにおいて前記第1の語長の語が過去に出現していない場合には、前記第1の語長の語の後ろに出現する符号化前の語を符号化して、前記第2のデータ格納部に格納する処理と、
を、コンピュータに実行させるためのプログラム。
(付記2)
前記第2の特定処理が、
前記第2の語長を1乃至M(Mは1以上の整数)まで変化させて、複数の第2の一致長を特定する処理を含み、
前記第1の符号化処理及び前記第2の符号化処理における前記第2の一致長は、前記複数の第2の一致長のうち最も長い一致長であり、前記第2の語長は、当該最も長い一致長が特定された際の第2の語長である
付記1記載のプログラム。
(付記3)
前記第1の一致長と前記第2の一致長とがゼロである場合又は前記第1の一致長がゼロで且つ前記第2の一致長が特定されない場合には、前記第1の語長の語の後ろに出現する符号化前の語を符号化する処理
をさらに含む付記1又は2記載のプログラム。
(付記4)
符号化前の語を符号化する場合には、直前の1又は複数の語からなる文脈に対して次に出現する語の符号を保持する符号保持部から、前記符号化前の語と前記符号化前の語の直前の1又は複数の語とから前記符号化前の語の符号を特定する
付記1乃至3のいずれか1つ記載のプログラム。
(付記5)
第1のデータ格納部に格納されており且つ復元された複数の語において直前に復元された第1の語長の語が過去に復元されていたことを検出すると、第2のデータ格納部に格納されており且つ前記第1の語長の語の後ろに出現し且つ連結すべき語の語長を特定するための第2の語長に相当する第1の符号と、前記連結すべき語の後ろで一致する語の一致長を表す第3の語長に相当する第2の符号と、前記連結すべき語に相当する第3の符号とを復元する処理と、
復元された前記連結すべき語を、前記第1のデータ格納部に格納する処理と、
前記複数の語において、前記第1の語長の語と前記連結すべき語とを連結することで得られる第4の語長の語の後ろで復元されている前記第3の語長の語をコピーして、前記第1のデータ格納部に格納する処理と、
前記複数の語において、前記第1の語長の語が過去に復元されていないことを検出すると、前記第2のデータ格納部に格納されており且つ前記第1の語長の語の符号の後ろに出現する符号を復元して、前記第1のデータ格納部に格納する処理と、
を、コンピュータに実行させるためのプログラム。
(付記6)
前記連結すべき語の語長は、前記第2の語長から前記第1の語長を減じた数である
付記5記載のプログラム。
(付記7)
複数の語を含む圧縮対象データを記憶する第1の記憶部と、
予め定められた複数の語長の各々について、当該語長を有する語の、前記圧縮対象データにおける最近出現位置を保持する位置保持部と、
前記位置保持部から、直前に符号化された第1の語長の語の最近出現位置を取得し、前記第1の語長の語に当該第1の語長の語の後ろに出現する第2の語長の符号化前の語を加えることで得られる第3の語長の語の最近出現位置を取得する位置取得部と、
前記位置取得部により前記第1の語長の語の最近出現位置が取得された場合に、前記第1の語長の語の後ろに出現する符号化前の語と取得された前記最近出現位置における前記第1の語長の語の後ろに出現する符号化済みの語とが一致する第1の一致長を特定し、前記位置取得部により前記第3の語長の語の最近出現位置が取得された場合に、前記第3の語長の語の後ろに出現する符号化前の語と特定された前記最近出現位置における前記第3の語長の語の後ろに出現する符号化済みの語とが一致する第2の一致長を特定する一致長特定部と、
指定された語長を符号化する第1の符号化部と、
前記複数の語のうち指定された語を符号化する第2の符号化部と、
制御部と、
第2の記憶部と、
を有し、
前記位置取得部が前記第1の語長の語の最近出現位置を取得すると、前記一致長特定部が前記第1の一致長を特定し、前記位置取得部が前記第3の語長の語の最近出現位置を取得すると、前記一致長特定部が前記第2の一致長を特定し、
前記制御部は、
前記第1の一致長より前記第2の一致長が長い場合には、前記第2の語長又は前記第3の語長と前記第2の一致長とを指定して前記第1の符号化部に符号化を行わせ、前記第2の語長の符号化前の語を前記第2の符号化部に符号化を行わせ、符号化により生成された符号を前記第2の記憶部に記憶させ、
前記第1の一致長が前記第2の一致長以上である場合又は前記第2の一致長が特定されない場合、ゼロ又は前記第1の語長と前記第1の一致長とを前記第1の符号化部に符号化を行わせ、符号化により生成された符号を前記第2の記憶部に記憶させ、
前記圧縮対象データにおいて前記第1の語長の語が過去に出現していない場合には、前記第1の語長の語の後ろに出現する符号化前の語を前記第2の符号化部に符号化を行わせ、符号化により生成された符号を前記第2の記憶部に記憶させる
情報処理装置。
(付記8)
前記位置取得部は、前記第2の語長を1乃至M(Mは1以上の整数)まで変化させて、前記第2の語長の各々について前記第3の語長の語の最近出現位置を取得し、
前記一致長特定部は、前記位置取得部が前記第3の語長の語の最近出現位置を取得すると、対応する前記第2の一致長を特定し、
前記制御部は、
前記第1の一致長より前記第2の一致長のうち最も長い第2の一致長が長い場合には、当該最も長い第2の一致長に対応する第2の語長又は第3の語長と当該最も長い第2の一致長とを指定して前記第1の符号化部に符号化を行わせ、当該最も長い第2の一致長に対応する第2の語長の符号化前の語を前記第2の符号化部に符号化を行わせ、符号化により生成された符号を前記第2の記憶部に記憶させ、
前記第1の一致長が前記第2の一致長のいずれのもの以上である場合又は前記第2の一致長が特定されない場合、ゼロ又は前記第1の語長と前記第1の一致長とを前記第1の符号化部に符号化を行わせ、符号化により生成された符号を前記第2の記憶部に記憶させる
付記7記載の情報処理装置。
(付記9)
復元された複数の語を記憶する第1の記憶部と、
予め定められた複数の語長の各々について、当該語長を有する語の、前記復元された複数の語における最近出現位置を保持する位置保持部と、
前記位置保持部から、直前に復元された第1の語長の語に当該第1の語長の語の後で復元された第2の語長の語を加えることで得られる第3の語長の語の過去の最近出現位置を取得する位置取得部と、
圧縮データに含まれる複数の符号のうち前記第2の語長を特定するための符号を復元する制御部と、
前記複数の符号のうち文字に相当する符号を復元する第1の復元部と、
前記第2の語長の語の後ろで一致する語の語長を表す一致長に相当する符号を復元する第2の復元部と、
前記位置取得部から出力される前記第3の語長の語の過去の最近出現位置と前記第2の復元部から出力される前記一致長とで特定される語を、前記第1の記憶部からコピーして、前記第1の記憶部に記憶するコピー部と、
を有し、
前記制御部は、
前記位置保持部から、前記第1の語長の語の最近出現位置が取得できない場合には、前記複数の符号のうち前記第1の語長の語に相当する符号の後に出現する符号を、前記第1の符号部により復元させ、前記第1の記憶部に記憶させ、
前記位置保持部から、前記第1の語長の語の最近出現位置が取得されると、前記複数の符号のうち前記第1の語長の語に相当する符号の後に出現し且つ前記第2の語長を特定するための符号を復元し、前記複数の符号のうち前記第1の語長の語に相当する符号の後に出現する前記一致長に相当する符号を前記第2の復元部に復元させ、復元された前記第2の語長及び前記一致長に応じて前記位置取得部及び前記コピー部を動作させる
情報処理装置。
(付記10)
第1のデータ格納部に格納されており且つ複数の語を含む圧縮対象データにおいて直前に符号化された第1の語長の語が過去に出現していたことを検出すると、前記第1の語長の語の後ろに出現する符号化前の語と過去に出現した前記第1の語長の語の後ろに出現する符号化済みの語とが一致する第1の一致長を特定する第1の特定処理と、
前記第1の語長の語に当該第1の語長の語の後ろに出現する第2の語長の符号化前の語を加えることで得られる第3の語長の語が前記圧縮対象データにおいて過去に出現した位置を探索して、前記第3の語長の語の過去の出現位置が検出されると、前記第3の語長の語の後ろに出現する符号化前の語と過去に出現した前記第3の語長の語の後ろに出現する符号化済みの語とが一致する第2の一致長を特定する第2の特定処理と、
前記第1の一致長より前記第2の一致長が長い場合には、前記第2の語長又は前記第3の語長と前記第2の一致長と前記第2の語長の符号化前の語とを符号化して、第2のデータ格納部に格納する第1の符号化処理と、
前記第1の一致長が前記第2の一致長以上である場合又は前記第2の一致長が特定されない場合には、ゼロ又は前記第1の語長と前記第1の一致長とを符号化して、前記第2のデータ格納部に格納する第2の符号化処理と、
前記圧縮対象データにおいて前記第1の語長の語が過去に出現していない場合には、前記第1の語長の語の後ろに出現する符号化前の語を符号化して、前記第2のデータ格納部に格納する処理と、
を含み、コンピュータにより実行される圧縮方法。
(付記11)
第1のデータ格納部に格納されており且つ復元された複数の語において直前に復元された第1の語長の語が過去に復元されていたことを検出すると、第2のデータ格納部に格納されており且つ前記第1の語長の語の後ろに出現し且つ連結すべき語の語長を特定するための第2の語長に相当する第1の符号と、前記連結すべき語の後ろで一致する語の一致長を表す第3の語長に相当する第2の符号と、前記連結すべき語に相当する第3の符号とを復元する処理と、
復元された前記連結すべき語を、前記第1のデータ格納部に格納する処理と、
前記複数の語において、前記第1の語長の語と前記連結すべき語とを連結することで得られる第4の語長の語の後ろで復元されている前記第3の語長の語をコピーして、前記第1のデータ格納部に格納する処理と、
前記複数の語において、前記第1の語長の語が過去に復元されていないことを検出すると、前記第2のデータ格納部に格納されており且つ前記第1の語長の語の符号の後ろに出現する符号を復元して、前記第1のデータ格納部に格納する処理と、
を含み、コンピュータにより実行される復元方法。
11 元データ格納部
12 入力部
13 入力バッファ
14 位置探索部
15 符号化制御部
16 第1符号化部
17 第2符号化部
18 出力バッファ
19 出力部
20 圧縮データ格納部
141 位置保持部
142 位置取得部
143 一致長取得部
161 m符号化部
162 l符号化部
21 圧縮データ格納部
22 入力部
23 復元制御部
24 位置保持部
25 位置取得部
26 一致長復元部
27 文字復元部
28 コピー部
29 出力バッファ
30 出力部
31 元データ格納部

Claims (11)

  1. 第1のデータ格納部に格納されており且つ複数の語を含む圧縮対象データにおいて直前に符号化された第1の語長の語が過去に出現していたことを検出すると、前記第1の語長の語の後ろに出現する符号化前の語と過去に出現した前記第1の語長の語の後ろに出現する符号化済みの語とが一致する第1の一致長を特定する第1の特定処理と、
    前記第1の語長の語に当該第1の語長の語の後ろに出現する第2の語長の符号化前の語を加えることで得られる第3の語長の語が前記圧縮対象データにおいて過去に出現した位置を探索して、前記第3の語長の語の過去の出現位置が検出されると、前記第3の語長の語の後ろに出現する符号化前の語と過去に出現した前記第3の語長の語の後ろに出現する符号化済みの語とが一致する第2の一致長を特定する第2の特定処理と、
    前記第1の一致長より前記第2の一致長が長い場合には、前記第2の語長又は前記第3の語長と前記第2の一致長と前記第2の語長の符号化前の語とを符号化して、第2のデータ格納部に格納する第1の符号化処理と、
    前記第1の一致長が前記第2の一致長以上である場合又は前記第2の一致長が特定されない場合には、ゼロ又は前記第1の語長と前記第1の一致長とを符号化して、前記第2のデータ格納部に格納する第2の符号化処理と、
    前記圧縮対象データにおいて前記第1の語長の語が過去に出現していない場合には、前記第1の語長の語の後ろに出現する符号化前の語を符号化して、前記第2のデータ格納部に格納する処理と、
    を、コンピュータに実行させるためのプログラム。
  2. 前記第2の特定処理が、
    前記第2の語長を1乃至M(Mは1以上の整数)まで変化させて、複数の第2の一致長を特定する処理を含み、
    前記第1の符号化処理及び前記第2の符号化処理における前記第2の一致長は、前記複数の第2の一致長のうち最も長い一致長であり、前記第2の語長は、当該最も長い一致長が特定された際の第2の語長である
    請求項1記載のプログラム。
  3. 前記第1の一致長と前記第2の一致長とがゼロである場合又は前記第1の一致長がゼロで且つ前記第2の一致長が特定されない場合には、前記第1の語長の語の後ろに出現する符号化前の語を符号化する処理
    をさらに含む請求項1又は2記載のプログラム。
  4. 符号化前の語を符号化する場合には、直前の1又は複数の語からなる文脈に対して次に出現する語の符号を保持する符号保持部から、前記符号化前の語と前記符号化前の語の直前の1又は複数の語とから前記符号化前の語の符号を特定する
    請求項1乃至3のいずれか1つ記載のプログラム。
  5. 第1のデータ格納部に格納されており且つ復元された複数の語において直前に復元された第1の語長の語が過去に復元されていたことを検出すると、第2のデータ格納部に格納されており且つ前記第1の語長の語の後ろに出現し且つ連結すべき語の語長を特定するための第2の語長に相当する第1の符号と、前記連結すべき語の後ろで一致する語の一致長を表す第3の語長に相当する第2の符号と、前記連結すべき語に相当する第3の符号とを復元する処理と、
    復元された前記連結すべき語を、前記第1のデータ格納部に格納する処理と、
    前記複数の語において、前記第1の語長の語と前記連結すべき語とを連結することで得られる第4の語長の語の後ろで復元されている前記第3の語長の語をコピーして、前記第1のデータ格納部に格納する処理と、
    前記複数の語において、前記第1の語長の語が過去に復元されていないことを検出すると、前記第2のデータ格納部に格納されており且つ前記第1の語長の語の符号の後ろに出現する符号を復元して、前記第1のデータ格納部に格納する処理と、
    を、コンピュータに実行させるためのプログラム。
  6. 前記連結すべき語の語長は、前記第2の語長から前記第1の語長を減じた数である
    請求項5記載のプログラム。
  7. 複数の語を含む圧縮対象データを記憶する第1の記憶部と、
    予め定められた複数の語長の各々について、当該語長を有する語の、前記圧縮対象データにおける最近出現位置を保持する位置保持部と、
    前記位置保持部から、直前に符号化された第1の語長の語の最近出現位置を取得し、前記第1の語長の語に当該第1の語長の語の後ろに出現する第2の語長の符号化前の語を加えることで得られる第3の語長の語の最近出現位置を取得する位置取得部と、
    前記位置取得部により前記第1の語長の語の最近出現位置が取得された場合に、前記第1の語長の語の後ろに出現する符号化前の語と取得された前記最近出現位置における前記第1の語長の語の後ろに出現する符号化済みの語とが一致する第1の一致長を特定し、前記位置取得部により前記第3の語長の語の最近出現位置が取得された場合に、前記第3の語長の語の後ろに出現する符号化前の語と特定された前記最近出現位置における前記第3の語長の語の後ろに出現する符号化済みの語とが一致する第2の一致長を特定する一致長特定部と、
    指定された語長を符号化する第1の符号化部と、
    前記複数の語のうち指定された語を符号化する第2の符号化部と、
    制御部と、
    第2の記憶部と、
    を有し、
    前記位置取得部が前記第1の語長の語の最近出現位置を取得すると、前記一致長特定部が前記第1の一致長を特定し、前記位置取得部が前記第3の語長の語の最近出現位置を取得すると、前記一致長特定部が前記第2の一致長を特定し、
    前記制御部は、
    前記第1の一致長より前記第2の一致長が長い場合には、前記第2の語長又は前記第3の語長と前記第2の一致長とを指定して前記第1の符号化部に符号化を行わせ、前記第2の語長の符号化前の語を前記第2の符号化部に符号化を行わせ、符号化により生成された符号を前記第2の記憶部に記憶させ、
    前記第1の一致長が前記第2の一致長以上である場合又は前記第2の一致長が特定されない場合、ゼロ又は前記第1の語長と前記第1の一致長とを前記第1の符号化部に符号化を行わせ、符号化により生成された符号を前記第2の記憶部に記憶させ、
    前記圧縮対象データにおいて前記第1の語長の語が過去に出現していない場合には、前記第1の語長の語の後ろに出現する符号化前の語を前記第2の符号化部に符号化を行わせ、符号化により生成された符号を前記第2の記憶部に記憶させる
    情報処理装置。
  8. 前記位置取得部は、前記第2の語長を1乃至M(Mは1以上の整数)まで変化させて、前記第2の語長の各々について前記第3の語長の語の最近出現位置を取得し、
    前記一致長特定部は、前記位置取得部が前記第3の語長の語の最近出現位置を取得すると、対応する前記第2の一致長を特定し、
    前記制御部は、
    前記第1の一致長より前記第2の一致長のうち最も長い第2の一致長が長い場合には、当該最も長い第2の一致長に対応する第2の語長又は第3の語長と当該最も長い第2の一致長とを指定して前記第1の符号化部に符号化を行わせ、当該最も長い第2の一致長に対応する第2の語長の符号化前の語を前記第2の符号化部に符号化を行わせ、符号化により生成された符号を前記第2の記憶部に記憶させ、
    前記第1の一致長が前記第2の一致長のいずれのもの以上である場合又は前記第2の一致長が特定されない場合、ゼロ又は前記第1の語長と前記第1の一致長とを前記第1の符号化部に符号化を行わせ、符号化により生成された符号を前記第2の記憶部に記憶させる
    請求項7記載の情報処理装置。
  9. 復元された複数の語を記憶する第1の記憶部と、
    予め定められた複数の語長の各々について、当該語長を有する語の、前記復元された複数の語における最近出現位置を保持する位置保持部と、
    前記位置保持部から、直前に復元された第1の語長の語に当該第1の語長の語の後で復元された第2の語長の語を加えることで得られる第3の語長の語の過去の最近出現位置を取得する位置取得部と、
    圧縮データに含まれる複数の符号のうち前記第2の語長を特定するための符号を復元する制御部と、
    前記複数の符号のうち文字に相当する符号を復元する第1の復元部と、
    前記第2の語長の語の後ろで一致する語の語長を表す一致長に相当する符号を復元する第2の復元部と、
    前記位置取得部から出力される前記第3の語長の語の過去の最近出現位置と前記第2の復元部から出力される前記一致長とで特定される語を、前記第1の記憶部からコピーして、前記第1の記憶部に記憶するコピー部と、
    を有し、
    前記制御部は、
    前記位置保持部から、前記第1の語長の語の最近出現位置が取得できない場合には、前記複数の符号のうち前記第1の語長の語に相当する符号の後に出現する符号を、前記第1の符号部により復元させ、前記第1の記憶部に記憶させ、
    前記位置保持部から、前記第1の語長の語の最近出現位置が取得されると、前記複数の符号のうち前記第1の語長の語に相当する符号の後に出現し且つ前記第2の語長を特定するための符号を復元し、前記複数の符号のうち前記第1の語長の語に相当する符号の後に出現する前記一致長に相当する符号を前記第2の復元部に復元させ、復元された前記第2の語長及び前記一致長に応じて前記位置取得部及び前記コピー部を動作させる
    情報処理装置。
  10. 第1のデータ格納部に格納されており且つ複数の語を含む圧縮対象データにおいて直前に符号化された第1の語長の語が過去に出現していたことを検出すると、前記第1の語長の語の後ろに出現する符号化前の語と過去に出現した前記第1の語長の語の後ろに出現する符号化済みの語とが一致する第1の一致長を特定する第1の特定処理と、
    前記第1の語長の語に当該第1の語長の語の後ろに出現する第2の語長の符号化前の語を加えることで得られる第3の語長の語が前記圧縮対象データにおいて過去に出現した位置を探索して、前記第3の語長の語の過去の出現位置が検出されると、前記第3の語長の語の後ろに出現する符号化前の語と過去に出現した前記第3の語長の語の後ろに出現する符号化済みの語とが一致する第2の一致長を特定する第2の特定処理と、
    前記第1の一致長より前記第2の一致長が長い場合には、前記第2の語長又は前記第3の語長と前記第2の一致長と前記第2の語長の符号化前の語とを符号化して、第2のデータ格納部に格納する第1の符号化処理と、
    前記第1の一致長が前記第2の一致長以上である場合又は前記第2の一致長が特定されない場合には、ゼロ又は前記第1の語長と前記第1の一致長とを符号化して、前記第2のデータ格納部に格納する第2の符号化処理と、
    前記圧縮対象データにおいて前記第1の語長の語が過去に出現していない場合には、前記第1の語長の語の後ろに出現する符号化前の語を符号化して、前記第2のデータ格納部に格納する処理と、
    を含み、コンピュータにより実行される圧縮方法。
  11. 第1のデータ格納部に格納されており且つ復元された複数の語において直前に復元された第1の語長の語が過去に復元されていたことを検出すると、第2のデータ格納部に格納されており且つ前記第1の語長の語の後ろに出現し且つ連結すべき語の語長を特定するための第2の語長に相当する第1の符号と、前記連結すべき語の後ろで一致する語の一致長を表す第3の語長に相当する第2の符号と、前記連結すべき語に相当する第3の符号とを復元する処理と、
    復元された前記連結すべき語を、前記第1のデータ格納部に格納する処理と、
    前記複数の語において、前記第1の語長の語と前記連結すべき語とを連結することで得られる第4の語長の語の後ろで復元されている前記第3の語長の語をコピーして、前記第1のデータ格納部に格納する処理と、
    前記複数の語において、前記第1の語長の語が過去に復元されていないことを検出すると、前記第2のデータ格納部に格納されており且つ前記第1の語長の語の符号の後ろに出現する符号を復元して、前記第1のデータ格納部に格納する処理と、
    を含み、コンピュータにより実行される復元方法。
JP2012079511A 2012-03-30 2012-03-30 圧縮方法、復元方法、情報処理装置及びプログラム Pending JP2013211643A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012079511A JP2013211643A (ja) 2012-03-30 2012-03-30 圧縮方法、復元方法、情報処理装置及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012079511A JP2013211643A (ja) 2012-03-30 2012-03-30 圧縮方法、復元方法、情報処理装置及びプログラム

Publications (1)

Publication Number Publication Date
JP2013211643A true JP2013211643A (ja) 2013-10-10

Family

ID=49529137

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012079511A Pending JP2013211643A (ja) 2012-03-30 2012-03-30 圧縮方法、復元方法、情報処理装置及びプログラム

Country Status (1)

Country Link
JP (1) JP2013211643A (ja)

Similar Documents

Publication Publication Date Title
US9363309B2 (en) Systems and methods for compressing packet data by predicting subsequent data
US5870036A (en) Adaptive multiple dictionary data compression
KR100894002B1 (ko) 선택적 압축과 복원 및 압축 데이터에 대한 데이터 포맷을위한 장치 및 방법
CN108768403B (zh) 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器
JP2019054532A (ja) Vlsiでの効率的なハフマン符号化を行う装置および方法
JP3778087B2 (ja) データ符号化装置及びデータ復号装置
KR20050092343A (ko) 데이터 압축
US8872677B2 (en) Method and apparatus for compressing data-carrying signals
US10735025B2 (en) Use of data prefixes to increase compression ratios
JP2015186077A (ja) データ圧縮を高速化する方法、並びに、データ圧縮を高速化するためのコンピュータ、及びそのコンピュータ・プログラム
US10897270B2 (en) Dynamic dictionary-based data symbol encoding
JPH07261977A (ja) データ圧縮方法および装置ならびにデータ復元方法および装置
EP2962398A1 (en) Encoder, decoder and method
CN113630125A (zh) 数据压缩、编码解压缩方法、装置、电子设备及存储介质
CN104811209A (zh) 一种抗最长匹配检测的压缩文件数据嵌入方法及装置
Nandi et al. Modified compression techniques based on optimality of LZW code (MOLZW)
US9916335B2 (en) Row, table, and index decompression
WO2014030189A1 (ja) 圧縮プログラム、圧縮方法、圧縮装置、伸張プログラム、伸張方法、伸張装置およびデータ転送システム
JP2016052046A (ja) 圧縮装置、伸長装置およびストレージ装置
JP6135788B2 (ja) 圧縮プログラム、圧縮方法、圧縮装置、伸張プログラム、伸張方法、伸張装置およびデータ転送システム
JP2013211643A (ja) 圧縮方法、復元方法、情報処理装置及びプログラム
JP4093193B2 (ja) データ圧縮方法及びプログラムならびにデータ復元方法及び装置
US7612692B2 (en) Bidirectional context model for adaptive compression
JP2005521324A (ja) 損失のないデータの圧縮および圧縮解除方法および装置
Hoang et al. Dictionary selection using partial matching