-
元データを8ビットの記号とし、最初に256種類の全記号を登録した辞書を用意する。
その場合、記号を8ビットの整数として扱った場合の整数値をそのまま参照番号とする。
そして最長一致系列とその参照番号を記憶するための場所を用意し、参照番号を符号化する時のビット数pを9と初期化する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
最長一致系列=(空):参照番号=(空) p=9
-
最初の記号aを読み込んで最長一系列とし、それを整数化した値を参照番号として記憶する。
最長一致系列=a:参照番号=97 p=9
- 次の記号aを読み込み、それを最長一致系列に追加した「aa」という記号列を辞書から探す。
この場合「aa」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「aa」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
読み込んだ記号=a
最長一致系列=a:参照番号=97 p=9
出力データ:97=001100001(9ビットの整数化表現)
登録語句=aa:参照番号=256
- 今読み込んだaをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=a:参照番号=97 p=9
- 次の記号bを読み込み、それを最長一致系列に追加した「ab」という記号列を辞書から探す。
この場合「ab」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「ab」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
読み込んだ記号=b
最長一致系列=a:参照番号=97 p=9
出力データ:97
登録語句=ab:参照番号=257
- 今読み込んだbをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=b:参照番号=98 p=9
- 次の記号bを読み込み、それを最長一致系列に追加した「bb」という記号列を辞書から探す。
この場合「bb」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「bb」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
aa | 256 | ab | 257 | bb | 258 |
読み込んだ記号=b
最長一致系列=b:参照番号=98 p=9
出力データ:98
登録語句=bb:参照番号=258
- 今読み込んだbをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=b:参照番号=98 p=9
- 次の記号cを読み込み、それを最長一致系列に追加した「bc」という記号列を辞書から探す。
この場合「bc」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「bc」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
aa | 256 | ab | 257 | bb | 258 | bc | 259 |
読み込んだ記号=c
最長一致系列=b:参照番号=98 p=9
出力データ:98
登録語句=bc:参照番号=259
- 今読み込んだcをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=c:参照番号=99 p=9
- 次の記号cを読み込み、それを最長一致系列に追加した「cc」という記号列を辞書から探す。
この場合「cc」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「cc」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
aa | 256 | ab | 257 | bb | 258 | bc | 259 | cc | 260 |
読み込んだ記号=c
最長一致系列=c:参照番号=99 p=9
出力データ:99
登録語句=cc:参照番号=260
- 今読み込んだcをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=c:参照番号=99 p=9
- 次の記号cを読み込み、それを最長一致系列に追加した「cc」という記号列を辞書から探す。
この場合「cc」は260番にあるので、それを新しい最長一致系列とし、その参照番号260を記憶する。
最長一致系列=cc:参照番号=260 p=9
- 次の記号cを読み込み、それを最長一致系列に追加した「ccc」という記号列を辞書から探す。
この場合「ccc」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「ccc」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
aa | 256 | ab | 257 | bb | 258 | bc | 259 | cc | 260 | ccc | 261 |
読み込んだ記号=c
最長一致系列=cc:参照番号=260 p=9
出力データ:260
登録語句=ccc:参照番号=261
- 今読み込んだcをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=c:参照番号=99 p=9
- 次の記号dを読み込み、それを最長一致系列に追加した「cd」という記号列を辞書から探す。
この場合「cd」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「cd」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
aa | 256 | ab | 257 | bb | 258 | bc | 259 | cc | 260 | ccc | 261 | cd | 262 |
読み込んだ記号=d
最長一致系列=c:参照番号=99 p=9
出力データ:99
登録語句=cd:参照番号=262
- 今読み込んだdをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=d:参照番号=100 p=9
- 次の記号dを読み込み、それを最長一致系列に追加した「dd」という記号列を辞書から探す。
この場合「dd」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「dd」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
aa | 256 | ab | 257 | bb | 258 | bc | 259 | cc | 260 | ccc | 261 | cd | 262 | dd | 263 |
読み込んだ記号=d
最長一致系列=d:参照番号=100 p=9
出力データ:100
登録語句=dd:参照番号=263
- 今読み込んだdをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=d:参照番号=100 p=9
- 次の記号dを読み込み、それを最長一致系列に追加した「dd」という記号列を辞書から探す。
この場合「dd」は263番にあるので、それを新しい最長一致系列とし、その参照番号263を記憶する。
最長一致系列=dd:参照番号=263 p=9
- 次の記号dを読み込み、それを最長一致系列に追加した「ddd」という記号列を辞書から探す。
この場合「ddd」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「ddd」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
aa | 256 | ab | 257 | bb | 258 | bc | 259 | cc | 260 | ccc | 261 | cd | 262 | dd | 263 |
読み込んだ記号=d
最長一致系列=dd:参照番号=263 p=9
出力データ:263
登録語句=ddd:参照番号=264
- 今読み込んだdをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=d:参照番号=100 p=9
- 次の記号eを読み込み、それを最長一致系列に追加した「de」という記号列を辞書から探す。
この場合「de」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「de」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
aa | 256 | ab | 257 | bb | 258 | bc | 259 | cc | 260 | ccc | 261 | cd | 262 | dd | 263 |
読み込んだ記号=e
最長一致系列=d:参照番号=100 p=9
出力データ:100
登録語句=de:参照番号=265
- 今読み込んだeをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=e:参照番号=101 p=9
- 次の記号eを読み込み、それを最長一致系列に追加した「ee」という記号列を辞書から探す。
この場合「ee」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「ee」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
aa | 256 | ab | 257 | bb | 258 | bc | 259 | cc | 260 | ccc | 261 | cd | 262 | dd | 263 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
ddd | 264 | de | 265 | ee | 266 |
読み込んだ記号=e
最長一致系列=e:参照番号=101 p=9
出力データ:101
登録語句=ee:参照番号=266
- 今読み込んだeをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=e:参照番号=101 p=9
- 次の記号eを読み込み、それを最長一致系列に追加した「ee」という記号列を辞書から探す。
この場合「ee」は266番にあるので、それを新しい最長一致系列とし、その参照番号266を記憶する。
最長一致系列=ee:参照番号=266 p=9
- 次の記号eを読み込み、それを最長一致系列に追加した「eee」という記号列を辞書から探す。
この場合「eee」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「eee」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
aa | 256 | ab | 257 | bb | 258 | bc | 259 | cc | 260 | ccc | 261 | cd | 262 | dd | 263 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
ddd | 264 | de | 265 | ee | 266 | eee | 267 |
読み込んだ記号=e
最長一致系列=ee:参照番号=266 p=9
出力データ:266
登録語句=eee:参照番号=267
- 今読み込んだeをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=e:参照番号=101 p=9
- 次の記号eを読み込み、それを最長一致系列に追加した「ee」という記号列を辞書から探す。
この場合「ee」は266番にあるので、それを新しい最長一致系列とし、その参照番号266を記憶する。
最長一致系列=ee:参照番号=266 p=9
- 次の記号eを読み込み、それを最長一致系列に追加した「eee」という記号列を辞書から探す。
この場合「eee」は267番にあるので、それを新しい最長一致系列とし、その参照番号267を記憶する。
最長一致系列=eee:参照番号=267 p=9
- 次の記号eを読み込み、それを最長一致系列に追加した「eeee」という記号列を辞書から探す。
この場合「eeee」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「eeee」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
aa | 256 | ab | 257 | bb | 258 | bc | 259 | cc | 260 | ccc | 261 | cd | 262 | dd | 263 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
ddd | 264 | de | 265 | ee | 266 | eee | 267 | eeee | 268 |
読み込んだ記号=e
最長一致系列=eee:参照番号=267 p=9
出力データ:267
登録語句=eeee:参照番号=268
- 今読み込んだeをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=e:参照番号=101 p=9
- 次の記号eを読み込み、それを最長一致系列に追加した「ee」という記号列を辞書から探す。
この場合「ee」は266番にあるので、それを新しい最長一致系列とし、その参照番号266を記憶する。
最長一致系列=ee:参照番号=266 p=9
- 次の記号fを読み込み、それを最長一致系列に追加した「eef」という記号列を辞書から探す。
この場合「eef」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「eef」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
aa | 256 | ab | 257 | bb | 258 | bc | 259 | cc | 260 | ccc | 261 | cd | 262 | dd | 263 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
ddd | 264 | de | 265 | ee | 266 | eee | 267 | eeee | 268 | eef | 269 |
読み込んだ記号=f
最長一致系列=ee:参照番号=266 p=9
出力データ:266
登録語句=eef:参照番号=269
-
今読み込んだfをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=f:参照番号=102 p=9
- 次の記号fを読み込み、それを最長一致系列に追加した「ff」という記号列を辞書から探す。
この場合「ff」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「ff」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
aa | 256 | ab | 257 | bb | 258 | bc | 259 | cc | 260 | ccc | 261 | cd | 262 | dd | 263 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
ddd | 264 | de | 265 | ee | 266 | eee | 267 | eeee | 268 | eef | 269 | ff | 270 |
読み込んだ記号=f
最長一致系列=f:参照番号=102 p=9
出力データ:102
登録語句=ff:参照番号=270
- 今読み込んだfをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=f:参照番号=102 p=9
- 次の記号fを読み込み、それを最長一致系列に追加した「ff」という記号列を辞書から探す。
この場合「ff」は270番にあるので、それを新しい最長一致系列とし、その参照番号270を記憶する。
最長一致系列=ff:参照番号=270 p=9
- 次の記号fを読み込み、それを最長一致系列に追加した「fff」という記号列を辞書から探す。
この場合「fff」は辞書にないので、現在の最長一致系列の参照番号を9ビットで符号化して出力し、「fff」を新しい語句として辞書に登録する。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
aa | 256 | ab | 257 | bb | 258 | bc | 259 | cc | 260 | ccc | 261 | cd | 262 | dd | 263 |
語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 | 語句 | 番号 |
ddd | 264 | de | 265 | ee | 266 | eee | 267 | eeee | 268 | eef | 269 | ff | 270 | fff | 271 |
読み込んだ記号=f
最長一致系列=ff:参照番号=270 p=9
出力データ:270
登録語句=fff:参照番号=271
- 今読み込んだfをあらためて最長一致系列とし、その参照番号を記憶する。
最長一致系列=f:参照番号=102 p=9
- これで元データが終了したので、最長一致系系列として残っているfの参照番号を9ビットで符号化して出力する。
最長一致系列=f:参照番号=102 p=9
出力データ:102
符号化データ:(97)(97)(98)(98)(99)(260)(99)(100)(263)(100)(101)(266)(267)(266)(102)(270)(102)
以上のように、このデータ場合、LZW符号とオリジナルのLZ78符号とは全く同じ圧縮率になります。
この圧縮率はLZ77符号よりも悪い値ですが、LZ78符号は元データが多いと圧縮効率が落ちる可能性のあるLZ77の問題点を解決するために考案された手法ですから、このデータのように元データが少ない場合は、LZ77符号よりも圧縮効率が悪くなる傾向があります。