그리디 알고리즘 -(3) Knapsack Problem
2023. 5. 27. 23:54ㆍ알고리즘
728x90
The 0-1 Knapsack Problem
n개의 items이 있을 때
S는 item들의 집합
wi는 i번째 item의 무게
pi는 i번째 iteml의 가치
W는 배낭에 담을 수 있는 최대 무게
-> item들을 배낭에 담아 최대의 가치를 만들도록 하는 것이 이 문제의 핵심
브루트포스로 해결하기
1. 모든 가능한 경우를 고려
2. 최대 무게를 넘는 경우는 버리기
3. 남아있는 것들 최대의 가치를 만드는 것을 선택
-> 탐색하는데 2^n번의 시간이 걸림
그리디로 해결하기
1.
(1) 가치 순서대로 아이템들 정렬
(2) 좋은 가치 순서대로 가방에 담기
(3) 더 이상 못 담으면 종료
-> 최적해를 얻지 못함
2.
(1) 가벼운 순서대로 아이템들 정렬
(2) 가벼운 순서대로 가방에 담기
(3) 더 이상 못담으면 종료
-> 최적해를 얻지 못함
3.
(1) 단위 무게당 가치가 높은 순서대로 아이템들 정렬
(2) 순서대로 가방에 담기
(3) 더 이상 못담으면 종료
-> 항상 최적해를 얻지 못함
* Fractional Knapsack problem은 위의 3번 방법으로 항상 최적해를 구할 수 있다.
다이내믹 프로그래밍으로 해결하기
(1) 점화식 세우기

(2) 경곗값 채우기

(3) 테이블 채워나가기

총 시간복잡도: 세타 2^n
728x90
'알고리즘' 카테고리의 다른 글
| 백트래킹 -(2) Graph Coloring (1) | 2023.05.28 |
|---|---|
| 백트래킹 -(1) N queens problem (0) | 2023.05.28 |
| Greedy Algorithm-(2) Huffman Code (0) | 2023.05.27 |
| 그리디 알고리즘 -(1) Minimum Spanning Trees (0) | 2023.05.27 |
| 비스마스킹 (0) | 2023.05.08 |