쉽게 배우는 알고리즘 10장. 문자열 매칭.

Slides:



Advertisements
Similar presentations
畵龍點睛 물질에 따른 전자파 차단 연구 연지은 ( 조 ) 서은빈 한서현 이의준. 목차 요즘 우리가 일상적으로 사용하는 것에는 전기 로 만들어져 있음 => 양의 전자파가 발생되어 사람의 몸을 훼손 => 전자파 차단 제품에 효능이 보장된 것 X => 다양한 물질로 실험.
Advertisements

스트링 처리 알고리즘. 2 목차 스트링 탐색 알고리즘 – 직선적 알고리즘 –KMP 알고리즘 – 보이어 - 무어 알고리즘 – 라빈 - 카프 알고리즘 패턴 매칭 알고리즘 화일 압축 알고리즘 – 런 - 길이 인코딩 – 가변 - 길이 인코딩 암호화 알고리즘 – 단순한 기법 –
제 1 회 도전 ! 한글 골든벨 2014 년 7 월 12 일 ( 토 ) 주최 : 센다이 한국교육원 후원 : 駐仙台大韓民国総領事館 在日韓国民団宮城県地方本部 韓日觀光交流センター.
윤준혁 (12), 이주연 (13), 박혜원 (14), 안혜경 (15) 허니버터칩으로 알아본 SNS 의 영향 력.
지도교수 : 박진식 교수님 조 원 : 홍승기, 이병용, 백승준, 조근용, 조동현, 한정협, 이상하.
의료자원 규제현황과 개선방향 자원평가실. 의료자원 관리 개요 규제개혁 토론과제.
1 ‘ 우리나라의 주요공업 ’ - 정도웅, 주민혁, 안수진, 백경민, 엄다운, 박경찬 -.
수유부의 약물복용 시 주의점 발표자 조기성. 모유 수유의 장점 모유 수유의 장점은 ? 위장관 질환 발생감소 영아 돌연사 발생감소 아토피 질환 발생감소 정서적 안정.
아동복지 Child welfare 과목명 : 사회복지개론 담당교수 : 장덕희 교수님 제출일 : 2012 년 5 월 10 일 학 번 : 10A3004, 10A3012 이 름:김 샛 별, 최 정 윤 (2 조 )
똘기 : 채 익지 않은 과일. 똘기 소개 일명 발표동아리. 똘기는 발표에 대한 두려움을 가지고 있는 학우들에게 ‘ 자신감 ’ 을 키워줄 수 있도록 하자는 취지에서 만들어졌다. 평소 강의 시간보다 편안하고 자유롭게 발표해 볼 수 있는 기회를 제공함으로써 발표력 향상에 기여하는.
일 시 : (목) 장 소 : 문산종합사회복지관장) 파주시문산종합사회복지관 기관안내.
2013년도 2학기 학습튜터링 O.T.
(4) 우리 나라의 이상과 목표 2. 국가의 중요성과 국가 발전 중학교 2학년 도덕
미국의 미디어교육 신문방송학과 강진구 한인수 곽모란 이명현.
연 합 남 전 도 회 월 례 회 1부 예배- 찬 송 장 다같이 2011년 1월 2일 1부 예배- 찬 송 장 다같이 기 도
PRESENTATION 저온화상이란?
사 업 계 획 2011년 제1호 - 2월 1일 2011 주 안에서 소통하며 화합하고 참여하며 헌신하는 남신도회
VISUAL BASIC 양 계 탁.
공부할 내용 조상들이 살던 곳 자연과 잘 어울리는 한옥 지방에 따라 서로 다른 집의 모양 섬 지방의 집
사랑, 데이트와 성적 자율성 :데이트 성폭력!!! 성폭력예방교육 전문강사 / 여성학 전공 신 순 옥.
퇴계와 율곡의 사회사상 비교 남 일 재 동서대학교 교수/ 정치학 박사 1. 퇴계 이황과 율곡 이이의 약전(略傳)
제3장 사회 복지 발달사.
문헌정보학과, 사서만 있는 줄 아니? 10. Mushroom
1. 근접경호의 개념 경호대상의 신변을 보호하기 위하여 지근거리에서 실시하는 호위활동을 말하며 경호행위의 마지막 보루이다.
서울특별시 식생활종합지원센터 운영 계획 가톨릭대학교 가톨릭중앙의료원 유헬스케어사업단 식생활교육연구센터.
대포나 미사일이 없던 옛날에는 먼 거리에 있는 적의 성을 어떻게 공격했을까?
가족상담 및 치료.
501. 군인들의 세상 502. 민정 이양과 한일회담 이선용.
쌓지 말고 해소하자 이 주휘 이 진영 전 민석 전 혜림.
2015년 하반기 소방교육 자 유 전 공 학 부 (금) 안녕하십니까 자유전공학부 행정실 입니다.
쌍용차 회생계획안을 통한 투기자본(=먹튀자본) 수강과목: 회 계 학 원론 담당교수: 박 성 환 교수님
다항식과 FFT.
아동복지 제9장.
서울 메트로 노조파업 수강과목 : 노사 관계론 담당교수 : 정형진 교수님
9장. 동적 프로그래밍Dynamic Programming (DP)
주요추진업무 1. 제19대 대통령선거 공명선거 추진 행 정 과
예비군 훈련장 약도 ◈ 찾아 가는 길 ◈ (2) 비봉 중,고등학교 (3) 길 건너 제 2819부대 1대대 화성시 예비군 훈련장
창업 계획서 경영학과 이동인.
제13장 장애인 복지.
교육과정과 주요업무.
흡연 예방 보건교육 소중한 우리, 담배로부터 지켜요 서신초등학교.
보육교사 대상 꿈날개 매뉴얼.
글로벌한국사 2강 - 고조선과 단군할아버지- 신화 속 역사 읽기.
Ⅰ. 가족복지 개관 가족복지론 최진령.
패시브하우스 신안산대학교 l 건축과 l 박효동, 박창준, 지예림.
정치개혁의 가능성 논의 권력구조 개편을 통하여 본 -개헌을 통한 정부형태의 변화를 중심으로 [한국정치론] 윤성이 교수님
KMP ALPS 알고리즘 세미나 김태리.
5장 동적계획법 (Dynamic Programming)
커 GO 비 의 to 홈 게임공학과 박혜원.
치료 레크레이션 프로그램 (지적 장애 대상) 과 목: 학 과: 학 번: 이 름: 제 출 일 자 담 당 교 수:
게임 엔진 : 프로젝트 PPT_2 참참참 김 현 원.
동적계획법과 최적화 문제 Dynamic Programming을 사용한 최적화 문제를 해결하는 알고리즘 설계 절차
24시간후 사이다속 닭뼈 & 돼지뼈 하루 지난 사이다속 돼지뼈
제안 목적 고객성향 분석으로 매출 증대 유사업체 분석으로 신상품 홍보 원가요소 분석 및 피드백으로 원가율 관리
청각기관의 구조와 기능2 옥정달.
미술치료의 매체 인종문.
노년기 발달 장안대 행정법률과 세류반 정 오 손
태국 문학 욜라다 왓짜니 싸란차나 팟차라와라이 끼따야펀 르앙다우 타니다.
보건소 사업의 문제점 및 발전방향 예방의학 PK A-라 조.
평생 저축해도 강남 아파트 못산다 학 과 : 회계학과 1학년 B반 과 목 : 회계학원론 담당교수: 박성환 교수님
콘텐츠 디자인 황아현.
자료정제 사용자 교육 (교무업무 부문) 차세대 나이스 구축을 위한 장소: 광주광역시교육과학연구원 대강당 일정
쉽게 배우는 알고리즘 10장. 문자열 매칭
스포츠성공학 이광우 교수님 중등특수교육과 박수현.
1학년 신입생 학부모교실 안내사항 2019년 3월 6일 1학년부장 김희선.
경영학의 상황학파에 대해서… 경제학과 3학년 최준용 회계학과 4학년 진현빈
워밍업 실뭉치 전달게임.
찬양의 힘 – 시 135:1~3.
음파성명학 최종욱.
관광산업에서의 e-CRM 활동에 관한 탐색적 연구
Presentation transcript:

