배낭 문제

배낭 문제
(Knapsack Problem 냅색 프라블럼[*])는 조합 최적화의 유명한 문제이다.간단하게 말하면, 한 여행가가 가지고 가는 배낭에 담을 수 있는 무게의 최대값이 정해져 있고, 일정 가치와 무게가 있는 짐들을 배낭에 넣을 때, 가치의 합이 최대가 되도록 짐을 고르는 방법을 찾는 문제이다.

이 배낭문제는 짐을 쪼갤 수 있는 경우(무게가 소수일 수 있는 경우)와 짐을 쪼갤 수 없는 경우(이 경우 짐의 무게는 0이상의 정수만 가능) 두 가지로 나눌 수 있는데, 짐을 쪼갤 수 있는 경우의 배낭문제를 분할가능 배낭문제(Fractional Knapsack Problem), 짐을 쪼갤 수 없는 경우의 배낭문제를 0-1 배낭문제(0-1 Knapsack Problem)라 부른다.
 

이 문제는 쪼갤 수 있는 경우에는 그리디 알고리즘으로 다항 시간에, 쪼갤 수 없는 경우에는 동적계획법(Dynamic Programing)등으로 의사 다항 시간에 풀 수 있다. 단, 쪼갤 수 없는 경우는 NP-완전이기 때문에 알려진 다항 시간 알고리즘은 없고, FPTAS만 존재한다. 배낭 문제에 대한 FPTAS는 오스카 이바라 김철언 1975년에 개발하였다.


출처 : http://ko.wikipedia.org/wiki/배낭_문제 


 일전에 올렸던 코드는 문제가 있어서 다시 작성함


 

'Programming > Algorithm' 카테고리의 다른 글

Polygon Triangulation  (0) 2012.01.31
Minimam Spanning Tree - Kruskal's Algorithm for JAVA  (5) 2011.05.31
힙 정렬 - Heap Sort  (0) 2011.04.17
빠른 정렬 - QuickSort  (0) 2011.04.16
최대 힙 최소 힙  (0) 2011.04.16
Posted by 동적할당
: