배낭 문제 — 동적 프로그래밍 솔루션에도 불구하고 NP-complete?


50

배낭 문제는 동적 프로그래밍으로 쉽게 해결할 수 있습니다. 동적 프로그래밍은 다항식 시간으로 실행됩니다. 그것이 우리가하는 이유입니다.

나는 그것이 실제로 NP-complete 문제라는 것을 읽었으며, 이는 다항식 문제에서 문제를 해결하는 것이 불가능하다는 것을 의미합니다.

내 실수는 어디입니까?


5
DP는 "테이블 크기"에서 다항식입니다. 배낭에 대한 테이블은 기하 급수적으로 큽니다 (Kaveh의 답변 참조).
라파엘

답변:


40

배낭 문제 는 숫자가 이진수 로 제공 될 때 입니다. 이 경우, 동적 프로그래밍은 를 끝내기 위해 기하 급수적으로 많은 단계 (입력의 크기, 즉 입력의 비트 수)를 취합니다 .NP-complete

반면에 입력의 숫자가 단항으로 주어진 경우 다이나믹 프로그래밍은 다항식 시간 (입력 크기)으로 작동합니다.

이런 종류의 문제를 약하게NP-complete 합니다.

: 입력을 제공하는 데 사용되는 인코딩의 중요성을 이해하는 또 다른 좋은 예는 일반적인 알고리즘을 고려하여 에서 까지 의 숫자가 소수인지 확인하고 나누는 것이 있는지 확인하는 것입니다 . 이것은 다항식 이지만 반드시 입력 크기는 아닙니다. 경우 이진 주어진 입력의 크기는 및 알고리즘은 시간에서 실행 입력 크기 지수이다. 그리고 문제의 일반적인 계산 복잡성은 입력의 크기입니다.2nnnnlgnO(n)=O(2lgn/2)

이러한 종류의 알고리즘, 즉 입력의 일부인 가장 큰 수의 다항식이지만 입력 길이의 지수를 의사 다항식 이라고 합니다.


그러나 배낭에 넣을 물건에 대해 생각하십시오. 객체는 입력이 필요하며 이러한 입력은 객체의 수와 다항식이어야합니다. 객체가 충분하면 입력 값이 문제의 크기와 다항식입니다. 그렇다면 왜 배낭 크기 문제가 테이블 크기 측면에서 P 문제라고 말할 수 없습니까? 내가 잘못?
Strin

배낭의 크기 인 경우 @Strin은없고, 목적 소수의 예 큰 배낭을 느낄 충분할 수 크기의 하나 objeact, 충분하다. 입력의 크기는 대략 이며 보다 훨씬 작습니다 . (저희가 0-1 배낭에 대해 이야기하고 있다고 가정합니다.)mm2lgmm
Kaveh

입력을 다항식 시간으로 알고리즘을 완성하는 크기의 이진 인코딩 크기를 가진 더 작은 입력으로 나누고 솔루션을 결합 할 수 있습니까?
Char

@Kaveh "입력의 크기는 대략 2 lg m입니다"나는 당신이 그 부분을 어디서 얻었는지 이해할 수 없습니다. m(팩 크기)와 n(항목 수) 의 관계 는 완전히 알 수 없습니다. 맞습니까? 그리고 "숫자가 이진수로 주어질 때"... 다시 말해 주실 수 없습니까? 대부분의 알고리즘을 사용하면 기본 10의 입력 크기에 대해 이야기합니다. 여기서 바이너리에 대해 이야기하는 이유는 무엇입니까? 그리고 당신은 등 진수, 진수, 진수에 인코딩 여부 ... actual당신이 당신의 주요 알고리즘 루프 반복 횟수는 모두 직접 의존 n하고 W.
The111

1
@ The111, 나는 당신이 그것을 새로운 질문으로 게시하면 더 좋을 것이라고 생각합니다. 귀하의 질문이 더 근본적이고 의견이이 질문과 관련이없는 것으로 생각합니다.
Kaveh

33

가장 큰 혼란은 " 크기 "와 " "의 차이에 있습니다.

" 다항식 시간 " 은 입력 크기 의 다항식을 의미 합니다.

" 의사 다항식 시간 " 은 입력 을 다항식 으로 표현합니다. 이것은 입력 의 크기 에 대한 지수와 같다는 것을 보여줍니다 (아래) .


즉, 는 입력 크기를 나타내고 은 입력 값을 나타냅니다.NsizeNval

다항식 시간 : 에 대한O(Nsizex)xN

의사 폴리. 시간 : 에 대한O(Nvalx)xN

이제, 배낭 문제가 갖는 pseudopolynomial, 다항식하지 동적 프로그래밍 솔루션에 종속 주행 시간주기 때문에, 용액 즉 - , A는 값이 최대 용량을 대표한다.O(nW)W

이제 을 나타내는 데 필요한 자릿수로 표시 하여 크기 로 변환 할 수 있습니다 . 은 밑수 사용하여 을 나타내는 데 필요한 자릿수를 알려줍니다 . 이것은 이 다음과 같이 해결할 수 있습니다 .Nsize=Logb(Nval)NvalbNval

Nval=bNsize

이것을 의사 다항식 시간 정의에 연결하면 지수 wrt 임을 알 수 있습니다 .Nsize

의사 폴리. 시간 : 에 대한O(bxNsize)b,xN


7
정말 감사합니다 여기에 계정을 만들었습니다! 당신의 모범 후에 만 ​​마침내 그것을 이해했습니다.
Inoryy

2
당신의 대답은 모든 사람을 이겼습니다, 브라보!
Muhammad Razib

1
우리는 우리가 100에서 101로 W 변경하면 말할 수있는이 위대한 대답에 추가하려면 크기가 문제가 증가되지 않습니다 우리는이 두 배나 큰 만드는 W에 다른 비트를 추가하는 경우, 크기가 증가, 그래서 표는 것 두 배나 많은 행을 가지므로 크기를 하나씩 늘리면 문제 시간이 두 배가되어 지수가 증가합니다.
Amen

@bcorso 값 N이 주어 졌다고 가정합니다. 1에서 N까지의 숫자의 합을 찾아야하고 for 루프 방법을 사용했습니다. 이는 의사 다항식 시간 알고리즘입니까?
DollarAkshay

8

배낭 문제 에 정의 된 카프의 논문은 배낭하는 (이 경우 정확한 커버) 다른 NPC 문제에서의 감소가 있기 때문에 NP-완료됩니다. 이는 아닌 한 배낭 문제의 모든 인스턴스를 해결할 수있는 다항식 알고리즘 이 없음을 의미합니다 .P=NP

그러나 다항식 솔루션 또는 근사값을 가지거나 갖지 않을 수있는 다른 변형 (예 : 0-1 배낭기타 )이 있습니다. 그러나 이것은 일반적인 배낭 문제와 동일하지 않습니다. 또한 특정 (가족) 인스턴스 에서 작동하는 효율적인 알고리즘이있을 수 있지만 이러한 알고리즘은 다른 인스턴스에서 더 오래 걸립니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.