KMP ALPS 알고리즘 세미나 2017. 10. 27. 김태리.

Slides:



Advertisements
Similar presentations
Chapter 2. Text Patterns 2.1 ~ 2.3 서울시립대 전자전기컴퓨터공학과 데이터마이닝 연구실 G 노준호.
Advertisements

스트링 처리 알고리즘. 2 목차 스트링 탐색 알고리즘 – 직선적 알고리즘 –KMP 알고리즘 – 보이어 - 무어 알고리즘 – 라빈 - 카프 알고리즘 패턴 매칭 알고리즘 화일 압축 알고리즘 – 런 - 길이 인코딩 – 가변 - 길이 인코딩 암호화 알고리즘 – 단순한 기법 –
Indent Style, Recursive Function 전자계산입문 2009/03/27.
어서와 Java는 처음이지! 제3장선택과 반복.
Computer Network Lab. Keimyung University
15 장. 알고리즘의 설계 알고리즘 설계 학습목표 기본 패턴 패턴의 한계점 일곱 가지 패턴의 알고리즘 설계 기법을 이해한다.
VISUAL BASIC 양 계 탁.
Maximum Flow.
Applied Electronic Circuit #5
쉽게 배우는 알고리즘 10장. 문자열 매칭.
제 1장 C 언어의 소개.
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
시스템 생명 주기(System Life Cycle)(1/2)
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 1 강원대학교 컴퓨터과학전공 문양세.
다항식과 FFT.
Dynamic Programming.
제7장 제어구조 I – 식과 문장.
Discrete Math II Howon Kim
쉽게 배우는 알고리즘 3장. 정렬Sorting
4장: 자료형과 수식.
시스템 생명 주기(System Life Cycle)(1/2)
제2절 법인세의 계산구조와 세무조정 1. 각 사업연도소득에 대한 법인세 계산구조 회계와 사회 결산서상 당기순이익
3장 (2) 구문과 의미론 순천향대학교 컴퓨터공학과 하상호.
자료구조: CHAP 7(3) 트리 순천향대학교 컴퓨터공학과 하 상 호.
자료구조: CHAP 7 이진 탐색 트리 순천향대학교 컴퓨터공학과 하 상 호.
7장. 셸 스크립트 프로그래밍.
Dynamic Programming.
Ch. 10 Algorithm Efficiency & Sorting
Ch. 10 Algorithm Efficiency & Sorting
Internet Computing KUT Youn-Hee Han
(Interpolation Values)
6장 연산 장치 6.1 개요 6.2 연산장치의 구성요소 6.3 처리기 6.4 기타 연산장치.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
[INA240] Data Structures and Practice
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 년 봄학기
Dynamic Programming.
제어문 & 반복문 C스터디 2주차.
4장 - PHP의 표현식과 흐름 제어-.
선택 정렬 #define SWAP(x, y, t) {(t) = (x); (x) = (y); (y) = (t);}
Regular Expression 1 Powerful pattern matching with regular expression to a string while () { if ( /ab*c/ ) { print $_; } } substitute operator s/abc*c/def/;
Java의 정석 제 4 장 조건문과 반복문 Java 정석 남궁성 강의
스케줄링 (Scheduling) 시스템 내부시간(time in the system): 스케줄링 문제
6장 콘 셸 뇌를 자극하는 Solaris Bible.
3. 백터해석(Kinematic Analysis using Vector)
자바 5.0 프로그래밍.
Discrete Math II Howon Kim
U N I X 창원대학교 전자계산학과 김병찬.
작성일 참고서적 – Programing Game AI by Example
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
C언어 응용 제 15 주 검색.
C 코드최적화 세명대학교 AI연구실 양승조.
C언어 프로그래밍의 이해 Ch05. 명령문.
CHAP 12 : 탐색.
알고리즘의 분석(analysis) 공간적 효율성(Space Efficiency)과 시간적 효율성(Time Efficiency)
Regular Expression 1 Powerful pattern matching with regular expression to a string while () { if ( /ab*c/ ) { print $_; } } substitute operator s/abc*c/def/;
Internet Computing KUT Youn-Hee Han
점화와 응용 (Recurrence and Its Applications)
코딩체험교실 아두이노 로봇 코딩 4차산업기술 체험 (SW코딩/자율주행기술).
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
(제작자: 임현수)모둠:임현수,유시연,유한민
탐색 선형 탐색, 이진 탐색, 이진 탐색 트리.
아두이노 프로그래밍 4일차 – Part1 모바일 로봇 강사: 김영준 목원대학교 겸임교수
쉽게 배우는 알고리즘 10장. 문자열 매칭
알고리즘의 분석(analysis) 공간적 효율성(Space Efficiency)과 시간적 효율성(Time Efficiency)
성전기공식(안) 식 순 1. 기공미사 2. 기 공 식 3. 축 하 연 천주교 수원교구 퇴촌성당.
8단계 3층을 완성한다 Case 1 Case 2 Case 3 Case 4
PHP 기초문법 PHP를 공부하는데 있어 가장 기초가 되는 PHP기초문법에 대해서 배워 봅니다.
알고리즘의 분석(analysis) 공간적 효율성(Space Efficiency)과 시간적 효율성(Time Efficiency)
Presentation transcript:

KMP ALPS 알고리즘 세미나 2017. 10. 27. 김태리

Pattern Matching Problem Given strings text T and patten P, find a position of a substring of T equal to P. text T a b c d pattern P a b c **string : a sequence of characters JTKIM

