, , complete 및 hard 정의


247

나는 컴퓨팅복잡성 에 대해 배우고 있는데 , 이러한 용어의 의미를 이해할 수 없습니다.

내가 아는 것은 NP가 NP-complete의 하위 집합이며 NP-hard의 하위 집합이라는 것이지만, 그것이 실제로 무엇을 의미하는지 전혀 모른다. 설명이 여전히 너무 높기 때문에 Wikipedia 도별로 도움이되지 않습니다.


6
공식적으로 정의 된 공식 객체입니다. 나는 대부분의 "간단한"설명이 부족하다는 것을 알았습니다. 정의를 이해하는 데 문제가 있다면 복잡한 이론에 대해 수업에서 무엇을하고 있습니까? (심각한 질문입니다.) Wikipedia는 TCS에 대한 훌륭한 참고 자료가 아닙니다.
Raphael

17
여러분이 아는 전부는 아닙니다. NPC (NP complete)는 다른 방식이 아니라 NP의 하위 집합입니다. 완전성은 항상 문제가 완료된 클래스의 요소가되는 것을 포함합니다. 또한 NP의 모든 문제가 어려운 것은 아니기 때문에 NP는 NP-hard의 하위 집합이 아닙니다.
frafl

5
@frafl : "NP의 모든 문제가 어려운 것은 아닙니다."
Raphael

2
@Raphael : 실제로 사용하는 축소 유형에 따라 다릅니다. 어디서, 다항식 시간을 많이 한 감소를 생각 . NPC
frafl

답변:


364

나는 Wikipedia 기사 P , NP , P vs. NP 가 꽤 좋다고 생각합니다. 여전히 여기에 내가 말할 것입니다 : Part I , Part II

[원하는 경우 건너 뛸 수있는 기술적 인 세부 사항에 대해서는 괄호 안의 설명을 사용합니다.]


1 부

결정 문제

다양한 종류의 계산 문제가 있습니다. 그러나 계산 복잡도 이론 과정에 대한 소개에서는 의사 결정 문제 , 즉 답이 예 또는 아니오 인 문제 에 집중하는 것이 더 쉽습니다 . 다른 종류의 계산 문제가 있지만 문제에 대한 대부분의 질문은 의사 결정 문제에 대한 비슷한 질문으로 줄일 수 있습니다. 또한 의사 결정 문제는 매우 간단합니다. 따라서 계산 복잡성 이론 과정을 소개하면서 의사 결정 문제 연구에 관심을 집중시킵니다.

답변이 예인 입력의 하위 집합으로 결정 문제를 식별 할 수 있습니다. 이 표기를 단순화하고, 우리가 쓸 수있는 xQ 대신 Q(x)=YESxQ 대신 Q(x)=NO .

또 다른 관점은 멤버쉽 쿼리 에 대해 이야기하고 있다는 것 입니다. 예를 들면 다음과 같습니다.

결정 문제 :

입력 : 자연수 x ,
질문 : x 는 짝수입니까?

회원 문제 :

입력 : 자연수 x ,
질문 : x in Even={0,2,4,6,} 입니까?

입력에 대한 YES 응답은 입력을 수락 하는 것으로, 입력에 대한 NO 응답은 입력을 거부하는 것으로 나타냅니다.

의사 결정 문제에 대한 알고리즘 을 살펴보고 해당 알고리즘이 계산 가능한 리소스를 얼마나 효율적으로 사용 하는지 논의 할 것입니다 . 알고리즘과 계산 리소스에 의해 우리가 의미하는 바를 공식적으로 정의하는 대신 C와 같은 언어로 프로그래밍하여 직감에 의존합니다.

[비고 : 1. 모든 것을 공식적이고 정확하게 수행 하려면 알고리즘과 계산 리소스의 사용에 의해 의미하는 바를 정확하게 정의 하기 위해 표준 Turing machine 모델 과 같은 계산 모델을 수정해야 합니다. 2. 모델이 직접 처리 할 수없는 객체에 대한 계산에 대해 이야기하려면 기계 모델이 처리 할 수있는 객체로 인코딩해야합니다. 예를 들어 Turing 머신을 사용하는 경우 자연수 및 그래프와 같은 객체를 인코딩해야합니다. 이진 문자열로.]


P =솔루션찾기를위한 효율적인 알고리즘의 문제

효율적인 알고리즘 은 최대 다항식 의 계산 리소스 를 사용하는 알고리즘을 의미 한다고 가정 합니다. 우리가 관심을 갖는 주요 자원 은 입력 크기와 관련하여 알고리즘 의 최악의 실행 시간 , 즉 알고리즘이 입력 크기 n 의 기본 단계 수입니다 . 입력의 크기는 x 이고 n 이 걸리면 n 매장에 컴퓨터 메모리 -bits x 경우에서는 쓰기 |x|=n 입니다. 따라서 효율적인 알고리즘은 다항식 최악의 실행 시간을 갖는 알고리즘을 의미합니다 .

가정 다항식 시간 알고리즘이 효율적인 알고리즘의 직관적 인 개념을 캡처로 알려져있다 Cobham의 논문 . 이 시점에서 P 가 효율적으로 해결할 수있는 문제에 적합한 모델인지 여부와 P 가 실제로 계산할 수있는 내용과 관련 문제를 캡처하지 않는지에 대해서는 논의 하지 않겠습니다. 현재로서는이 가정을해야 할 충분한 이유가 있으므로 우리의 목적에 따라이 경우를 가정합니다. Cobham의 논문을 받아들이지 않으면 내가 아래에 쓴 내용이 잘못되지는 않습니다 . 실제로 효율적인 계산에 대한 직감 입니다. 복잡성 이론에 대해 배우기 시작한 사람에게는 이것이 유용한 가정이라고 생각합니다.

P 는 효율적으로 해결 될 수있는
결정 문제,즉 다항식 시간 알고리즘을 갖는 결정 문제입니다.

더 공식적으로, 우리는 의사 결정 문제라고 Q 에있는 P IFF

효율적인 알고리즘이 존재 되도록 모든 입력을위한 X ,A
x

  • 만약 Q(x)=YES( X ) = Y E S , A(x)=YES
  • 만약 Q(x)=NO 다음 ( X ) = N O .A(x)=NO

나는 간단하게 쓸 수 ( X ) = Q ( X를 ) 그러나 나는 그래서 우리는 정의에 비교할 수 이런 식으로 쓰기 N P .A(x)=Q(x)NP


NP =증명 / 증명서 / 증인확인을위한 효율적인 알고리즘 관련 문제

때때로 우리는 누군가가 우리에게 답을 알려줍니다 우리에게 제공하지만 경우, 의사 결정 문제에 대한 답을 찾는 어떤 효율적인 방법을 모르는 증거 우리가 효율적으로 할 수 확인 대답은 그것이 있는지 확인하기 위해 증거를 확인하여 올바른지 유효한 증거를 . 이것이 복잡성 클래스 NP 의 기본 개념 입니다.

증명이 너무 길면 실제로 유용하지는 않지만, 유효한지 확인하지 않고 증명을 읽는 데 너무 오래 걸릴 수 있습니다. 우리는 검증에 필요한 시간이 주어진 증거의 크기가 아니라 원래 입력의 크기에서 합리적이기를 원합니다! 이것은 우리가 실제로 원하는 것은 임의의 긴 증거가 아니라 짧은 증거입니다. 검증 자의 실행 시간이 원래 입력의 크기에서 다항식 인 경우 증명의 다항식 부분 만 읽을 수 있습니다. 그래서 의해 짧은 우리는 의미 다항식 크기 .

"proof"이라는 단어를 사용할 때마다 "short proof"를 의미합니다.

여기서 우리는 문제의 예입니다 모르는 효율적으로 해결하기 위해하지만 우리는 효율적으로 증거를 검증 할 수있는 방법은 :

분배
입력 : 자연수의 유한 집합 S ,
질문 : 가능 분할하는 S 두 세트로 및 B ( B = S∩의 B = ) 의 수의 합되도록 A가 같은지 B 의 수의 합 ( x A x = x B x )?ABAB=SAB=
ABxAx=xBx

내가 당신에게 줄 경우 S 우리는 두 세트로 분할 할 수 있는지를 물어와 같은 자신의 합계가 동일한 것을, 당신은 그것을 해결하기 위해 어떤 효율적인 알고리즘을 모른다. 합이 같은 파티션을 찾거나 가능한 모든 파티션을 시도했지만 아무 것도 작동하지 않을 때까지 숫자를 두 세트로 분할하는 가능한 모든 방법을 시도 할 것입니다. 그들 중 어느 것이 효과가 있었다면 YES, 그렇지 않으면 NO라고 말할 것입니다.

그러나 기하 급수적으로 많은 파티션이 있으므로 시간이 많이 걸립니다. 그러나 나는 당신에게 두 세트를 와 B를 합이 동일하고 경우에 경우에, 당신은 쉽게 확인할 수 있습니다 와 B가 의 파티션 S . 합을 효율적으로 계산할 수 있습니다.ABABS

여기 내가 당신에게주는 AB 의 쌍은 YES 대답에 대한 증거입니다. 내 증거를보고 유효한 증거 인지 확인하여 청구를 효율적으로 확인할 수 있습니다 . 대답이 '예'이면 유효한 증거가 있으며 귀하에게이를 제시 할 수 있으며이를 효율적으로 확인할 수 있습니다. 대답이 NO이면 유효한 증거가 없습니다. 그래서 내가 당신에게주는 것은 당신이 그것을 확인할 수있는 유효한 증거가 아닙니다. 나는 대답이 YES라는 잘못된 증거로 당신을 속일 수 없습니다. 증거가 너무 큰 경우이를 검증하는 데 많은 시간이 걸리므로이를 방지하기를 원하므로 효율적인 증거, 즉 다항식 크기를 갖는 증거 만주의하십시오.

때때로 사람들 은 "증명"대신 " 증명서 "또는 " 증인 "을 사용합니다.

참고 답변을 효율적으로 찾고 확인할 수 있도록 주어진 입력 x 에 대한 답변에 대한 충분한 정보를 제공합니다 . 예를 들어, 파티션 예제에서 답을 말하지 않고 파티션을 제공하면 파티션이 유효한지 여부를 확인할 수 있습니다. 답을 직접 확인해야하며 내가 말하는 것에 대해 나를 믿을 수는 없습니다. 또한 증거 의 정확성 만 확인할 수 있습니다 . 내 증거가 유효하면 답변이 예임을 의미합니다. 그러나 내 증거가 유효하지 않다고 해서 대답이 아니오라는 의미는 아닙니다. 유효한 증거가없는 것이 아니라 하나의 증거가 유효하지 않은 것을 보았습니다. 우리는 예에 대한 증거에 대해 이야기하고 있습니다. 우리는 NO에 대한 증거에 대해 이야기하지 않습니다.

예를 보자 : A={2,4}B={1,5}S={1,2,4,5} 가 동일한 합으로 두 세트로 분할 될 수 있다는 증거입니다 . A 의 숫자와 B 의 숫자를 합산 하고 결과가 같은지 확인하고 A , BS 파티션 인지 확인하십시오 .

내가 당신에게 준 경우 A={2,5}B={1,4} , 당신이 확인하고 내 증거가 유효하지 않은 것을 볼 수 있습니다. 대답이 아니요라는 의미는 아니며,이 특정 증거가 유효하지 않다는 것을 의미합니다. 여기 당신의 작업은 하지 답을 찾기 위해,하지만 당신은 주어진 증거가 유효한지 확인합니다.

시험에서 문제를 해결하고 정답인지 확인하는 교수와 같습니다. :) (안타깝게도 학생들은 정답을 확인하기에 충분한 정보를 제공하지 않으며 교수는 나머지 부분 답변을 추측하고 부분 답변에 대해 학생들에게 얼마나 많은 점수를 주어야 하는지를 결정해야합니다. 태스크).

놀라운 사실은 동일한 상황이 우리가 해결하고자하는 다른 많은 자연 문제에도 적용된다는 것입니다 . 주어진 짧은 증거가 유효한지 효율적으로 확인할 수 는 있지만 , 답 을 찾는 효율적인 방법은 모릅니다 . 이것이 복잡성 클래스 NP매우 흥미로운 이유입니다 (이것이 그것을 정의하는 원래 동기는 아니었지만). CS뿐만 아니라 수학, 생물학, 물리, 화학, 경제, 관리, 사회학, 비즈니스 등 무엇을 하든지이 수업에 포함되는 계산 문제에 직면하게됩니다. NP 체크 아웃 으로 얼마나 많은 문제가 발생했는지에 대한 아이디어를 얻으려면NP 최적화 문제에 대한 개요 . 실제로 NP 없는 자연 문제를 찾는 데 어려움을 겪을 것입니다 . 단순히 놀랍습니다.

NP 는 효율적인 검증기를 갖는 문제의 클래스입니다. 즉
, 주어진 솔루션이 올바른지 확인할 수있는 다항식 시간 알고리즘이 있습니다.

보다 공식적으로, 결정 문제 QNP iff

모든 입력 x에 대해 검증기라고 하는 효율적인 알고리즘 V .
x

  • 만약 Q(x)=YES 다음 증거가 y 되도록 V(x,y)=YES ,
  • 만약 Q(x)=NO 모든 증거에 대한 y , V(x,y)=NO .

우리 는 답이 NO 일 때 어떤 증거도 받아들이지 않으면 검증자가 건전 하다고 말한다 . 다시 말해, 답변이 실제로 NO 인 경우, 소리 검증기는 속임수를 받아들이도록 속일 수 없습니다. 오 탐지가 없습니다.

마찬가지로, 답이 예일 때 적어도 하나의 증명을 수락하면 검증자가 완료 되었다고합니다 . 다시 말해, 완전한 검증자는 YES라는 대답을 확신 할 수 있습니다.

용어는 논리 및 증명 시스템 에서 비롯 됩니다 . 허위 진술을 증명하기 위해 방음 시스템을 사용할 수 없습니다. 우리는 완전한 증거 시스템을 사용하여 모든 진실한 진술을 증명할 수 있습니다.

검증기 V 는 두 개의 입력을 얻습니다.

  • x :Q 에대한 원래 입력
  • y :위한 제안 증명Q(x)=YES .

Vx 의 크기에서 효율적 이기를 원합니다 . 경우 y 큰 증거가 검증을 읽을 수 있습니다 만 다항식 부분y . 그렇기 때문에 증거가 짧아야합니다. 경우 y 있다고 말 단기이고 V 효율적이고 x 그 말과 동일 V 효율적이고 xy (크기 때문에 y 의 크기를 고정 다항식에 의해 제한된다 x ).

요약하면, 의사 결정 문제가 있음을 보여주는 Q 에있는 NP 우리가 제공해야 효율적 이다 검증 알고리즘 사운드완성 .

역사적 참고 사항 : 역사적으로 이것은 NP 의 원래 정의가 아닙니다 . 원래 정의는 비 결정적 Turing 기계를 사용합니다. 이 기계는 실제 기계 모델에 해당하지 않으며 익숙해지기가 어렵습니다 (적어도 복잡도 이론에 대해 배우기 시작할 때). 나는 많은 전문가들이 검증 자 정의를 주요 정의로 사용했을 것이고 심지어 N P 대신에 VP (다항식 시간으로 검증 가능) 라고 명명했을 것이라고 생각했다NP 그들이 계산 복잡도 이론의 시작으로 돌아 가면. 검증 정의는 문제에 보여주기 위해 사용하는 것이 더 개념적으로 이해하기 쉽게, 자연, 그리고 쉽게 NP .


PNP

따라서 우리는 P = 효율적으로 해결할 수 있고 NP = 효율적으로 확인할 수 있습니다. 따라서 P=NP 효율적으로 확인할 수있는 문제는 효율적으로 해결할 수있는 문제와 동일합니다.

