Algorithm/String 2

[Algorithm] Z 알고리즘 with JAVA

들어가며문자열 관련 알고리즘에는 일반적으로 검색이나 비교&정렬과 관련된 것이 많습니다. 대표적으로 KMP, Boyer-Moore, Rabin-Karp 등이 있습니다. 이번에 소개할 알고리즘은 패턴 매칭의 Z 알고리즘인데 문자열을 검색하기 좋은 알고리즘입니다. 이번 글에선 간간히 KMP 알고리즘도 언급되므로 원활한 이해를 위해선 아래의 KMP 알고리즘도 읽어보시는 것을 추천합니다. [Algorithm] KMP 알고리즘 with JAVA들어가며긴 글에서 주어진 패턴의 문자열을 검색할 때 가장 구현이 쉬운 방식은 text와 pattern이 주어졌을 때 인덱스를 각각 비교하는 방식(=브루트 포스)입니다. 길이 N인 text를 길이 M만큼의 patterjundyu.tistory.com  Z - AlgorithmZ..

Algorithm/String 2025.02.21

[Algorithm] KMP 알고리즘 with JAVA

들어가며긴 글에서 주어진 패턴의 문자열을 검색할 때 가장 구현이 쉬운 방식은 text와 pattern이 주어졌을 때 인덱스를 각각 비교하는 방식(=브루트 포스)입니다. 길이 N인 text를 길이 M만큼의 pattern과 비교하기 때문에 시간 복잡도는 O(N*M) 입니다. 이런 방식은 text의 길이가 10만이고 pattern의 길이가 1000인 경우 시간 복잡도는 1억으로 급격히 커지는 것을 알 수 있습니다. 이런 시간복잡도 문제를 해결하기 위해 만들어진 알고리즘은 대표적으로 KMP와 Rabin-Karp가 있습니다. KMP는 단지 비교 횟수를 줄임으로써 시간복잡도 문제를 개선했고, Rabin-Karp는 해시를 이용해서 일치하는 pattern을 찾는 일종의 Rolling-Hash 방식입니다. 이번 글에서는..

Algorithm/String 2024.12.10