Q&A
- 동적 프로그래밍 : 테이블을 만들어놓고 문제에 맞게 계속 꺼내서 사용하는 방식 → 테이블을 만드는 것은 오래 걸리지만, 한번 만들어놓으면 꺼내서 사용하는 것은 오래 걸리지 않는다.
- 행렬끼리의 곱의 결과값은 같지만, compute하는 과정에서 시간 복잡도 차이가 많이 발생한다.
- 2번 문제는 dab+dbc < abc + dac되려면 양변을 abcd로 나누면
- 1/a + 1/c < 1/d +1/b → 4번이 정답
- LCS에 대한 테이블을 계산해놓고 테이블에 해당하는 숫자가 LCS의 길이가 된다.
- 동적 프로그래밍은 Recursion을 통해 구현된다.
- 문제 예시가 나오면 무조건 재귀함수로 구상할 생각하기!
- 예시 보면 쉬운데 일반화시키려면 어려워서 예시를 잘 설정하자
- 테이블의 정보가 모이는 corner코너 지점이 답을 갖고 있다! (아래에서 계산하며 올라가는 그림 생각)
19, 20강 Greedy Algorithms 그리디 알고리즘
-
그리디 알고리즘은 그 순간에 최선의 선택을 항상 하는 것을 의미한다.
- 목표는 지역적인 최적의 선택이 전체 최적의 선택으로 이어지는 것
- 항상 최적의 답을 도출하는 것은 아니다.
-
Activity Selection 스케쥴링문제

- Activity : a1, a2, … , an → [starttime i, finish time i) 반열림 구간
- 목표 : 중복되지 않게 최대한 가능한 활동들의 집합(순서)을 구해라!



- 반복문 방법 pseudocode
- 둘다 Θ(n) but sorting이 O(nlogn)

-
Greedy choice 특징
- 지역적 최적의 선택이 궁극적으로 전체의 최적의 답을 도출해낸다.
- 동적프로그래밍과의 공통점과 차이점
- 동적프로그래밍
- 각 단계에서 선택을 한다.
- 선택이 하위 문제에 대한 최적의 답을 아는 것에 달려있다.
- 하위 문제를 먼저 해결한다.
- bottom up 방식
- 그리디 알고리즘
- 각 단계에서 선택을 한다.
- 하위 문제를 해결하기 전에 선택한다.
- top down 방식
-
Knapsack 문제 (배낭 문제, 배낭에 어떤 물건을 담을까?)
- 0-1 knapsack 문제 : 그리디알고리즘으로는 해결할 수 없다 → 이유는 뒤에서
- 총 무게가 w이하가 되도록 물건을 가져가는 것
- 물건을 가져가든지 말든지 둘 중 하나의 선택지 → 물건의 일부분만 가져갈수없다.
- Fractional knapsack 문제 : 그리디로 해결 가능
- 0-1 문제와 기본적인 것은 같고, 물건을 비율적으로 가져갈 수 있다.
- 비율배낭문제를 해결하기 위해서는 새로운 변수 도입이 필요함
- rank = value / weight
- rank가 높은 순서대로 가져감
- 둘의 차이를 예시로!


- W가 50이라고 할 때 0-1 배낭 문제는 2,3번의 아이템을 가져갈 것이다. → v = 220
- 비율배낭 문제는 1,2번을 택하고 3번을 비율적으로 택할 것이다. → v = 160 + 80 = 240
-
동적프로그래밍으로 이 문제를 테이블화 시켜보자
- P(i,w) = 1번째부터 i번째까지 아이템중에서 얻었을 때, 이득의 maximum(선택후배낭무게 = w)
- 두가지로 나뉠 것이다. i번째 아이템을 선택하느냐 아니냐

- 그래서 이 두가지 경우 중 max값을 저장하는 것이다.

- P(3,4)를 해석해보자. 현재 배낭의 무게가 4고 1~3번째 아이템 중에 3번아이템을 고름 + 3번아이템의 value = 20 , weight = 3 → 20 + P(2,1) / 고르지 않았을때 P(2,4) 둘 중 큰 값이 됨 → 30
- 실제 계산
- 골랐어 → 좌상단으로 / 안골랐어 → 위로
- 위로 올라가도 값의 변화가 없을 때 안고른 것이다!
- 화살표가 없다면 갈 수 있는 길이 아니다!
- item 4 → item 3 no! → item2 → item1 (최적의 답)

-
Pseudocode


- O(n*W)⇒W가 매우크기 때문에 다항적 시간 복잡도가 아니다 → pseudo-polynomial 가짜 다항적
- B[W] : 현재 무게가 W일때 얻을 수 있는 최대 이익 / A[w-wk] : w-wk일때 얻을 수 있는 최대 이익
- Huffman Codes 허프먼의 탐욕 알고리즘