Blog

2 August 2019

배낭 알고리즘 예제

동적 프로그래밍 솔루션을 테스트하는 동안 함수에 전달하기 전에 입력에 Fisher-Yates 셔플 알고리즘을 구현하여 대답이 입력의 정렬 순서에 어떻게 든 의존하지 않았는지 확인합니다. 셔플은 이동에서 어떻게 생겼는지 다음과 같습니다: 즉, 알고리즘이 항목 중 하나를 고려할 때, 가방에 추가된 이 아이템이 가방에 추가된 마지막 항목보다 더 높은 총 가치를 생성할지 여부를 결정하도록 요청하고 있습니다. 가방의 현재 총 중량입니다. 이 현재 항목이 더 나은 선택이라면 넣지 않으면 그대로 두십시오. 다음은 탐욕스러운 알고리즘이 선택한 항목으로, 가치별로 정렬됩니다: 배낭 알고리즘의 초기 적용은 응시자가 어떤 질문에 대답할지 선택할 수 있는 시험의 구성 및 채점에 있었습니다. 작은 예로, 응시자에게 그러한 선택을 제공하는 것은 매우 간단한 과정입니다. 예를 들어, 시험에 각 10점의 가치가 있는 12개의 문항이 포함되어 있는 경우, 응시자는 10개의 문항에 만 답하면 최대 100점을 획득할 수 있습니다. 그러나 점 값의 이기종 분포가 있는 테스트에서는 선택을 제공하기가 더 어렵습니다. Feuerman과 Weiss는 학생들에게 총 125 개의 가능한 점수로 이기종 시험을 받는 시스템을 제안했습니다. 학생들은 자신의 능력의 최선을 모든 질문에 대답하도록 요청받습니다. 총 점 값이 최대 100개까지 합산되는 문제의 가능한 하위 집합 중 배낭 알고리즘은 각 학생에게 가능한 가장 높은 점수를 주는 하위 집합을 결정합니다. [8] 다차원 배낭은 배낭보다 계산이 더 어렵습니다.

D = 2 {디스플레이 스타일 D=2} 경우에도 P = {디스플레이 스타일 =} NP가 아니면 EPTAS가 없는 문제입니다. [22] 그러나[23]의 알고리즘은 희소 인스턴스를 효율적으로 해결하는 것으로 나타났다. 다차원 배낭의 인스턴스는 설정J = { 1 , 2 , … … ❏ jj에 J { z } 이러한 인스턴스는 예를 들어 릴레이 노드가 있는 무선 네트워크에서 패킷을 예약할 때 발생합니다. [23] [23]의 알고리즘은 객관식 변형인 객관식 다차원 배낭의 희소인스턴스도 해결합니다. 알고리즘은 O (2 n / 2) {displaystyle O (2 ^{n/2})} 공간을 취하고 3 단계의 효율적인 구현 (예 : B의 하위 집합을 가중치로 정렬하고, B의 하위 집합을 삭제하여 B의 다른 하위 집합보다 더 크거나 동일한 값의 하위 집합을 삭제하고, 바이너리를 사용합니다. 가장 일치하는 검색) O (n 2 n / 2) {디스플레이 스타일 O (n2 ^{n/2})}}의 런타임이 생성됩니다. 암호화의 중간 공격에서 만나는 것과 마찬가지로, 이것은 O (n 2 n) {displaystyle O (n2^{n})} 순진한 무차별 대입 접근 방식의 런타임 ({1 … n } {displaystyle {1…n}})의 런타임에서 상수가 아닌 지수를 사용하는 비용으로 향상됩니다. 공간 (또한 아기 단계 거대한 단계 참조). 동적 프로그래밍 접근 방식[12] 분기 및 바인딩된 접근 방식[13] 또는 두 접근 방식의 혼성화를 기반으로 배낭 문제를 해결하는 데 여러 알고리즘을 사용할 수 있습니다.

[11] [14] [15] [16] “결정” 문제를 해결하는 다항식 알고리즘이 존재하는 경우 이 알고리즘을 적용하여 다항식 시간에 최적화 문제에 대한 최대 값을 찾을 수 있다는 점에서 “결정”과 “최적화” 문제 사이에 는 링크가 있습니다. k의 값을 증가시키면서 반복적으로 . 한편, 알고리즘이 다항식 시간에 최적화 문제의 최적 값을 발견하면, 결정 문제는 이 알고리즘에 의한 솔루션 출력값을 k의 값과 비교하여 다항식 시간에 해결될 수 있다. 따라서 두 버전의 문제 모두 비슷한 어려움을 가지고 있습니다.

Bize Ulaşın