knapsack 알고리즘 예제

예: B[4][10] = 8. 즉, 최적의 경우 선택한 패키지의 총 중량은 8이며, 선택할 수있는 첫 번째 패키지 (1 ~ 4 번째 패키지)가 있고 배낭의 최대 무게는 10입니다. 4개의 항목을 모두 선택할 필요는 없습니다. 이 알고리즘은 동적 프로그래밍의 일부입니다. 동적 프로그래밍에서 우리는 작은 문제로 다이빙하여 더 큰 문제를 해결합니다. 캐시에 작은 문제의 결과를 유지 한 다음 캐시를 사용하여 더 큰 문제를 해결하십시오. 이 자습서에서는 두 가지 예제가 있습니다. 여기에 두 가지 예와 위의 프로그램을 실행하는 자바 코드입니다 : 정리 : 세트 S ′ {디스플레이 스타일 S`} stisfies 위의 알고리즘에 의해 계산 된 t r o f i t (S′ ) ≥ ( 1 ~ θ) {p r o f i t (S) {p t .1 t} (S^{*}}} 여기서 S {디스플레이 스타일 S^{}}는 최적의 솔루션입니다. 배낭 문제는 두 가지 유형으로 더 나눌 수 있습니다: suproblems가 다시 평가되기 때문에, 이 문제는 Subprolems 속성이 겹칩니다. 따라서 0-1 Knapsack 문제는 동적 프로그래밍 문제의 두 속성 (이 참조)을 모두 가지고 있습니다.

다른 일반적인 DP(동적 프로그래밍) 문제와 마찬가지로 임시 배열 K[[]]를 상향식으로 구성하여 동일한 하위 문제의 재계산을 방지할 수 있습니다. 다음은 동적 프로그래밍 기반 구현입니다. 배낭 알고리즘의 초기 응용 프로그램 중 하나는 시험 응시자가 어떤 질문에 대답할지 선택할 수 있는 시험의 구성 및 채점이었습니다. 작은 예로, 응시자에게 그러한 선택을 제공하는 것은 매우 간단한 과정입니다. 예를 들어, 시험에 각 10점의 가치가 있는 12개의 문항이 포함되어 있는 경우, 응시자는 10개의 문항에 만 답하면 최대 100점을 획득할 수 있습니다. 그러나 점 값의 이기종 분포가 있는 테스트에서는 선택을 제공하기가 더 어렵습니다. Feuerman과 Weiss는 학생들에게 총 125 개의 가능한 점수로 이기종 시험을 받는 시스템을 제안했습니다. 학생들은 자신의 능력의 최선을 모든 질문에 대답하도록 요청받습니다.

총 점 값이 최대 100개까지 합산되는 문제의 가능한 하위 집합 중 배낭 알고리즘은 각 학생에게 가능한 가장 높은 점수를 주는 하위 집합을 결정합니다. [8] 우리는 단지 각 항목 0 또는 1 시간을 포함하는 무차별 대입 알고리즘을 사용하여 위의 문제를 해결하기 위해 시도 할 수 있습니다. “결정”과 “최적화”문제 사이에는 “결정”문제를 해결하는 다항식 알고리즘이 있는 경우 이 알고리즘을 적용하여 다항식 시간에 최적화 문제에 대한 최대 값을 찾을 수 있다는 점에서 “결정” 문제가 있습니다. k의 값을 증가시키면서 반복적으로 .