5장 동적계획법 (Dynamic Programming)

Slides:



Advertisements
Similar presentations
오케이굿맨 비뇨기과 개원 사업계획서 오케이굿맨 비뇨기과 개원 사업계획서. 제 1 장 : 사업 개요제 2 장 : 병원 선정제 3 장 : 인력 계획제 4 장 : 진료 계획 제 5 장 : 마케팅 계획제 6 장 : 수익성 분석제 7 장 : 투자계획 및 자금계획.
Advertisements

최적화 문제 해결 현대 생산  운영관리 부산대학교 산업대학원 2012 년 2 학기 하병현.
직군직종직 무 경영관리 인 사인 사 인사기획, 정원관리, 평가 / 승진, 급여관리, 노무총괄, 교육, 후생기획 총 무총 무 법규 / 규정관리, 관재, 총무관리, 의전, 복지후생지원, 보안 재 경재 경 세무회계, 일반회계, 자금관리, 자금출납, 채권관리 전 산전 산 전산기획.
제 1 회 도전 ! 한글 골든벨 2014 년 7 월 12 일 ( 토 ) 주최 : 센다이 한국교육원 후원 : 駐仙台大韓民国総領事館 在日韓国民団宮城県地方本部 韓日觀光交流センター.
아프리카 TV BJ 양띵 5-1 양덕 류문옥 [ 눙곰♡ ] 목차 양띵에 대하여 양띵의 BJ 활동 양띵과 고멤들 고정멤버.
제 6 장 네트워크 모형 (Network Model)
2015 헤럴드 펀드대상 2015년 10월14일 헤럴드경제 금융투자부.
7.8 압전성, 강유전성, 초전성 현상학 압전성 결정에 기계적인 압력을 줄 때 전기분극(또는 전계) ,
매장 음악/안내방송 제안서.
행 렬.
15 장. 알고리즘의 설계 알고리즘 설계 학습목표 기본 패턴 패턴의 한계점 일곱 가지 패턴의 알고리즘 설계 기법을 이해한다.
4월 뇌교육 행사 안내문 사랑합니다. 일정안내 요일 프로그램 시간 / 장소 비 고
오존층 파괴의 실태와 영향 김지수 오선아 조은서 미토콘드리아 조.
컴퓨터 개론 및 실습 강의 9.
일본노인의료시설연수 치바소우센병원 – 교외형 노인병원 동경도리하빌리테이션병원 – 재활병원 미츠이광양원 – 노인복지시설
쉽게 배우는 알고리즘 10장. 문자열 매칭.
2017 법인관련 개정세법 곽장미 세무사.
무역KEYNOTE 중·고등학생을 위한.
수치해석 (Numerical Analysis)
제 2 장 배열과 스트링.
10장 정렬.
Ch.04 Greedy Method (탐욕적 방법)
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
8장. 동적 프로그래밍Dynamic Programming (DP)
CHAP 10 : 그래프 C로 쉽게 풀어쓴 자료구조 생능출판사 학기 데이터구조.
CHAP 10:그래프 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
CHAP 10 : 그래프 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 62).
제 6 장 그래프.
쉽게 배우는 알고리즘 9장. 그래프 알고리즘.
Dynamic Programming.
Data structures 02.3:programming recursive functions
알고리즘(Algorithm) – Greedy Method (탐욕적 방법)
10장. 그래프 알고리즘.
9장. 동적 프로그래밍Dynamic Programming (DP)
예비군 훈련장 약도 ◈ 찾아 가는 길 ◈ (2) 비봉 중,고등학교 (3) 길 건너 제 2819부대 1대대 화성시 예비군 훈련장
제 5 장 근 궤적 법.
창업 계획서 경영학과 이동인.
친구와 함께 멋진 과학 탐구를 - 심화 수업 준비를 위한 놀이와 대화 -
동적 계획(Dynamic Programming)
Supplier V-GLONETS 세관신고물품 납품 관리 사용자 매뉴얼
자전거를 배우려면 안장에 올라가 페달을 밟아라.
Ch.03 Dynamic Programming (동적 프로그래밍 or 동적 계획법)
제 7 장 정수계획법 정수계획법의 모형화 정수계획법의 해법 분단탐색법 정수계획법 적용사례.
2010년 제12회 가을같이 전시회 O OO 네 가족 “우리집”(전) LOVE HOUSE 구립 수유1동어린이집.
Dynamic Programming.
관계 기본 개념 관계의 표현 관계의 성질 관계의 연산 관계의 폐포 동치 관계 부분순서 관계.
그래프의 용어 알고리즘 수업자료 김정현.
지적재조사 홍보컨텐츠 개발현황 브랜드 네임 심볼마크 슬로건.
동적계획법과 최적화 문제 Dynamic Programming을 사용한 최적화 문제를 해결하는 알고리즘 설계 절차
2010년 연말정산 교육자료 센터운영팀 인사파트
알고리즘의 분석(analysis) 공간적 효율성(Space Efficiency)과 시간적 효율성(Time Efficiency)
24시간후 사이다속 닭뼈 & 돼지뼈 하루 지난 사이다속 돼지뼈
adopted from KNK C Programming : A Modern Approach
마을기업 레인메이커협동조합 방문일자 : 조 : 문화자, 강인숙, 윤지영, 이제언.
데이터 구조 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
CHAP 10 : 그래프.
이번엔 핵엔슬래시 최명근.
Cartoonist Festival.
알고리즘 강의 슬라이드 2 분할정복 제 2 장 분할정복 도경구역, 알고리즘, 사이텍미디어, 1999.
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
미세먼지 실험 성동초등학교 이도은.
알고리즘의 분석(analysis) 공간적 효율성(Space Efficiency)과 시간적 효율성(Time Efficiency)
알고리즘(Algorithm) – Divide and Conquer (분할정복)
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
4. 분자 상호 작용의 네트워크 분석 4.1 네트워크 표현과 계산
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
Traditional Methods – Part 1
알고리즘의 분석(analysis) 공간적 효율성(Space Efficiency)과 시간적 효율성(Time Efficiency)
Report #3- 문제 1 Set(집합) 추상 데이터 타입을 정의하고, 다음과 같은 연산자들을 포함시켜라. 여기서 S, S1, S2는 집합을 나타내고, i는 집합 원소를 나타낸다. 연산 의미 create() Return {} insert(S, i) If i є S then.
Presentation transcript:

