150 likes | 1.3k Views
알고리즘 CHAPTER 10.4~10.5 문자열 매칭. 천주희 wngml1205@kunsan.ac.kr 군산대학교 통계컴퓨터과학과 정보과학기술 연구실 2012.11.15. 목차. KMP 알고리즘 보이어 - 무어 알고리즘. KMP 알고리즘 (1/4). 오토마타 매칭 : 문자열 차례로 훑음 어느 지점을 기준으로 매칭을 성공하지 못해도 그 지점을 기준으로 마지막 몇 개의 부분 문자열이 찾으려는 패턴 문자열의 앞부분과 일치한다면 그 정보 이용. A[ ]. 매칭 실패. P[ ].
E N D
알고리즘CHAPTER 10.4~10.5 문자열 매칭 천주희 wngml1205@kunsan.ac.kr • 군산대학교 통계컴퓨터과학과 정보과학기술 연구실 2012.11.15
목차 KMP 알고리즘 보이어-무어 알고리즘 IST (Information Sciences & Technology) Laboratory
KMP 알고리즘 (1/4) 오토마타 매칭: 문자열 차례로 훑음 어느 지점을 기준으로 매칭을 성공하지 못해도 그 지점을 기준으로 마지막 몇 개의 부분 문자열이 찾으려는 패턴 문자열의 앞부분과 일치한다면 그 정보 이용 A[ ] 매칭 실패 P[ ] • Knuth-Morris-Pratt 알고리즘 • 패턴의 각 위치에 대해 매칭에 실패했을 때 돌아갈 곳을 알려주는 일차원 배열을 준비하고 이를 이용해 텍스트 문자열을 훓어 나감 IST (Information Sciences & Technology) Laboratory
KMP 알고리즘 (2/4) 1 2 3 4 5 6 7 8 9 패턴의 맨 앞의 abc와 실패 직전의 abc는 동일함을 이용 → 실패한 텍스트 문자와 P[4]를 비교 P[ ] π[8] = 4 8 9 10 1 2 3 4 5 6 7 π[ ] → 매칭실패했을 때 돌아갈 곳을 준비 IST (Information Sciences & Technology) Laboratory KMP 알고리즘 예
KMP 알고리즘 (3/4) KMP(A[ ], P[ ]) { preprocessing(P); i ← 1; ▷ 본문 문자열 포인터 j ← 1; ▷ 패턴 문자열 포인터 ▷ n: 배열 A[ ]의 길이, m: 배열 P[ ]의 길이 while (i ≤ n) { if (j = 0 or A[i] = P[j]) then { i++; j++; } elsej ← π[j]; if(j = m+1) then { A[i-m]에서 매치되었음을 알림; j ← π[j]; } } } A[ ] 매칭 실패 P[ ] • 수행시간: Θ(n) i+(i-j) ≤ 2i i+(i-j) ≤ 2i≤ 2n KMP 알고리즘 IST (Information Sciences & Technology) Laboratory
KMP 알고리즘 (4/4) preprocessing(P) { i ← 1; ▷ 본문 문자열 포인터 k ← 0;▷ 패턴 문자열 포인터 • π[1] ←0; while (j ≤ m) { if (k = 0 or A[j] = P[k]) • then { j++; k++; π[j] ←k;} elsek ← π[k]; } } 8 9 10 1 2 3 4 5 6 7 π[ ] • 수행시간: Θ(m) KMP 알고리즘 IST (Information Sciences & Technology) Laboratory
보이어-무어 알고리즘 (1/7) • 개념 • 앞의 알고리즘 공통점 • 텍스트 문자열의 문자를 적어도 한번씩 확인 • 최선의 경우에도 Ω(n) • 보이어-무어 알고리즘 • 텍스트 문자를 다 보지 않아도 됨 • 맨 뒤부터 비교 IST (Information Sciences & Technology) Laboratory
보이어-무어 알고리즘 (2/7) A[ ] P[ ] 다섯 칸 점프! • 상황1 • 텍스트의 b와 패턴의 r을 비교하여 실패 IST (Information Sciences & Technology) Laboratory
보이어-무어 알고리즘 (3/7) A[ ] P[ ] 세 칸 점프! • 상황2 • 텍스트의 i와 패턴의 r을 비교하여 실패 IST (Information Sciences & Technology) Laboratory
보이어-무어 알고리즘 (4/7) 패턴 “tiger”에 대한 점프 정보 패턴 “rational”에 대한 점프 정보 • 보이어-무어-호스풀 알고리즘 점프 정보 IST (Information Sciences & Technology) Laboratory
보이어-무어 알고리즘 (5/7) BoyerMooreHorspool(A[ ], P[ ]) { ▷ n : 배열 A[ ]의 길이, m : 배열 P[ ]의 길이 computeSkip(P, jump); i ← 1; while (i ≤ n − m+1) { j ← m; k ← i + m −1; while ( j > 0 and P[j] = A[k]) { j--; k--; } if (j = 0) then A[i] 자리에서 매칭이 발견되었음을 알림; i ←i + jump[A[i + m − 1]]; } } • 최악의 경우 수행시간: Θ(mn) • 입력에 따라 다르지만 일반적으로 Θ(n)보다 시간이 덜 든다 • 보이어-무어-호스풀 알고리즘 IST (Information Sciences & Technology) Laboratory
보이어-무어 알고리즘 (6/7) 4칸 점프! 불일치 문자 휴리스틱 3칸 점프! 일치 접미부휴리스틱 • 예제1. 일치접미부 휴리스틱과 불일치문자 휴리스틱 중 좋은 것 선택 IST (Information Sciences & Technology) Laboratory
보이어-무어 알고리즘 (7/7) -1칸 점프! 7칸 점프! 불일치 문자 휴리스틱 일치 접미부휴리스틱 • 예제2. 일치접미부 휴리스틱과 불일치문자 휴리스틱 중 좋은 것 선택 IST (Information Sciences & Technology) Laboratory
감사합니다천주희wngml1205@kunsan.ac.kr IST (Information Sciences & Technology) Laboratory