ローリングハッシュ
リファレンス
Rolling hash / HCPC: 北海道大学競技プログラミングサークル
Rolling Hashについて(survey + 研究) / maspy
code: RollingHash.py
from random import randint
Hmod = 88875394043211781
base = randint(2, Hmod-2)
memo_pow = 1
def rolling_hash(S):
"""
文字列Sのハッシュテーブルを構築
"""
N = len(S)
while len(memo_pow) < N:
memo_pow.append(memo_pow-1 * base % Hmod)
T = 0 * (N + 1)
for i in range(N):
Ti+1 = Ti * base
Ti+1 += ord(Si) # Sが文字列でないならここを変更
Ti+1 %= Hmod
return T
def get_hash(RH, L, R):
"""
RH := ハッシュテーブル
RHL:R (半開区間)のハッシュを取得
"""
ret = RHR - RHL * memo_powR-L
return ret % Hmod