解説
長さ の二進文字列 に対して、次のチェックサムを考える。
チェックサムが である文字列の集合は、1回の挿入または削除を訂正できる Varshamov--Tenengolts 符号である。
元の文字列の長さが のとき、 を満たす最小の を選び、 とする。位置 をチェックビット用に空け、残りの 個の位置に の各ビットを順番に入れる。
データビットによるチェックサムを とする。 を満たす整数 を選ぶ。 なので、 の二進表現をチェックビットの位置に入れられる。これにより、完成した文字列のチェックサムは になる。
では かつ である。 の場合は、各ビットを2回ずつ繰り返す。この短い反復符号も1回の挿入を訂正できる。したがって、アリスは常に長さの条件を満たし、すべての について なので 点を得る。
ボブが受け取る文字列の長さは である。削除位置 の各候補について、その文字を削除した後のチェックサムを計算し、チェックサムが になる位置を探す。1回の挿入を訂正する符号の性質により、復元される符号語は一意である。重み付き和と接尾辞に含まれる 1 の個数を用いると、すべての候補のチェックサムを合計 時間で計算できる。
符号語を復元した後、位置が2の累乗でない文字だけを順番に集めると、元の文字列 が得られる。
各実行の時間計算量は 、補助空間計算量は である。チェックサムの計算に必要な最大の整数は であり、符号付き64ビット整数に収まる。
Solution written by GPT5