5장 동적계획법 (Dynamic Programming)

7.5 두 문자열 매칭 문제 예: X = photograph, Y = tomography 두 스트링 X = x1 x2 x3…xm과 Y = y1 y2 … yn에 대하여 가장 길이가 긴 공통의 부분스트링(substring)을 구하라.. 예: X = photograph, Y = tomography X와 Y의 가장 길이가 긴 공통의 부분 스트링: ograph 부분 문제 : X의 xi와 Y의 yj에서 끝나는 가장 길이가 긴 공통의 부분 스트링을 찾아라 부분문제 최적 해의 목적함수 length[i][j] = X의 xi와 Y의 yj에서 끝나는 부분 스트링으로서 가장 길이가 긴 공통의 부분 스트링의 길이 주어진 문제의 최적해 목적함수: min {length[i][j]} 1im,1jn 부분문제 최적 해의 목적함수의 재귀적 정의: length[i][j] = length[i-1][j-1] + 1 if xi = yj otherwise 시간복잡도 O(mn) int bin(int n, int k) { if (k == 0 || n == k) return 1; else return bin(n-1, k-1) + bin(n-1, k); }

7.6 두 문자열의 유사도 (Global alignment) 두 문자열 A = a1 a2 … am과 B = b1b2…bn에 대하여 A와 B의 유사도를 구하여라.  공백을 넣어서 A와 B를 맞추는 방법(alignment)의 점수: 대응하는 모든 두 문자에 대한 점수의 총합 (대응하는 두 문자가 같을 때 점수: 1 (s1), 대응하는 두 문자가 다를 때 점수: –1 (s2), 공백과 문자가 대응할 때 점수: –1 (s3))  두 문자열 A와 B의 유사도: A와 B를 가장 잘 맞출 때의 점수 예 A = abbc , B = babb 방법 1) a b b c 방법 2) - a b b c b a b b b a b b – 점수: -2 점수: 1 int bin(int n, int k) { if (k == 0 || n == k) return 1; else return bin(n-1, k-1) + bin(n-1, k); }

