私は「文字列検索アルゴリズム」の解決しようとしていますが、多くのサイトの答えがO(mは複雑(「ナイーブ文字列検索」のようです(N- KMPもO(n)のので、私は間違いなく間違っている、しかしどこ?文字列探索 - 一致する文字列の複雑
必要がありますがありながら、M + 1))、以下の私のALGOの問題何だ、それは、O(n)との最悪の場合の複雑さを持っていますdef find(s1, s2):
size = len(s1)
index = 0
while (index != len(s2)):
if s2[index : index + size] == s1:
print 'Pattern found at index %s'%(index)
index += size
else:
index += 1
だから私はs2[index : index + size] == s1
がOであると仮定していた両方のハッシュが等しい文字列である場合(1)O(N)であり、ここで私の元の質問になり、
- なぜ等しくなければならない、二つの文字列を計算し、比較のハッシュではありません。
- どうやって衝突するのか分かりません。それはハッシュアルゴリズムに依存しません。
MD5
のように既知の改行があります。
あなたは 's2 [index:index + size] == s1'がO(1)であると仮定しています。それは...ですか? – kumardeepakr3
s2 [index:index + size]のハッシュは、O(len(s1))時間よりも短く計算されるでしょうか?ローリングハッシュ(Rabin-Karpと全く同じ)を使ってこれを行うことは可能ですが、あなたは何とかこれを行うべきだと示唆しているようです。 https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithmはこれをカバーしています。 –
@PaulHankin thx、文字列検索が簡単で、まばたきしていると仮定するのは素朴です。長年の研究を読もうとしています。 – garg10may