CYK Algorithm

youngwiki
Pinkgo (토론 | 기여)님의 2025년 10월 26일 (일) 02:09 판 (새 문서: 분류:계산 이론 개론 분류:컴퓨터 공학 상위 문서: Context-Free Languages ==개요== CNF으로 변환된 문법을 기반으로, 주어진 문자열이 언어 <math>L</math>에 속하는지를 결정론적으로(deterministic) 판단할 수 있다. 이때 recognizer라는 개념이 등장하는데, recognizer는 문자열 <math>w</math>를 입력받아, 그 문자열이 언어 <math>L</math>에 속하는...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

상위 문서: Context-Free Languages

개요

CNF으로 변환된 문법을 기반으로, 주어진 문자열이 언어 L에 속하는지를 결정론적으로(deterministic) 판단할 수 있다. 이때 recognizer라는 개념이 등장하는데, recognizer는 문자열 w를 입력받아, 그 문자열이 언어 L에 속하는지 여부를 판별하는 알고리즘이다. 이때 아래와 같이 수식이 정의된다:

  • L=L(G)[1]
  • w=w1w2wn
  • D(i,l,A)=trueA*wiwi+1wi+l1[2]

즉, 위에서 D(i,l,A)은 "비단말 Aw의 특정 구간을 유도할 수 있는가?"를 기록하는 boolean 테이블이다. 아래는 D(i,l,A)가 true가 되는 두가지 경우이다:

  1. 문법에 규칙 Aa가 존재하는 경우
    • 입력 문자열의 i번째 문자가 a이며 l=1
  2. 문법에 규칙 ABC이 존재하는 경우, 어떤 분할점 k(1k<l)에 아래 두 조건이 모두 참
    • D(i,k,B)
    • D(i+k,lk,C)

즉, A가 길이 l의 부분문자열을 만들 수 있으려면 좌측 비단말 B가 앞쪽 부분, 우측 비단말 C가 뒷부분을 생성할 수 있어야 한다. 이때 아래와 같은 명제가 성립한다:

wL(w=ϵSϵ)D(1,|w|,S)

CYK(Cocke–Younger–Kasami) 알고리즘은 위 명제를 바탕으로 CFL(Context-Free Language)를 인식하기 위한 동적 프로그래밍 기반의 알고리즘이다.

각주

  1. 즉, L이 생성하는 언어를 의미한다.
  2. 이는 비단말 Aw의 i번째 문자부터 길이 l만큼의 부분 문자열을 생성할 수 있으면 true라는 의미이다.