답변:
배낭 문제 는 숫자가 이진수 로 제공 될 때 입니다. 이 경우, 동적 프로그래밍은 를 끝내기 위해 기하 급수적으로 많은 단계 (입력의 크기, 즉 입력의 비트 수)를 취합니다 .
반면에 입력의 숫자가 단항으로 주어진 경우 다이나믹 프로그래밍은 다항식 시간 (입력 크기)으로 작동합니다.
이런 종류의 문제를 약하게 합니다.
: 입력을 제공하는 데 사용되는 인코딩의 중요성을 이해하는 또 다른 좋은 예는 일반적인 알고리즘을 고려하여 에서 까지 의 숫자가 소수인지 확인하고 나누는 것이 있는지 확인하는 것입니다 . 이것은 다항식 이지만 반드시 입력 크기는 아닙니다. 경우 이진 주어진 입력의 크기는 및 알고리즘은 시간에서 실행 입력 크기 지수이다. 그리고 문제의 일반적인 계산 복잡성은 입력의 크기입니다.
이러한 종류의 알고리즘, 즉 입력의 일부인 가장 큰 수의 다항식이지만 입력 길이의 지수를 의사 다항식 이라고 합니다.
m
(팩 크기)와 n
(항목 수) 의 관계 는 완전히 알 수 없습니다. 맞습니까? 그리고 "숫자가 이진수로 주어질 때"... 다시 말해 주실 수 없습니까? 대부분의 알고리즘을 사용하면 기본 10의 입력 크기에 대해 이야기합니다. 여기서 바이너리에 대해 이야기하는 이유는 무엇입니까? 그리고 당신은 등 진수, 진수, 진수에 인코딩 여부 ... actual
당신이 당신의 주요 알고리즘 루프 반복 횟수는 모두 직접 의존 n
하고 W
.
가장 큰 혼란은 " 크기 "와 " 값 "의 차이에 있습니다.
" 다항식 시간 " 은 입력 크기 의 다항식을 의미 합니다.
" 의사 다항식 시간 " 은 입력 값 을 다항식 으로 표현합니다. 이것은 입력 의 크기 에 대한 지수와 같다는 것을 보여줍니다 (아래) .
즉, 는 입력 크기를 나타내고 은 입력 값을 나타냅니다.
다항식 시간 : 에 대한
의사 폴리. 시간 : 에 대한
이제, 배낭 문제가 갖는 pseudopolynomial, 다항식하지 동적 프로그래밍 솔루션에 종속 주행 시간주기 때문에, 용액 값 즉 - , A는 값이 최대 용량을 대표한다.
이제 값 을 나타내는 데 필요한 자릿수로 표시 하여 값 을 크기 로 변환 할 수 있습니다 . 은 밑수 사용하여 을 나타내는 데 필요한 자릿수를 알려줍니다 . 이것은 이 다음과 같이 해결할 수 있습니다 .
이것을 의사 다항식 시간 정의에 연결하면 지수 wrt 임을 알 수 있습니다 .
의사 폴리. 시간 : 에 대한
배낭 문제 에 정의 된 카프의 논문은 배낭하는 (이 경우 정확한 커버) 다른 NPC 문제에서의 감소가 있기 때문에 NP-완료됩니다. 이는 아닌 한 배낭 문제의 모든 인스턴스를 해결할 수있는 다항식 알고리즘 이 없음을 의미합니다 .
그러나 다항식 솔루션 또는 근사값을 가지거나 갖지 않을 수있는 다른 변형 (예 : 0-1 배낭 과 기타 )이 있습니다. 그러나 이것은 일반적인 배낭 문제와 동일하지 않습니다. 또한 특정 (가족) 인스턴스 에서 작동하는 효율적인 알고리즘이있을 수 있지만 이러한 알고리즘은 다른 인스턴스에서 더 오래 걸립니다.