쉽게 배우는 알고리즘 10장. 문자열 매칭

10장. 문자열 매칭 전혀 새로운 아이디어를 갑자기 착상하는 일이 자주 있다. 하지만 그것을 착상하기까지 줄곧 오랜 동안 문제를 생각하고 있다. 오랜 동안 생각한 끝에 갑자기 답을 착상하게 되는 것이다. -라이너스 폴링

학습목표 원시적인 매칭 방법에 깃든 비효율성을 감지할 수 있도록 한다. 오토마타를 이용한 매칭 방법을 이해한다. 라빈-카프 알고리즘의 수치화 과정을 이해한다. KMP 알고리즘을 이해하고, 오토마타를 이용한 방법과 비교해 이점을 이해하도록 한다. 보이어-무어 알고리즘의 개요를 이해하고, 다른 매칭 알고리즘들에 비해 어떤 특장점이 있는지 이해한다.

String Matching 입력 수행 작업 A[1…n]: 텍스트 문자열 P[1…m]: 패턴 문자열 m << n

원시적인 매칭 naiveMatching(A[ ], P[ ]) { ▷ n: 배열 A[ ]의 길이, m: 배열 P[ ]의 길이 for i ← 1 to n-m+1{                                 if (P[1…m] = A[i…i+m-1]) then                  A[i] 자리에서 매칭이 발견되었음을 알린다; } 수행시간: O(mn)

원시적인 매칭의 작동 원리 … … … … A[ ] b o b o y c a t s o a r o p t 1. P[ ] s o 2. s o a r 3. … … … … s o a r 12.

원시적인 매칭이 비효율적인 예 . a b c d a b c d w z a b c d w z a b c d w z a b c d 불일치 A[ ] . a b c d 1. a b c d w z P[ ] 2. a b c d w z a b c d w z 3. 4. a b c d w z 5. a b c d w z

오토마타를 이용한 매칭 오토마타 매칭이 진행된 상태들간의 관계를 오토마타로 표현한다 문제 해결 절차를 상태state의 전이로 나타낸 것 구성 요소: (Q, q0, A, ∑, δ) Q : 상태 집합 Q0 : 시작 상태 A : 목표 상태들의 집합 ∑ : 입력 알파벳 δ : 상태 전이 함수 매칭이 진행된 상태들간의 관계를 오토마타로 표현한다

ababaca를 체크하는 오토마타 S: dvganbbactababaababacabababacaagbk… 1 2 3 4 5 6 1 2 3 4 5 6 7 b b S: dvganbbactababaababacabababacaagbk…

오토마타의 S/W 구현 입력문자 입력문자 상태 상태 a b c d e … z a b c 기타 1 … 1 2 3 4 5 6 7 1 1 2 … 1 2 3 … 2 3 1 4 … 3 4 5 … 4 5 1 4 6 … 5 6 7 … 6 7 1 2 … 7

오토마타를 이용해 매칭을 체크하는 알고리즘 FA-Matcher (A, δ , f ) { ▷ n: 배열 A[ ]의 길이 q ← 0; for i ← 1 to n { q ← δ (q, A[i]); if (q = f ) then A[i-m+1]에서 매칭이 발생했음을 알린다; } 총 수행시간: Θ(n + | ∑ |m)

라빈-카프Rabin-Karp 알고리즘 문자열 패턴을 수치로 바꾸어 문자열의 비교를 수치 비교로 대신한다 수치화 가능한 문자 집합 ∑의 크기에 따라 진수가 결정된다 예: ∑ = {a, b, c, d, e} |∑| = 5 a, b, c, d, e를 각각 0, 1, 2, 3, 4에 대응시킨다 문자열 “cad”를 수치화하면 2*52+0*51+3*50 = 28

수치화 작업의 부담 A[i…i+m-1]에 대응되는 수치의 계산 다행히, m의 크기에 상관없이 아래와 같이 계산할 수 있다 ai = A[i+m-1] + d (A[i+m-2] + d (A[i+m-3] + d (… + d (A[i]))…) Θ(m)의 시간이 든다 그러므로 A[1…n] 전체에 대한 비교는 Θ(mn)이 소요된다 원시적인 매칭에 비해 나은 게 없다 다행히, m의 크기에 상관없이 아래와 같이 계산할 수 있다 ai = d(ai-1 – dm-1A[i-1]) + A[i+m-1] dm-1은 반복 사용되므로 미리 한번만 계산해 두면 된다 곱셈 2회, 덧셈 2회로 충분

수치화를 이용한 매칭의 예 … … e a b a c e b d a c e b d a c e b d a c e b d P[ ] a2= 5(a1-0*54)+2 = 1782 a c e b d … a3=5(a2-2*54)+4 = 2664 a c e b d … a7=5(a6-2*54)+1 = 3001

수치화를 이용해 매칭을 체크하는 알고리즘 basicRabinKarp(A, P, d, q) { p ← 0; a1 ← 0; ▷ n : 배열 A[ ]의 길이, m : 배열 P[ ]의 길이    p ← 0; a1 ← 0;        for i ← 1 to m {           ▷ a1 계산 p ← dp + P[i]; a1 ← da1 + A[i]; } for i ← 1 to n-m+1{               if (i ≠ 1) then ai ← d(ai-1 – dm-1A[i-1]) + A[i+m-1]; if (p = ai) then A[i] 자리에서 매칭이 되었음을 알린다; 총 수행시간: Θ(n)

앞의 알고리즘의 문제점 문자 집합 Σ와 m의 크기에 따라 ai가 매우 커질 수 있다 해결책 심하면 컴퓨터 레지스터의 용량 초과 오버플로우 발생 해결책 나머지 연산modulo을 사용하여 ai의 크기를 제한한다 ai = d(ai-1 – dm-1A[i-1]) + A[i+m-1] 대신 bi = (d(bi-1 – (dm-1 mod q) A[i-1]) + A[i+m-1]) mod q 사용 q를 충분히 큰 소수로 잡되, dq가 레지스터에 수용될 수 있도록 잡는다

나머지 연산을 이용한 매칭의 예 … … e a b a c e b d a c e b d a c e b d a c e b d P[ ] e a b p = (4*54 + 4*53 + 0*52 + 0*51 + 1) mod 113 = 63 A[ ] a c e b d a1= (0*54+2*53+4*52+1*51+1) mod 113 = 17 a c e b d a2= (5(a1-0*(54 mod 113))+2) mod 113 = 87 a c e b d … a3= (5(a2-2*(54 mod 113))+4) mod 113 = 65 a c e b d … a7= (5(a6-2*(54 mod 113))+1) mod 113 = 63

라빈-카프 알고리즘 RabinKarp(A, P, d, q) { p ← 0; b1 ← 0; ▷ n : 배열 A[ ]의 길이, m : 배열 P[ ]의 길이    p ← 0; b1 ← 0;        for i ← 1 to m { ▷ b1 계산 p ← (dp + P[i]) mod q; b1 ← (db1 + A[i]) mod q; } h ← dm-1 mod q; for i ← 1 to n-m+1{               if (i ≠ 1) then bi ← (d(bi-1 – hA[i-1]) + A[i+m-1]) mod q; if (p = bi) then if (P[1…m] = A[i…i+m-1]) then A[i] 자리에서 매칭이 되었음을 알린다; 평균 수행시간: Θ(n)

KMPKnuth-Morris-Pratt 알고리즘 오토마타를 이용한 매칭과 동기가 유사 공통점 매칭에 실패했을 때 돌아갈 상태를 준비해둔다 오토마타를 이용한 매칭보다 준비 작업이 단순하다 A[ ] . a b c d P[ ] a b c d w z a b c d w z

매칭이 실패했을 때 돌아갈 곳 준비 작업 a b c d w z π [8] = 4 1 2 3 4 5 6 7 8 9 P[ ] a b c d w z π [8] = 4 텍스트에서 abcdabc까지는 매치되고, w에서 실패한 상황 패턴의 맨앞의 abc와 실패 직전의 abc는 동일함을 이용할 수 있다 실패한 텍스트 문자와 P[4]를 비교한다 1 2 3 4 5 6 7 8 9 10 π [ ] 1 2 3 4 패턴의 각 위치에 대해 매칭에 실패했을 때 돌아갈 곳을 준비해 둔다 a b c d w z

KMP 알고리즘 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++; }            else j ← π [j]; // A[i] ≠ P[j] if (j = m+1) then {                 A[i-m]에서 매치되었음을 알림;                 j ← π [j];                      }  } 수행시간: Θ(n)

준비 작업 j k π [j] 1 2 3 4 5 6 7 8 1 0 0 a b a b a b c a a b a b a b c a 2 1 1 a b a b a b c a 2 0 1 a b a b a b c a 3 1 1 a b a b a b c a 4 2 2 a b a b a b c a 5 3 3 a b a b a b c a 6 4 4 a b a b a b c a 7 5 5 a b a b a b c a j k π [j] 1 2 3 4 5 6 7 8 7 5 5 a b a b a b c a a b a b a b c a 7 3 5 a b a b a b c a 7 1 5 a b a b a b c a 7 0 5 a b a b a b c a 8 1 1 a b a b a b c a 9 2 2 a b a b a b c a ≠ ≠ ≠

준비 작업 preprocessing(P) { π [1] = 0; j ← 1; k ← 0; while (j ≤ m) {  ▷ m: 배열 P[ ]의 길이                                 if (k = 0 or P[j] = P[k]) then { j++; k++; π [j] ← k;}            else k ← π [k]; } ~11/7/2007

보이어-무어Boyer-Moore 알고리즘 앞의 매칭 알고리즘들의 공통점 텍스트 문자열의 문자를 적어도 한번씩 훑는다 따라서 최선의 경우에도 Ω(n) 보이어-무어 알고리즘은 텍스트 문자를 다 보지 않아도 된다 발상의 전환: 패턴의 오른쪽부터 비교한다

Motivation 상황: 텍스트의 b와 패턴의 r을 비교하여 실패했다 . b t i g e r t i g e r t i g P[ ] t i g e r 다섯칸 한꺼번에 점프! t i g e r 관찰: 패턴에 문자 b가 없으므로 패턴이 텍스트의 b를 통째로 뛰어넘을 수 있다

상황: 텍스트의 i와 패턴의 r을 비교하여 실패했다 . t i g e r A[ ] . t i g e r P[ ] t i g e r 세칸 한꺼번에 점프! t i g e r 관찰: 패턴에서 i가 r의 3번째 왼쪽에 나타나므로 패턴이 3칸을 통째로 움직일 수 있다

점프 정보 준비 패턴 “tiger”에 대한 점프 정보 패턴 “rational”에 대한 점프 정보 오른쪽 끝문자 t i g e 기타 jump 4 3 2 1 5 패턴 “rational”에 대한 점프 정보 오른쪽 끝문자 r a t i o n l 기타 jump 7 6 5 4 3 2 1 8 오른쪽 끝문자 r t i o n a l 기타 jump 7 5 4 3 2 1 8

보이어-무어-호스풀 알고리즘 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)보다 시간이 덜 든다

불일치문자 휴리스틱과 일치접미부 휴리스틱 . a i n e r c a l i n t c a l i n t c a l i n t 4칸 점프! c a l i n t 불일치문자 휴리스틱 3칸 점프! c a l i n t 일치접미부 휴리스틱 4칸 점프 선택! . a i n e r c a l i n t

. a l e r r a t i o n l r a t i o n l r a t i o n l . a l e r r a t i -1칸 점프! 7칸 점프! r a t i o n l 불일치문자 휴리스틱 r a t i o n l 일치접미부 휴리스틱 7칸 점프 선택! . a l e r r a t i o n l

Thank you