부분 문제: Ai = a1a2…ai, Bj = b1b2…bj의 유사도를 구하라. 부분문제 최적 해의 목적함수: C[i][j]: Ai 와 Bj의 유사도 주어진 문제의 최적해 목적함수: C[m][n] 부분문제 최적 해의 목적함수의 재귀적 정의: C[i][j] = min C[i-1][j] - 1 (ai에 공백을 대응) C[i][ j-1] - 1 (bj에 공백을 대응) C[i-1][j-1] + x[i][j] (ai 와 bj를 대응)   여기서, x[i][j] = 1 if ai = bj -1 if ai  bj j i i 시간복잡도: O(mn)

  예 b a -1 -2 -3 -4 -5 1 2 c b a D L c D: 대각선 U:위 L:왼쪽 i  

7.7 유사한 부분문자열 찾기 (Local alignment) 두 문자열 P = p1 p2 … pm과 T = t1t2 …tn에 대하여 T의 부분문자열로서 P와 가장 유사한 것을 찾아라. 예 A = abcbcbababddcd , B = babbc int bin(int n, int k) { if (k == 0 || n == k) return 1; else return bin(n-1, k-1) + bin(n-1, k); }

t1t2….tj의 tj에서 끝나는 부분문자열로서 p1p2…pi와 가장 유사한 문자열을 찾아라 부분문제 최적 해의 목적함수 부분문제: t1t2….tj의 tj에서 끝나는 부분문자열로서 p1p2…pi와 가장 유사한 문자열을 찾아라 부분문제 최적 해의 목적함수 C[i][j] = tj에서 끝나는 부분문자열 중 p1p2…pi와 최대 유사도 주어진 문제의 최적 해 목적함수: min1im C[m][i] 부분문제 최적 해의 목적함수의 재귀적 정의: C[i][j] = min C[i-1][j] - 1 (pi에 공백을 대응) C[i][ j-1] - 1 (tj에 공백을 대응) C[i-1][j-1] + x[i][j] (pi 와 tj를 대응) 여기서, x[i][j] = 1 if pi = tj -1 if pi  tj int bin(int n, int k) { if (k == 0 || n == k) return 1; else return bin(n-1, k-1) + bin(n-1, k); } 시간복잡도: O(mn)

7.8 그래프에서 모든 두 정점 사이의 최단경로찾기 그래프 G = (V,E)에서 모든 두 정점 i, j에 대하여 i로부터 j까지 가는 최단 경로를 찾아라. 즉, n  n 행렬 D를 구하라: (정점들은 1부터 n까지 번호가 붙여져 있다고 가정) D[i][j]:정점 i에서 정점 j까지 가는 최단경로의 길이  부분 문제: 그래프에서 모든 vertex u, v에 대하여 k보다 같거나 작은 vertex들을 통하여 u로 부터 v까지 가는 최단 경로를 구하라.  부분문제 최적해의 목적함수 행렬 Ak: Ak[i][j]: k보다 같거나 작은 vertex들을 통하여 vertex i로부터 vertex j까지 가는 최단경로의 길이 주어진 문제의 최적해의 목적함수 행렬 An 부분문제 최적 해의 목적함수의 재귀적 정의: Ak에 대한 recurrence relation Ak[i][j] = min {Ak-1 [i][j], Ak-1 [i][k] + Ak-1 [k][j]} A0 : 인접 비용행렬(Adjacency Cost Matrix) int bin(int n, int k) { if (k == 0 || n == k) return 1; else return bin(n-1, k-1) + bin(n-1, k); }

7.9 그래프에서 transitive closure 찾기 그래프 G = (V,E)에서 모든 두 정점 i, j에 대하여 i로부터 j까지 가는 경로의 존재 유무를 구하라. 즉, n  n 행렬 T를 구하라: (정점들은 1부터 n까지 번호가 붙여져 있다고 가정) T[i][j] = 1, if there is a path from vertex i to vertex j = 0. otherwise  부분문제: 정점 i로부터 정점 j까지 k보다 같거나 작은 정점들을 (중간 정점들로) 지나면서 i로부터 j까지 가는 경로의 존재 유무를 구하라. 즉 n  n 행렬 Ak를 구하라. Ak[i][j] = 1, 정점 u로부터 정점 v까지 k보다 같거나 작은 정점들을 지나면서 u로부터 v까지 가는 경로가 있으면 = 0. 그렇지 않으면 A0: 인접행렬 주어진 문제의 해: An[i][j] 부분문제 해의 재귀적 정의: Ak[i][j] = Ak-1[i][j] or (Ak-1[i][k] and Ak-1[k][j] ) int bin(int n, int k) { if (k == 0 || n == k) return 1; else return bin(n-1, k-1) + bin(n-1, k); }