어떤 문제가 있습니다 P 에 또한 NP 주어진 증거가 올 경우 당신은 또한 확인할 수 있습니다 문제를 해결할 수 즉 경우 : 검증 그냥 증거를 무시합니다!

그것은 우리가 그것을 필요로하지 않기 때문에 검증자가 스스로 답변을 계산할 수 있으며 도움없이 답변이 예인지 아니오인지를 결정할 수 있습니다. 답변이 아니요 인 경우, 증거가 없어야하며 검증자는 제안 된 모든 증거를 거부합니다. 등록을 마친 경우,이 있어야 증거, 사실 우리는 단지 증거로 무엇이든 받아 들일 것입니다.

[검증자가 검증 도구가 문제에 대해 올바르게 작동하는 증거를 하나 이상 수락하는 한 검증기 중 일부만 허용 할 수 있습니다.]

예를 들면 다음과 같습니다.

합계
입력 : 목록 n+1 자연수 1 , , NS , 질문 :Σ N I = 1 I = 용 ?a1,,ans
Σi=1nai=s

우리는 숫자를 합한 다음 s 와 비교할 수 있기 때문에 문제는 P 있으며, 같으면 YES를, 그렇지 않으면 NO를 반환합니다.s

문제에 또한 NP . 증거에 Sum을 더한 입력 값을 얻는 검증기 V 를 고려하십시오 . 위에서 설명한 P 의 알고리즘과 동일한 방식으로 작동합니다 . 이것은 Sum에 대한 효율적인 검증기입니다.

Sum에는 다른 효율적인 검증자가 있으며 그중 일부는 그들에게 제공된 증명을 사용할 수 있습니다. 그러나 우리가 디자인 한 것은 그렇지 않으며 괜찮습니다. Sum에 대해 효율적인 검증자를 제공했기 때문에 문제는 NP 입니다. 같은 트릭은 다른 모든 문제를 작동 P 있으므로 PNP .


NPN P에 대한 Brute-Force / Exhaustive-Search 알고리즘 E x p T i m eNPExpTime

가장 좋은 알고리즘을 우리가 알고 있는 임의의 문제를 해결하기위한 NP 있습니다 무차별 대입 / 철저한-검색 알고리즘. 문제에 대한 효율적인 검증자를 선택하고 ( NP 에 있다고 가정하여 효율적인 검증자가 있음 ) 가능한 모든 증거를 하나씩 확인하십시오. 검증자가 그중 하나를 수락하면 대답은 예입니다. 그렇지 않으면 대답은 아니오입니다.

파티션 예제에서 가능한 모든 파티션을 시도하고 합계가 동일한 지 확인하십시오.

무차별 대입 알고리즘은 최악의 지수 시간으로 실행됩니다. 교정의 크기는 입력 크기에서 다항식입니다. 교정쇄의 크기 인 경우 m 다음 거기에 2m 가능한 증거. 각각의 검사는 검증기에 의해 다항식 시간이 걸립니다. 따라서 무차별 대입 알고리즘은 전체적으로 지수 시간이 걸립니다.

이것은 모든 NP 문제가 지수 시간, 즉 NPExpTime 에서 해결 될 수 있음을 보여줍니다 . 또한 무차별 알고리즘은 다항식 공간 만 사용합니다. 즉, NPPSpace 그러나 다른 날의 이야기입니다.

문제 NP 어떠한 문제, 예를 들어 훨씬 빠른 알고리즘 수 P 다항식 시간 알고리즘을 가진다. 그러나 내의 임의의 문제에 대한 NP 우리는 훨씬 더 잘 할 수있는 알고리즘을 모른다. 당신은 당신의 문제에 있음을 말해 경우 즉, NP 다음 (그리고 문제에 대한 아무것도) 가장 빠른 알고리즘을 우리는 기하 급수적으로 시간이 소요 해결하기위한 알고있다.

그것은 더 나은 알고리즘이없는 것은 아닙니다 그러나, 우리는 그것을 모른다 . 우리가 아는 한 NP=P 이고 모든 NP 문제를 다항식 시간에 해결할 수 있다는 것은 여전히 ​​가능합니다 (거의 모든 복잡도 이론가들에게는 가능성이 거의 없다고 생각하지만) .

또한, 일부 전문가들은 추측 우리가 훨씬 더 잘 할 수 없다는 문제가있다, 즉 NP 시간의 지수 양을 무차별 검색 알고리즘보다 훨씬 더 효율적으로 해결 될 수 없습니다. 자세한 내용은 지수 시간 가설 을 참조하십시오. 그러나 이것은 입증되지 않았으며 단지 추측 일뿐 입니다. 그것은 단지 우리가 임의의 다항식 시간 알고리즘을 찾는에서 얼마나 멀리 보여줍니다 NP 문제.

지수 시간과의 연관성은 일부 사람들을 혼동합니다. 그들은 NP 문제 지수 시간을 필요로 한다는 것을 잘못 생각합니다 (또는 더 나쁜 알고리즘이 없음). 문제에 알리는 NP 문제를 의미하지 않는다이다 어려운 해결하기 위해, 그냥이 있음을 의미 쉽게 확인할, 그것은이다 상한 문제 해결의 어려움에, 많은 NP 문제를 해결하기 쉬운 사람 PNP .

그럼에도 불구하고, 거기에 NP 문제 같다 해결하기 어려울는. NP hardness에 대해 이야기 할 때 이것으로 돌아갑니다 .


하한은 보일지 증명하기 어려운

OK, 그래서 우리는 지금이 있다는 것을 알고 많은 자연 문제NP 그리고 우리는 그 해결의 효율적인 방법을 모르는 우리는 그들이 정말 해결하기 지수 시간이 필요할 것으로 생각한다. 이것을 증명할 수 있습니까?

불행히도 하한 을 증명하는 작업 은 매우 어렵습니다. 우리 이러한 문제들이 선형 시간 이상을 요구한다는 것을 증명할 수조차 없습니다 ! 지수 시간이 필요한 것은 물론입니다.

선형 시간 하한을 증명하는 것은 다소 쉽습니다. 알고리즘은 결국 입력을 읽어야합니다. 초 선형 하한을 증명하는 것은 완전히 다른 이야기입니다. 비교를 사용하여 알고리즘을 정렬하는 것과 같이 고려중인 알고리즘 종류에 대한 더 많은 제한을 사용하여 초 선형 하한을 증명할 수 있지만 이러한 제한이없는 하한은 모릅니다.

문제에 대한 상한을 증명하기 위해서는 충분한 알고리즘을 설계하면됩니다. 그러한 알고리즘을 만들려면 종종 지식, 창의적 사고 및 독창성이 필요합니다.

그러나 하한을 증명하는 것에 비해 작업이 훨씬 간단합니다. 우리는 좋은 알고리즘이 없다는 것을 보여 주어야한다 . 우리는 현재 충분한 알고리즘을 알지 못하지만 , 좋은 알고리즘이 없기 때문에 아무도 좋은 알고리즘찾지 못할 것입니다 . 당신이 전에하지 않았다면 잠시 동안 그것에 대해 생각하십시오. 어떻게 우리는 그러한 불가능한 결과를 보여줄 수 있습니까?

사람들이 혼란스러워하는 또 다른 곳입니다. 여기서 "불가능"은 수학적으로 불가능합니다 . 즉, 일부 천재가 미래에 고칠 수있는 것은 우리에게는 부족하지 않습니다. 불가능하다고 할 때 1=0 과 같이 불가능하다는 것은 절대 불가능 합니다. 과학적 진보가 불가능한 것은 아닙니다. 그것이 우리가 하한을 증명할 때하고있는 일입니다.

문제가 있음을 보여주기 위해 즉, 하한을 증명하기 위해 필요 해결하기 위해 일정 시간을, 우리가 증명해야 함을 의미 있는알고리즘, 아직 모르는 매우 독창적 인 알고리즘조차도 문제를 더 빨리 해결할 수 없습니다. 우리가 알고있는 많은 지능적인 아이디어 (욕심, 매칭, 동적 프로그래밍, 선형 프로그래밍, 반정의 프로그래밍, 제곱합 프로그래밍 및 기타 많은 지능적인 아이디어)가 있으며 아직 모르는 것이 훨씬 더 많습니다. 하나의 알고리즘 또는 알고리즘 설계에 대한 하나의 특정 아이디어를 배제하는 것만으로는 충분하지 않습니다. 아직 알지 못하는 것조차, 심지어 알지 못하는 것까지 모두 배제해야합니다! 그리고 이들 모두를 알고리즘으로 결합 할 수 있으므로 조합도 배제해야합니다. 일부 아이디어는 어려운 N P를 해결할 수 없다는 것을 보여주는 진전이있었습니다.NP욕심과 확장 프로그램과 같은 문제는 작동하지 않으며 동적 프로그래밍 알고리즘과 관련된 작업이 있으며 선형 프로그래밍을 사용하는 특정 방법에 대한 작업이 있습니다. 그러나 이것들은 우리가 알고있는 지능형 아이디어를 결정하는 데 가깝지 않습니다 (관심있는 경우 제한된 계산 모델에서 하한을 검색하십시오).


장벽 : 하위 경계 증명하기 어렵다

다른 한편으로 우리는 하한 증명이 그렇게 될 수 없다고 말하는 장벽 이라는 수학적 결과를 가지고 있으며 , 이는 하한을 증명하기 위해 사용했던 모든 기술을 거의 포함합니다! 실제로 많은 연구자들은 Alexander Razbarov와 Steven Rudich의 자연 증명 장벽 결과 이후에 하한값을 증명하는 작업을 포기했습니다 . 특정 종류의 하한 증명의 존재는 암호화 의사 난수 생성기 및 기타 많은 암호화 도구가 불안정하다는 것을 의미합니다.

나는 최근 몇 년간 Ryan Williams 가 장벽 결과를 지능적으로 우회 할 수 있었던 진전 이 있었지만, 지금까지의 결과는 매우 약한 계산 모델에 대한 것이며 일반적인 다항식 알고리즘을 배제하는 것과는 거리가 멀다. .

그러나 나는 분기하고 있습니다. 내가 만들고 싶었다 주요 포인트는 하한을 증명하는 것은 어렵다고 그리고 우리는 해결 일반적인 알고리즘에 대한 낮은 강력한 경계가없는 NP 문제.

[반면, Ryan Williams의 연구는 하한 증명과 상한 입증 사이에 밀접한 관련이 있음을 보여줍니다. 관심이 있다면 ICM 2014에서 그의 강연을 보십시오 .]


감소 : 다른 문제를 서브 루틴 / 오라클 / 블랙 박스로 사용하여 문제 해결

축소라는 아이디어는 매우 간단합니다. 문제를 해결하려면 다른 문제에 알고리즘을 사용하십시오.

