나는 가장 빠른 문자열 검색 알고리즘 인 얼마 동안 붙어있어 많은 의견을 들었지만 결국 확실하지 않습니다.
어떤 사람들은 가장 빠른 알고리즘이 Boyer-Moore이고 Knuth-Morris-Pratt가 실제로 더 빠르다는 말을 들었습니다.
나는 둘 다에 대한 복잡성을 찾았지만 대부분 동일하게 보인다 O(n+m)
. 최악의 시나리오에서 Boyer-Moore O(nm)
는 O (m + 2 * n)를 가진 Knuth-Morris-Pratt와 비교할 때 복잡함 을 발견했습니다 . 여기서 n은 텍스트 길이이고 m은 패턴 길이입니다.
내가 아는 한 Boyer-Moore는 Galil Rule을 사용한다면 최악의 경우를 가지고 있습니다.
내 질문은 실제로 가장 빠른 문자열 검색 알고리즘입니다 (이 질문에는 Boyer-Moore 및 Knuth-Morris-Pratt뿐만 아니라 가능한 모든 스팅 알고리즘이 포함됩니다).
편집 : 이 답변 으로 인해
내가 정확히 찾고있는 것은 :
텍스트 주어 T
와 패턴 P
내가 모든 모습 찾아야 P
의를 T
.
또한 P와 T의 길이는 시작 [1,2 000 000]
이며 프로그램은 0.15 초 미만으로 실행되어야합니다.
KMP와 Rabin-Karp 가이 문제에 대해 100 % 점수를 얻는 데 충분하다는 것을 알고 있지만 Boyer-Moore를 구현하고 싶었습니다. 이 유형의 패턴 검색에 가장 적합한 것은 무엇입니까?