저는 현재 패턴 매칭 알고리즘에 대해 배우고 있으며이 두 알고리즘을 보았습니다. I는하기 일반 아이디어 가지고언제 BOYER-MOORE보다 KMP를 사용 하시겠습니까
KMP
- 는
- 가 시프트 장애 배열을 사용하여 좌우로 텍스트를 비교를 지능적
- 이 m은의 길이 O (m)를 얻어 패턴은
- 공백
- 가 O (m)에 걸리는 결함 어레이를 계산하는 문자열
BM
- 는
- 나쁜 캐릭터가 점프 사용 마지막 문자에서 패턴을 비교하여 좋은 접미사는
- 는 O (m + 알파벳의 크기)
- 는 O (m + 크기 소요 테이블을 계산하는 데 걸리는 점프 알파벳), 공간
- 는
나는 다음과 같은 숨어 우연히 검색 O (n)이 있지만, 일반적으로 더 소요 우리는 많은 다른 텍스트에서 반복적으로 같은 패턴 검색하려면
크 누스 - 모리스 - 프랫 (KMP) 알고리즘은 좋은 선택이다 (참 또는 거짓)이 질문에 트리거 estion.
그래서 전제가 다른 텍스트에서 알고리즘을 실행할 때마다 전처리가 O (n)인데 BM의 경우 O (n + 알파벳) 인 이유만으로 답이 사실이라고 생각합니다. 그러나 알고리즘이 다시 실행될 때마다 새 테이블이 다시 계산된다는 올바른 가정을하고 있는지 확실하지 않습니다. 왜냐하면 텍스트가 항상 영어의 알파벳에 속한다고 말하기 때문입니다. 한 번만 테이블을 계산하고 테이블을 재사용하면됩니다. 결국이 질문에 대한 대답은 알고리즘이 모두 동일한 알파벳에 포함 된 텍스트 나 다른 텍스트에 영향을 미칠 수 있다는 사실에 달려 있습니까?
많은 정보가 여기에 있습니다. http://stackoverflow.com/q/12656160/56778 및 기타 SO 게시물 [kmp vs boyer-moore]에 대한 Google 검색을 수행하십시오. –
@JimMischel 나는 그 포스트를 이미 보았다. 그러나 그것은 나의 질문의 주요 부분에 직접 응답하지 않는다. 그리고 나는 이미 그것을 Google에 시도했다 – Eric
이것은 정확하게 내가 찾고있는 것이다. 어떤 도움을 주시면 감사하겠습니다. –