Chap 5-3. 편집거리 (Edit Distance)
[편집거리 (Edit Distance)] = 삽입 (insert), 삭제 (delete), 대체 (substitute) 연산을 사용하여 스트링(문자열) S를 수정하여 다른 스트링 T로 변환하고자 할 때 필요한 최소의 편집 연산 횟수 즉, 3개의 연산(삽입, 삭제, 대체)을 통해 다른 문자열로 변환이 가능하다. [예시 strong -> stone] strong을 stone으로 바꿔보자 2가지 방법이 가능하다. 방법 1 ) 순서대로 s, t는 그대로 두고 o를 삽입하고 r, o를 삭제한다. n은 그대로 두고 g를 e로 바꾼다. ⇒ 총 4회의 편집 연산을 했다. 방법 2) ‘s’와 ‘t’는 그대로 사용한 후, ‘r’을 삭제하고, ‘o’와 ‘n’을 그대로 사용한 후, ‘g’를 ‘e’로 대체하여, 총 2회의 편집..
Chap 5-1. 0-1 배낭 문제
0, 1 배낭 문제 조건 4kg을 담을 수 있는 배낭 넣을 수 있는 물건 A, B, C가 있다. B의 무게 = 4, 가치 = 30 C의 무게 = 3, 가치 = 20 A의 무게 = 1, 가치 = 15 가장 단순한 방법은 모든 물건의 조합을 시도를 해서 총 가치를 구한 다음에 가장 가치가 높은 경우를 선택하는 것이다. 이렇게 한다면 지수 시간의 시간 복잡도를 갖는 문제이다. 2^n의 경우의 수이다. 이 문제를 (1) 재귀 방법으로 풀 수 있고 (2) DP방법으로도 풀어볼 수 있다. (1) 재귀 방법 #include #define MAX(a, b) ((a) > (b) ? (a) : (b)) int knapSack(int W[], int V[], int n, int c) { if(n 다음 물건으로 넘어감, 배낭..