Brute-Force Pattern Matching left-to-right T의 제일 앞에서 시작, 각 shift에 대하여 모두 비교 시행 i=0 a b c d i+j j : 0 to m-1 a b c JTKIM

Brute-Force Pattern Matching left-to-right T의 제일 앞에서 시작, 각 shift에 대하여 모두 비교 시행 i=1 a b c d i+j j : 0 to m-1 a b c JTKIM

Brute-Force Pattern Matching left-to-right T의 제일 앞에서 시작, 각 shift에 대하여 모두 비교 시행 i=2 a b c d i+j j : 0 to m-1 a b c JTKIM

Brute-Force Pattern Matching left-to-right T의 제일 앞에서 시작, 각 shift에 대하여 모두 비교 시행 i=n-m a b c d i+j j : 0 to m-1 a b c JTKIM

Brute-Force Pattern Matching left-to-right T의 제일 앞에서 시작, 각 shift에 대하여 모두 비교 시행 1 2 3 4 5 6 7 8 9 10 11 12 n <- size of text T m <- size of pattern P   for i <- 0 to n-m     j <- 0     while j < m and T[i+j] = P[j]         j <- j+1     if j = m         return i    // match at i     else          break while loop    // mismatch return -1    // no match anywhere O(nm) n: size of T, m: size of P worst case? T = aaa…ah P = aaah JTKIM

KMP (Knuth-Morris-Pratt) 앞과 같이 left-to-right 보완: shift를 더 intelligently! DP mismatch 발생 시- 이동가능한 최대로 이동하여 불필요한 comparison을 줄인다 largest prefix of P[0,j] that is a suffix of P[1,j] 찾는 것: 실패함수 Failure Function String Matching a b c a b j a b F(j-1) JTKIM

Failure Function String Matching KMP (Knuth-Morris-Pratt) Failure Function String Matching JTKIM

1. Failure Function 실패함수 pattern P에 대해 전처리를 실시 j=0 은 0, j=1부터 진행 F(j) :the size of the largest prefix of P[0,j] that is also a suffix of P[1,j] j 1 2 3 4 5 P[j] a b c F(j) JTKIM

1. Failure Function 실패함수 j 1 2 3 4 5 P[j] a b c F(j) 1 1 2 6 7 8 9 10 11 12 13 14 15 16 17 /*FailureFunction(P)*/ m <- size of pattern P F[0] <- 0 i <- 1 j <- 0   while i < m     if P[i] = P[j]   //matched j+1 characters         F[i] <- j+1         i <- i+1         j <- j+1     else if j>0 then  //use failureFunction to shift P         j <- F[j-1]     else             //no match         F[i] <- 0         i <- i+1      j 1 2 3 4 5 P[j] a b c F(j) 1 1 2 Time Complexity: O(m) 각 while loop i 는 1씩 증가 또는 shift amount i-j 최소 1씩 증가(F(j-1)<j) JTKIM

mismatch (P[j] != T[i]) 발생 시 2. String Matching a b c a b 1 a 2 c 3 a 4 b a b c mismatch (P[j] != T[i]) 발생 시 j  F(j-1) j 1 2 3 4 5 P[j] a b c F(j) JTKIM

mismatch (P[j] != T[i]) 발생 시 2. String Matching a b c 1 2 3 4 b a b c a b c mismatch (P[j] != T[i]) 발생 시 j  F(j-1) j 1 2 3 4 5 P[j] a b c F(j) JTKIM

mismatch (P[j] != T[i]) 발생 시 2. String Matching a b c 1 2 3 4 a b 1 a 2 c 3 a a b c a b c a b c mismatch (P[j] != T[i]) 발생 시 j  F(j-1) j 1 2 3 4 5 P[j] a b c F(j) JTKIM

mismatch (P[j] != T[i]) 발생 시 2. String Matching a b c 1 2 3 4 a a b c a b c a b c a b c mismatch (P[j] != T[i]) 발생 시 j  F(j-1) j 1 2 3 4 5 P[j] a b c F(j) JTKIM

2. String Matching a b c 1 2 3 4 a b 1 a 2 c 3 a 4 b 5 a b c a b c a b 1 2 3 4 a b 1 a 2 c 3 a 4 b 5 a b c a b c a b c a b c a b c j 1 2 3 4 5 P[j] a b c F(j) JTKIM

2. String Matching a b c 1 2 3 4 a 4 b 5 a 2 c a b c a b c j 1 2 3 4 5 1 2 3 4 a 4 b 5 a 2 c a b c a b c j 1 2 3 4 5 P[j] a b c F(j) JTKIM

2. String Matching failure func과 유사 각 while loop i 는 1씩 증가 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /*KMP(T,P)*/ F<-failureFunction(P) i<-0 j<-0 while i<n     if T[i] = P[j]         if j=m-1             return i-j //match pos         else              i<-i+1             j<-j+1     else         if j>0             j<-F[j-1]         else   return -1    //no match failure func과 유사 각 while loop i 는 1씩 증가 또는, i-j (shift amount) 최소 1씩 증가  O(n) 따라서, O(n+m) JTKIM

BOJ 1786 ‘찾기’ https://www.acmicpc.net/problem/1786 BOJ 5525 ‘IOIOI’ https://www.acmicpc.net/problem/5525 KMP 문제모음 https://www.acmicpc.net/problem/tag/KMP JTKIM

http://blog.myungwoo.kr/101 http://bowbowbow.tistory.com/6 JTKIM