여기에 간단한 예입니다 : 우리는 목록의 합을 계산한다고 가정 n 자연수를 우리는 알고리즘이 Sum 주어진 두 수의 합을 반환합니다. 우리가 사용할 수 Sum 목록에 번호를 추가? 물론이야!

문제:

입력 : n 자연수 x1,,xn ,
출력 : return i=1nxi .

환원 알고리즘 :

  1. s=0
  2. 위한 i 에서 1n
    2.1. s=Sum(s,xi)
  3. s를 반환s

여기서 우리는 알고리즘에서 Sum서브 루틴으로 사용 합니다. 우리는 방법에 대해 걱정하지 않아도됩니다 Sum 작품을이 같은 역할을 블랙 박스 우리를 위해, 우리는 내부에서 무슨 일이 진행되고 있는지 걱정하지 않는다 Sum . 우리는 종종 서브 루틴을 참조 Sum오라클 . 그것은 그리스 신화에서 델파이의 오라클 과 같습니다 . 우리는 질문을하고 오라클은 그에 대한 답변을 사용합니다.

이것은 본질적으로 축소입니다. 문제에 대한 알고리즘이 있다고 가정하고이를 다른 문제를 해결하기위한 오라클로 사용하십시오. 여기서 효율적인 것은 오라클이 시간 단위로 응답한다고 가정 할 때 효율적입니다. 즉, 오라클의 각 실행을 단일 단계로 계산합니다.

오라클이 큰 응답을 반환하는 경우 우리는 그것을 읽을 필요하고 시간이 좀 걸릴 수 있습니다, 그래서 우리는 걸리는 시간 계산해야 우리를 오라클이 우리에게 주신 대답을 읽을 수 있습니다. 오라클에게 질문을 쓰거나 질문하는 것과 비슷합니다. 그러나 오라클은 즉각 작동합니다. 즉 오라클에서 질문을하면 오라클은 단일 시간 단위로 답변을 작성합니다. 오라클이 수행하는 모든 작업은 한 단계로 계산되지만 질문을 작성하고 답변을 읽는 데 걸리는 시간은 제외됩니다.

우리는 오라클의 작동 방식을 신경 쓰지 않고 응답에 대해서만 신경을 쓰므로 단순화하고 오라클이 알고리즘 대신 문제 자체라고 생각할 수 있습니다. 다시 말해, 오라클이 알고리즘이 아닌지 신경 쓰지 않고, 오라클이 그 답을 찾는 방법을 신경 쓰지 않습니다.

Sum

오라클에서 여러 가지 질문을 할 수 있으며 질문을 미리 결정할 필요는 없습니다. 질문을 할 수 있습니다 .Oracle이 스스로 계산을 수행 한 결과에 대한 답을 바탕으로 얻은 답변에 따라 다른 질문을 할 수 있습니다. 이전 질문.

이것을 보는 또 다른 방법은 그것을 대화 형 계산 으로 생각하는 것 입니다. 대화식 계산 자체는 큰 주제이므로 여기서 다루지 않겠지 만 축소에 대한 이러한 관점을 언급하면 ​​도움이 될 수 있습니다.

AOAO

위에서 논의한 축소는 축소의 가장 일반적인 형태이며 블랙 박스 축소 (일명 Oracle 축소 , Turing 축소 )라고합니다.

더 공식적으로 :

QOQTO
Ax
Q(x)=AO(x)

AOQ

AQTPOT

그러나 축소 알고리즘이 오라클과 상호 작용하는 방식에 일부 제한을두기를 원할 수 있습니다. 연구 된 몇 가지 제한 사항이 있지만 가장 유용한 제한 사항은 다 대일 축소 (일명 맵핑 감소 )입니다.

xy

더 공식적으로

QOQmO
Ax
Q(x)=O(A(x))

QmPO

NPANPBANP

PNPNP


게시물이 너무 길어 답변 한도 (30000 자)를 초과했습니다. 나는 파트 II 에서 답을 계속할 것이다 .


2
소개와 관련하여 독자들은 “NP- 완료”최적화 문제의사 결정 문제 대“실제”문제에 관심이있을 수도 있습니다 .
Raphael

4
@Kaveh 감사합니다. 수업 시간에이 섹션 전에 결정을 내렸지 만 결정 불가능 성을 증명하는 데 약간의 시간이 걸렸습니다. 이것이 복잡성에 대한 이해 부족과 관련이 있는지는 모르겠습니다.
agent154

5
입문 레벨 (Sipser 포함)에서 고급에 이르기까지 많은 복잡한 책을 읽었습니다. 나는 추상 수학에 문제가 없습니다 (예를 들어 Lang의 대수를 읽을 수 있습니다). 이 답변은 NP 대 P를 설명하는 데 가장 좋습니다. NP를 연마하는 데 더 많은 시간을 보내고 강의 노트로 만들 것을 제안합니다. 많은 사람들을 도울 수 있습니다.
scaaahu

@scaaahu, 친절한 의견과 제안에 감사드립니다. 나는 이것을 곧 완성하고 연마 할 계획이다.
Kaveh 2019

10
이 답변은 참조 답변으로 작성해야합니다. 미래의 모든 기본 P / NP 유형 질문이 먼저 언급되어야합니다. 매우 유동적 인 설명!
Paresh

179

2 부

파트 I 에서 계속되었습니다 .

이전 문자는 답변 (30000)에 허용되는 최대 문자 수를 초과하여 두 개로 나누었습니다.

