No.469

ローリングハッシュなどで数列のハッシュを作り, クエリごとにハッシュを更新する. 更新したハッシュは連想配列にクエリの位置とともに入れておく.

適当な数から配列 を用意し, ハッシュを

とする. これならばハッシュの更新は

となり, の累積和を計算しておけば で更新できる.

をどう選ぶかが衝突回避のためには重要だが, ここでは10000以上の素数を乱択したものを採用する.