130 likes | 402 Views
알 고 리 즘. Chap 8.4~8.5. 양승혁 Yang_ka@kunsan.ac.kr 군산대학교 통계컴퓨터과학과 정보과학기술 연구실 2012.11.6. 목차. 행렬 곱셈 순서 ( Matrix-chain Multiplication) ( i ⅹ j ) 행렬 ⅹ ( j ⅹ k ) 행렬 문제 알고리즘 재귀적 구현 동적 프로그램 최장 공통 부분순서 ( LCS) 최장 공통 부분순서란 ? 알고리즘 재귀적 구현 동적 프로그램. 행렬 곱셈 순서 (1/5).
E N D
알 고 리 즘 Chap 8.4~8.5 양승혁 Yang_ka@kunsan.ac.kr 군산대학교 통계컴퓨터과학과 정보과학기술 연구실 2012.11.6
목차 • 행렬 곱셈 순서(Matrix-chain Multiplication) • (iⅹj) 행렬 ⅹ (jⅹk) 행렬 문제 • 알고리즘 • 재귀적 구현 • 동적 프로그램 • 최장 공통 부분순서(LCS) • 최장 공통 부분순서란? • 알고리즘 • 재귀적 구현 • 동적 프로그램 IST (Information Sciences & Technology) Laboratory
행렬 곱셈 순서(1/5) • (iⅹj) 행렬ⅹ(j ⅹk) 행렬 문제 • iⅹ j ⅹ k • 29=1ⅹ7+2ⅹ2+3ⅹ6 이런 계산을 i ⅹ k번 수행 • 에 경우 IST (Information Sciences & Technology) Laboratory
행렬 곱셈 순서(2/5) • 알고리즘 • 가능한 모든 순서를 구한 후 그 중에 가장 최적인 순서를 선택 • n개의 행렬을 곱하기 위해 괄호로 묶는 방법 tn: n개의행렬(A1, A2, …, An)을 곱할 수 있는가능한모든순서의 수 tn-1: tn의 부분집합으로서A1을 맨 마지막으로곱하는경우 tn-1 : tn의부분집합으로서An을 맨 마지막으로곱하는경우 IST (Information Sciences & Technology) Laboratory
행렬 곱셈 순서(3/5) cij = i≤ k ≤ j-1 (Ai…Ak)와(Ak+1…Ai)를곱하는비용 (Ai…Ak)를위한최소비용 (Ak+1 …Aj)를위한최소비용 • 최적의 순서 • A1,A2,… An이 각각 p0ⅹp1, p1ⅹp2 ,…,pn-1ⅹpn행렬 • cij: 행렬 Ai, …, Aj의 곱 Ai…Aj를 계산하는 최소 비용 • Ak의 차원: pk-1ⅹpk 0 if i=j min {cik + ck+1, j+pi- 1pk pj} if i<j IST (Information Sciences & Technology) Laboratory
행렬 곱셈 순서(4/5) rMatrixChain(i, j) ▷행렬곱Ai…Aj를 구하는 최소 비용 구하기 { • if (i= j) then return 0; ▷ 행렬이 하나뿐인 경우의 비용은 0 min ← ∞; • fork ← ito j-1 { • q ← rMatrixChain(i, k) + rMatrixChain(k+1, j) + pi-1pkpj ; if (q < min) then min ← q; } return min; } • 재귀적 구현 • 엄청난 중복호출이 발생 IST (Information Sciences & Technology) Laboratory
행렬 곱셈 순서(5/5) matrixChain(i, j) { fori ← 1 ton m[i, i] ← 0; ▷ 행렬이 하나뿐인 경우의 비용은 0 forr ← 1 ton-1 ▷ r: 문제 크기를 결정하는 변수, 문제의 크기 = r+1 fori ← 1 ton-r { j ← i+r; m[i, j] ← min{m[i, k] + m[k+1, j] + pi-1pkpj}; } return m[1, n]; } • 동적 프로그램 • 시간 복잡도 IST (Information Sciences & Technology) Laboratory
최장 공통 부분순서(Longest Common Subsequence) • 정의 • 두 문자열에 공통적으로 존재하는 가장 긴 부분순서 • <bcdb>는 문자열 <abcbdab>의 부분순서 • <abcbdab>와 <bdcaba>에 대해서 <bcba>는 두 문자열에 존재하는 최장 공통 부분순서 • 최적 공통 부분구조 X={x1,x2,...,xm}Y=(y1,y2,...,yn} • xm=yn이면 Xm과 Yn의 LCS의 길이는 Xm-1과 Yn-1의 LCS의 길이 보다 1이 크다 • xm≠ yn이면 Xm과 Yn의 LCS의 길이는 Xm과 Yn-1의 LCS의 길이 와 Xm-1과 Yn의 LCS의 길이 중 큰 것과 같다 • (m,n) 크기의 문제의 해가 (m,n-1) 크기의문제와 (m-1,n)크기의 문제의 해를 포함 IST (Information Sciences & Technology) Laboratory
최장 공통 부분순서(2/5) 0 if m = 0 or n = 0 cm-1, n-1 + 1 if m, n > 0 and xm= yn max{cm-1, n,cm, n-1} if m, n > 0 and xm≠yn cnm= • 성질 X={x1,x2,...,xm}과 Y=(y1,y2,...,yn}, 그리고 Z={z1,z2,..,zk} • Xm= Yn이면Zk= Xm=Yn이고 Zk-1은 Xn-1과 Ym-1의 LCS • Xm!= Yn이고 Zk!= Xm이면 Zk 은 Xm-1과 Yn의 LCS • Xm!= Yn이고Zk!= Yn이면 Zk 은 Xm과 Yn-1의 LCS • Cnm:두문자열Xn= <x1x2…xn>과Ym= <y1y2…ym>의 LCS 길이 IST (Information Sciences & Technology) Laboratory
최장 공통 부분순서(3/5) LCS(m, n) ▷ 두 문자열Xm과 Yn의LCS길이 구하기 { if (m = 0 orn = 0) then return 0; else if (xm= yn) then return LCS(m-1, n-1) + 1; else return max(LCS(m-1, n), LCS(m, n-1)); } • 알고리즘 • 재귀적 구현 • 시간복잡도 • 지수 함수 이상 IST (Information Sciences & Technology) Laboratory
최장 공통 부분순서(4/5) • 엄청난 중복호출이 발생 IST (Information Sciences & Technology) Laboratory
최장 공통 부분순서(5/5) LCS(m, n) ▷ 두 문자열 Xm과 Yn의 LCS 길이 구하기 { fori ← 0 tom C[i, 0] ← 0; forj ← 0 ton C[0, j] ← 0; fori ← 1 tom forj ← 1 ton if (xm= yn) then C[i, j] ← C[i-1, j-1] + 1; else C[i, j] ← max(C[i-1, j], C[i, j-1]); return C[m, n]; } • 동적 프로그램 • 시간 복잡도 IST (Information Sciences & Technology) Laboratory
Thank you Yang_ka@kunsan.ac.kr 군산대학교 정보통계학과 정보과학기술 연구실 2012.01.03 양승혁 Yang_ka@kunsan.ac.kr 군산대학교 통계컴퓨터과학과 정보과학기술 연구실 2012.11.6