NP NP

PNPNPNP

때때로 우리 는 문제를 해결하기 어렵다고 말하고 싶습니다 . 그러나 위에서 언급했듯이 우리는이 목적으로 하한을 사용할 수 없습니다. 이론적으로는 우리가 증명하고자하는 바이지만 실제로는 하한을 증명하는 데 크게 성공하지 못했으며 일반적으로 언급 한 바와 같이 증명하기가 어렵습니다. 위. 여전히 문제를 해결하기 어렵다고 말하는 방법이 있습니까?

NPNP

상대 난이도 감소

ABAB

ABAB

MBABMBANBMBNMNA

P

NPNP

NPNP

NPNP
NPNP

더 공식적으로, 우리는 결정 문제 라고 말한다ANP

ANP
NPBBABmPA

NPNPNPNP

NPNP

(많은 사람들이 산업에서 실제 사용을 위해 알고리즘을 최적화하기 위해 노력하는 다른 두 가지 문제는 정수 프로그래밍제약 조건 만족 문제 입니다. 문제와 이러한 알고리즘 중 하나에 대해 최적화 된 알고리즘에 관심이있는 인스턴스에 따라 다른 사람.)

NP
NP

NP

NPNP

NPNPNPNPNPNP 단단함 (즉, 다항식 시간 알고리즘이 없음).

이제 질문은 :

  • NP

  • 우리는 그들 중 어느 것을 알고 있습니까?

NPNPNPNP

NPExpTimeNPNP

p¬p

NPNP

ANPABBNPNPAABNPB

NPNPNP

NPNP

다행히도이 작업을 두 번 이상 수행 할 필요는 없습니다. S 와 같은 문제를 보여 주면SATNPSATSubsetSumNPSATSubsetSum

NP

NP

참고 : 다음 부분은 처음 읽을 때 약간 기술적 인 부분 일 수 있습니다.

NP


Vxtk
YESkVxtNO

UniVerNP

N P 의 문제에 대해 검증 자 를 가져 가라VNPxVxUniVer
tkVxVx

tttk

NPUniVerNP

시간 경계 인터프리터
입력 : 알고리즘의 부호 , 입력 X 에 대한 M 및 다수MxMt
YESMxYEStNOYESt

CPt

Interpreter

UniVerNPMxtkcckInterpreterMYESxct

SATNP

UniVerNPUniVerNP

NPSAT

SAT


φ
YESφNO

SATNP


쓰려면 ...

NP

NP

NP

PNP

무엇 향후 계획? 여기서 어디로 가야합니까?


6
한 번 이상 공표 할 수 있기를 바랍니다. 답변 해 주셔서 감사합니다.
Fingolfin

2
와우, 멋진 기사! 또한 발표 된 부품을 기대하고 있습니다. "NP 완료 문제를 해결해야 할 경우 어떻게해야합니까?"
Tobias Hermann

5
@ xci13 당신은 할 수 있습니다! 첫 번째 부분을
찬성

4
두 게시물을 모두 투표하기 위해 여기에 계정을 만들었습니다.
ghosts_in_the_code

6
@Kaveh이 훌륭하게 작성된 기사를 완성 할 계획이 있습니까?
Gab

26

유용 이상 언급 한 답변은, 당신이 추천 매우 "보고 : NP 문제을 대 P 너머 계산 에 의해" 마이클 십서 . 이 비디오는 컴퓨터 과학의 주요 교육 비디오 중 하나로 보관해야한다고 생각합니다.!

즐겨!


흥미롭게도, 나의 교과서가 그의 것입니다. 끔찍한 책은 아니지만 일부는 바람직하지 않습니다.
agent154

8

스택 오버플로에서 비슷한 질문에 대한 답변 복사 :

기술을 익히지 않고 Pv. NP 등을 설명하는 가장 쉬운 방법은 "단어 문제"와 "다중 선택 문제"를 비교하는 것입니다.

"단어 문제"를 해결하려고 할 때 해결책을 처음부터 찾아야합니다. "다중 선택 문제"를 해결하려고 할 때 선택해야합니다. "단어 문제"와 같이 문제를 해결하거나 주어진 각 답변을 연결하고 적합한 후보 답변을 선택하십시오.

"복수 선택 문제"는 해당 "단어 문제"보다 훨씬 쉽습니다. 후보 답변을 대체하고 적합한 지 확인하는 것은 처음부터 올바른 답변을 찾는 것보다 훨씬 적은 노력이 필요할 수 있습니다.

이제 우리가 다항식 시간을 "쉬운"소요하는 노력에 동의한다면, 클래스 P는 "쉬운 단어 문제"로 구성되고 클래스 NP는 "쉬운 객관식 문제"로 구성됩니다.

P. NP의 본질은 "단어 문제로는 쉽지 않은 쉬운 객관식 문제가 있습니까?"라는 질문입니다. 즉, 주어진 답변의 유효성을 쉽게 확인할 수 있지만 처음부터 그 답을 찾기가 어려운 문제가 있습니까?

NP가 무엇인지 직관적으로 이해 했으므로 직관에 도전해야합니다. 어떤 의미에서 가장 어려운 "복수 선택 문제"가 있다는 것이 밝혀졌습니다. 만약 그 "가장 어려운"문제 중 하나에 대한 해결책을 찾게되면 ALL에 대한 해결책을 찾을 수있을 것입니다 NP 문제! Cook이이 40 년 전에 발견 한 것은 완전히 놀랍습니다. 이러한 "가장 어려운"문제는 NP- 하드라고합니다. 당신이 그들 중 하나에 "단어 문제 해결"을 찾으면 자동으로 각각 "모든 쉬운 선택 선택 문제"에 대한 "단어 문제 해결"을 찾을 것입니다!

