패턴 검색을 위한 Z 함수
문자열 전체에서 접두사를 비교합니다
패턴 검색을 위한 Z 함수은(는) CoddyKit의 무료 Competitive Programming Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Competitive Programming Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
또 다른 매칭 도구
Z 함수는 패턴 검색에서 KMP를 대신할 수 있는 간결한 방법입니다. 많은 사람이 Z 함수를 더 쉽게 이해하고 구현합니다. ✨
z[i]의 의미
각 인덱스에서 z[i]는 i에서 시작하여 전체 문자열의 접두사와 일치하는 가장 긴 부분 문자열의 길이입니다.
간단한 예시
aabaab에서 z의 값은 0,1,0,3,1,0입니다. 인덱스 3에서는 aab 구간이 접두사와 일치하므로 길이가 3이 됩니다.
Z 박스
지금까지 찾은 가장 오른쪽의 일치 구간인 [l, r] 창을 추적합니다. 이를 이용하면 이전 비교 결과를 재사용할 수 있습니다.
l, r = 0, 0박스 안에서
i가 박스 안에 있을 때는 알려진 z 값을 복사하여 시작점으로 사용하고, 그 값이 박스의 오른쪽 경계를 넘지 않도록 제한합니다.
if i < r:
z[i] = min(r - i, z[i - l])박스 너머로 확장하기
시작점 이후에는 접두사와 일치하는 동안 문자를 하나씩 계속 비교합니다.
while i + z[i] < n and s[z[i]] == s[i + z[i]]:
z[i] += 1박스를 앞으로 이동하기
일치 구간이 더 오른쪽까지 이어지면 l과 r을 갱신하여 이후 인덱스가 그 구간을 재사용할 수 있게 합니다.
if i + z[i] > r:
l, r = i, i + z[i]선형 시간 보장
박스는 오른쪽으로만 이동하므로 전체 작업량은 O(n)입니다. 각 문자가 기여하는 양에는 상한이 있습니다.
Z를 이용한 검색
pattern + sep + text를 이어 붙인 뒤 Z를 실행합니다. 패턴 길이와 같은 z 값이 있으면 일치가 발생한 것입니다.
combined = pattern + chr(0) + text
z = z_function(combined)일치 위치 읽기
Z 배열을 훑으면서 z[i] == len(pattern)인 위치를 찾으면, 텍스트에서 해당 일치가 시작되는 위치를 알 수 있습니다.
if z[i] == len(pattern):
matches.append(i - len(pattern) - 1)Z와 KMP 비교
Z와 KMP는 모두 선형 시간에 실행됩니다. Z는 코드를 작성하기 더 간단한 경우가 많으므로, 훌륭한 대체 도구가 됩니다.
빠른 확인
Z 배열의 의미를 확실히 이해했는지 확인하세요.
복습: Z 함수의 장점
이제 이동하는 박스를 이용해 Z 배열을 만들고, 선형 시간에 검색하며, KMP를 대신할 간결한 방법을 갖추었습니다. 🎯
자주 묻는 질문
“패턴 검색을 위한 Z 함수” 강의는 무료인가요?
네 — “패턴 검색을 위한 Z 함수” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Competitive Programming Academy 강의 전체를 잠금 해제할 수 있습니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“패턴 검색을 위한 Z 함수”에서 뭘 배우나요?
문자열 전체에서 접두사를 비교합니다 브라우저에서 직접 실행하는 실습 코드로 Competitive Programming Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Competitive Programming Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Competitive Programming Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“패턴 검색을 위한 Z 함수” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Competitive Programming Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Competitive Programming Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- KMP 접두사 함수
- 다항식 문자열 해싱
- 패턴 검색을 위한 Z 함수
- 접두사 조회를 위한 트라이