배낭의 항목 수를 상수 로 제한 해야하는 경우 동적 프로그래밍 상황에서 배낭 문제에 어떻게 접근 합니까? 이것은 같은 문제입니다 (최대 무게 , 모든 항목의 값 및 무게 ) . 배낭 에 항목 만 추가 할 수 있으며 배낭 값을 최적화해야합니다.
우리는 3 차원이 필요합니까? 그렇지 않으면 다른 접근법을 찾을 수 있습니다. 셀의 배낭에 항목 수를 추가하고 끝에 항목 수 == 최대 값을 가져 오려고했지만 최선의 해결책은 아닙니다.
배낭의 항목 수를 상수 로 제한 해야하는 경우 동적 프로그래밍 상황에서 배낭 문제에 어떻게 접근 합니까? 이것은 같은 문제입니다 (최대 무게 , 모든 항목의 값 및 무게 ) . 배낭 에 항목 만 추가 할 수 있으며 배낭 값을 최적화해야합니다.
우리는 3 차원이 필요합니까? 그렇지 않으면 다른 접근법을 찾을 수 있습니다. 셀의 배낭에 항목 수를 추가하고 끝에 항목 수 == 최대 값을 가져 오려고했지만 최선의 해결책은 아닙니다.
답변:
아주 좋은 질문입니다!
당신은 두 번 옳습니다.
다음에서는 동적 프로그래밍 기반 솔루션에 익숙하다고 가정합니다. 특히, 솔루션을 결정하기 위해 테이블을 뒤로 이동하는 방법에 대해서는 설명하지 않겠습니다 .
먼저 일반적인 경우에 중점을 두겠습니다 . 항목 수는 무제한 입니다. 이 경우, 당신은 단지 테이블 구축 T 난 , j는 배낭의 전체 용량이 같을 때 최적의 값을 포함 전을 하고 첫 번째 J의 항목이 고려됩니다. 여기에서:
여기서 및 V J에서 의 무게 값과 방치 J의 각각 번째 항목. 경우 C는 사용자의 배낭의 전체 용량과 총있다 N의 최적 솔루션이 주어진다 항목 T C , N . 이 알고리즘은 의사 다항식 시간으로 실행되는 것으로 알려져 있으며 그 아름다움 중 하나는 최대 용량에 맞는 조합 만 고려한다는 것입니다.
그러나 제약 조건을 추가 할 때는 충분하지 않습니다 : 최대 항목 수 . 그 이유는 이전 반복 수식에서 다른 항목 조합을 고려하지 않기 때문입니다.
첫 번째 솔루션은 3 차원을 추가하는 것으로 구성됩니다. 귀하의 경우 배낭의 용량이 i 일 때 첫 번째 j 항목 만 고려되고 배낭에 k 개 이상의 항목 을 넣을 수없는 경우 가 최적의 솔루션이되도록하십시오 . 지금,
첫 번째 표현은 분명해야합니다. 두 번째는 테이블 T 의 번째 계층이 위에서 요구 한 바와 같이 첫 번째 ( j - 1 ) 중에서 ( k - 1 ) 항목 의 최상의 조합을 추적하기 때문에 작동합니다.
이 알고리즘의 효율적인 구현은 계산하지 않아도 모두를위한 케이 . 이전의 되풀이 관계는 레이어 k 와 ( k - 1 ) 을 관련 시키므로 두 개의 연속 레이어 사이를 번갈아 가며 진행할 수 있습니다 (예 : k = 4 인 최적 솔루션에 관심이있는 경우 두 개의 연속 레이어 만 사용). 1, 1 및 2, 2 및 3, 3 및 4가 완료되었습니다). 다시 말해,이 알고리즘은 동적 프로그래밍에 기반한 기존 방식에 필요한 메모리의 두 배를 차지하므로 의사 다항식 시간으로 계속 실행될 수 있습니다.
그러나 이것이 유일한 해결책은 아닙니다. 그리고 당신이 더 우아하게 찾을 또 다른 것이 있습니다. 위 수식에서, 우리는 이하로 구성되어 최적의 솔루션 검색 상품 중 제 ( J - 1 ) 로서 T I , J - 1 , K - 1 . 그러나 이것이 정확히 max p = 0 , j - 1 { T i , p }와 동일하다는 것이 분명해야합니다원래 테이블을 사용하여 !! 즉, 1 개 항목, 2 개 항목, 3 개 항목, ... ( j - 1 ) 항목 의 최적 솔루션을 고려하여 개 이하의 항목을 가진 최적의 솔루션을 검색 할 수도 있습니다. 또한 셀당 두 개의 정수가 필요하도록 모든 부분 솔루션에서 고려되는 항목 수를 추적하십시오. 이 메모리 점유는 위에 표시된 알고리즘의 메모리 요구 사항과 정확히 동일합니다 (레이어 k 형식의 3 차원 사용 ) .
도움이 되었기를 바랍니다,