본문 바로가기
CS/알고리즘

Boyer-Moore vs KMP

by lms0806 2024. 6. 25.
728x90
반응형

https://lms0806.tistory.com/210

 

A Fast StringSearching Algorithm 리뷰

해당 논문은 boyer–moore 알고리즘 이라고 불리는 kmp와 비슷한 알고리즘에 대하여 설명하고 있습니다. 보이어무어 알고리즘은 불필요한 것은 건너뛰고, 검색을 빠르게 하자는 것에서 KMP와 유사

lms0806.tistory.com

이전 포스팅에서 보이어-무어에 대해 설명중인 논문에 대해 설명을 했었습니다.

https://lms0806.tistory.com/211

 

JAVA에서의 Boyer-Moore

해당 글은 보이어 무어 알고리즘을 사용하고 있는 JAVA의 내부 코드에 대해 이야기하고자 합니다.Boyer-Moore에 대해서는 해당 글 참조 부탁드립니다.https://lms0806.tistory.com/210 A Fast StringSearching Algorit

lms0806.tistory.com

또한 JAVA에서 어떤 부분에서 boyer-moore가 사용중인지에 대해서도 이야기를 했었습니다.

 

이번 시간에는 boyer-moore와 kmp, java의 내부 라이브러리 함수들을 시간측정을 진행해보았습니다.

 

랜덤 데이터

개수 / String (n) / Pattern (m) 브루트포스 Boyer-Moore KMP String contains String indexOf String lastIndexOf
1,000 / 10,000 / 100 161 50 46 23 16 21
1,000 / 100,000 / 1,000 7,084 99 324 181 172 176
1,000 / 100,000 / 10,000 63,068 107 344 160 160 161
1,000 / 1,000,000 / 10,000 703,791 787 3,032 1,720 1,718 1,735
100,000 / 1,000 / 100 1,179 1,273 411 36 22 179

 

가장 마지막에 찾고자 하는 문자가 있는 경우

개수 / String (n) / Pattern (m) 브루트포스 Boyer-Moore KMP String contains String indexOf String lastIndexOf
1,000 / 10,000 / 100 520 147 157 456 367 2
1,000 / 100,000 / 1,000 23,189 69 1,016 21,000 21,591 7
1,000 / 100,000 / 10,000 194,189 105 1,177 185,896 203,857 20
10,000 / 1,000,000 / 1,000 29,677 348 2,693 44,380 20,145 181
100,000 / 1,000 / 100 2,341 3,766 692 987 861 28

 

추가로, apache의 StringUtils의 contains도 같은 기능을 지원하지만, 내부 소스를 따라가다보면 결과적으로 String의 indexOf 함수를 사용하는 것을 볼 수 있었습니다.

내부 함수들을 타고타고 가다보니 자연스럽게 contains보다 시간이 더 오래 소모되었습니다.

 

해당 테스트를 진행하면서 사용한 KMPboyer-moore 코드는 깃헙에 저장되어 있습니다.

 

Boyer-Moore 알고리즘이 사용중인 곳

 

728x90
반응형

'CS > 알고리즘' 카테고리의 다른 글

Two-Way String-Matching에 대하여  (0) 2024.07.21
rabin-karp  (0) 2024.07.11
C++ 코드를 JAVA로 바꿔보자  (1) 2023.10.10
트리를 활용한 문자열 비교 알고리즘  (0) 2023.08.17
배열 뒤집기 시간 측정  (0) 2023.03.14

댓글