내가'문자열 검색 알고리즘'에 대한 해결하기 위해 노력하고 있지만, 많은 사이트의 답변 O (m 복잡한 ('나이브 문자열 검색' 것 같다 (N- KMP도 O (n)이 따라서 확실히 잘못된이어야 가지고 있지만 어디?문자열 검색 알고리즘 - 일치하는 문자열의 복잡성
동안 아래에있는 내 너 한테의 문제 무엇 m + 1))은, 그것은, 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