Revised : 2006/05/06
Since : 2006/05/01
先頭移動ともいう。
出現文字テーブルを作成し、出現した文字コードを常に先頭に移動(登録)する方法である。
つまり、出現した文字コードを出現文字テーブルのインデックス値に変換するアルゴリズムである。
そのまま変換すればただの写像だが、先頭に移動することにより次回出現時のインデックス値が小さくなるようにしている。
元のデータ | テーブル | 出力 | 出力後のテーブル |
A | ABC | 0 | ABC |
C | ABC | 2 | CAB |
B | CAB | 2 | BCA |
A | BCA | 2 | ABC |
B | ABC | 1 | BAC |
C | BAC | 2 | CBA |
A | CBA | 2 | ACB |
A | ABC | 0 | ABC |
A | ABC | 0 | ABC |
ACBABCAAA | <- 元のデータ | 022212200 | <- 出力データ |
出現した文字コードを出現文字テーブルのインデックス値に変換することは同じであるが、
前方に移動する時に、常に先頭に移動するのではなく移動する位置を工夫することにより、
必要以上に出現文字テーブルを乱さないようにし、出力データの偏りを大きくする。
以下に示す方法は、経験的に良い結果が得られることが知られているが、入力データに依存している。
ページの上部へ
出現文字テーブルのインデックス1より後方の文字コードが入力された場合は、
そのインデックス値を出力し、インデックス1に移動する。
インデックス1にある文字コードが入力された場合は、1を出力し、インデックス0に移動する。
インデックス0にある文字コードが入力された場合は、0を出力し、インデックス値も0のままとする。
元のデータ | テーブル | 出力 | 出力後のテーブル |
A | ABC | 0 | ABC |
C | ABC | 2 | ACB |
B | ACB | 2 | ABC |
A | ABC | 0 | ABC |
B | ABC | 1 | BAC |
C | BAC | 2 | BCA |
A | BCA | 2 | BAC |
A | BAC | 1 | ABC |
A | ABC | 0 | ABC |
ACBABCAAA | <- 元のデータ | 022012210 | <- 出力データ |
上記その1と同様の方法だが、出現文字テーブルのインデックス1にある文字コードが入力された場合が異なる。
この場合、直前に出力されたインデックス値が0の場合は、1を出力し、インデックス値も1のままとする。
直前に出力されたインデックス値が0以外の場合は、1を出力し、インデックス0に移動する。
元のデータ | テーブル | 出力 | 出力後のテーブル |
A | ABC | 0 | ABC |
C | ABC | 2 | ACB |
B | ACB | 2 | ABC |
A | ABC | 0 | ABC |
B | ABC | 1 | ABC |
C | ABC | 2 | ACB |
A | ACB | 0 | ACB |
A | ACB | 0 | ACB |
A | ACB | 0 | ACB |
ACBABCAAA | <- 元のデータ | 022012000 | <- 出力データ |
出力するインデックス値が、直前に出力されたインデックス値より大きければ、インデックス1に移動する。
それ以外は、インデックス0に移動する。
元のデータ | テーブル | 出力 | 出力後のテーブル |
A | ABC | 0 | ABC |
C | ABC | 2 | ACB |
B | ACB | 2 | BAC |
A | BAC | 1 | ABC |
B | ABC | 1 | BAC |
C | BAC | 2 | BCA |
A | BCA | 2 | ABC |
A | ABC | 0 | ABC |
A | ABC | 0 | ABC |
ACBABCAAA | <- 元のデータ | 022112200 | <- 出力データ |