마지막으로 NP- 완전 문제는 NP와 NP-hard 문제입니다. 우리의 비유에 따르면, 그들은 "다중 선택 문제만큼 쉬움"과 "단어 문제로 가장 어려운 것"입니다.


NP가 무엇인지 직관적으로 이해 했으므로 직관에 도전해야합니다. "복수 선택 문제"가있는 것으로 나타났습니다. "단어 문제"를 의미 했습니까? 모든 NP 문제는 정의상 "다중 선택"처럼 쉽지 않기 때문에 그렇게 생각합니다.
Dmitry Grigoryev

라인으로 그것은 어떤 의미에서, 어려운 그들 모두의있다 "객관식 문제"가 있다고 판명 나는 의미 그것은, 어떤 의미에서, 어려운 그들 모두의이다 NP 문제가있는 것으로 나타났다가 . 이 NP 문제는 실제로 정의에 따라 객관식 문제쉽지만 단어 문제로 가장 어렵습니다 . 표준 예는 SAT3입니다. 객관식 문제는 쉽지만 단어 문제는 어렵습니다.
Michael

7

가장 간단한 것은 P이며, 다항식 시간에 해결할 수있는 문제가 여기에 속합니다.

그러면 NP가 온다. 비 결정적 튜링 머신에서 다항식 시간으로 해결할 수있는 문제가 여기에 속합니다.

경도와 완성도는 감소합니다. 문제의 A는 하드 C의 모든 문제가 A로 감소하면 문제 A는 경우, 클래스 C에 대한 NP 위해 열심히 또는 하드 NP-NP의 모든 문제 A.로 감소하면

마지막으로, 문제가 완전 이 경우 클래스 C에 대한 C 및 하드 귀하의 경우에는 C.에 대한, 문제의 A는 NP에 대한 완전한 NP의 모든 문제는 A를 줄일 경우, 또는 NP-완료, A는 NP에 .

NP에 대한 설명을 추가하기 위해 (결정적) 다항식 시간으로 솔루션을 확인할 수있는 경우에만 NP에 문제가 있습니다. 알고있는 NP- 완전 문제, SAT, CLIQUE, SUBSET SUM, VERTEX COVER 등을 고려하십시오. "해결 방법을 얻는다면"다항식 시간으로 정확성을 확인할 수 있습니다. 그들은 변수에 대한 진실 할당, 완전한 하위 그래프, 숫자의 부분 집합 및 모든 모서리를 지배하는 정점 집합입니다.


6

기본적으로 P vs. NP 및 Computational Complexity Zoo 비디오는 이해하기가 훨씬 간단 해 보입니다.

문제매우 큰 컴퓨터 의 경우 :

P 문제

해결하기 쉬운 (루빅스 큐브)

NP 문제

어렵지만 답변 확인이 쉽습니다 (스도쿠)

아마도 이것들은 모두 실제로 P 문제이지만 우리는 그것을 모릅니다 ... P 대 NP .

NP- 완료

많은 NP 문제가 같은 문제로 귀결됩니다 (sudoku는 목록의 새로운 이민자입니다).

경험치 문제

정말 열심히 (체스에서 가장 좋은 다음 움직임)

NP- 하드 문제

편집 : NP-hard는 비디오에서 잘 설명되지 않았습니다 (모두 분홍색 비트입니다), Wikipedia의 NP-hard Euler 다이어그램은 이것에 대해 더 명확합니다.

비디오 요약

P, NP, NP-complete, EXP 및 NP-hard의 칠판 오일러 다이어그램

Wikipedia NP-hard Euler 다이어그램

P, NP, NP-complete 및 NP-hard의 SVG 오일러 다이어그램


0

P , NP , NP-completeNP-hard 는 복잡도 클래스로, 문제 해결을위한 알고리즘 복잡도에 따라 문제를 분류합니다. 간단히 말해서 세 가지 속성을 기반으로합니다.

복잡성 클래스 테이블

다항식 시간 으로 해결 : 다항식 계산 시간을 사용하여 DTM (Deterministic Turing Machine)으로 해결할 수있는 결정 문제를 정의합니다. 즉, 실행 시간이 알고리즘의 입력 크기에서 다항식으로 상한입니다. Big-O 표기법을 사용하여이 시간 복잡도는로 정의되며 O(n ^ k), 여기서 n은 입력 크기 및 ka 상수 계수입니다.

다항식 시간으로 검증 할 수있는 솔루션 : 올바른 솔루션을 얻는 데 더 많은 시간이 필요할지라도 다항식의 계산 시간을 사용하여 DTM에서 주어진 솔루션을 확인할 수있는 결정 문제를 정의합니다.

다항식 시간의 모든 NP 문제 감소 : 다항식 시간 변환 단계 후 NP 문제를 해결하기 위해 알고리즘을 사용할 수있는 결정 문제를 정의합니다.


: 나는 최근에이 주제에 자세한 내용을 제공하는 NP-어려운 문제 내로 NP 문제를 줄이기위한 코드 데모를 포함에 대한 기사 작성했습니다 문제의 복잡성 클래스를

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