P 대 NP 대 NP Complete 대 NP 하드 이해


38

이러한 분류와 그 이유를 이해하려고합니다. 내 이해가 맞습니까? 그렇지 않다면 무엇?

  1. P는 다항식 복잡성 또는와 같은 음수가 아닌 실수의 경우입니다. 문제가 P에 속하는 경우 다항식 시간에 처음부터 문제를 해결할 수있는 알고리즘이 하나 이상 있습니다. 예를 들어, 항상 반복 하고 각 단계에서 나누면 검사하여 일부 정수 가 소수 인지 알아낼 수 있습니다 .O(nk)kO(1), O(n1/2), O(n2), O(n3)n2 <= k <= sqrt(n)kn

  2. NP는 비 결정적 다항식 복잡성입니다. 나는 그것이 비 결정적이라는 것이 무엇을 의미하는지 정말로 모른다. 다항식 시간으로 쉽게 확인할 수 있지만 답을 아직 알지 못하면 처음부터 다항식 시간으로 해결할 수도 있고 아닐 수도 있습니다. 다항식 시간으로 해결할 있기 때문에 모든 P 문제도 NP 문제입니다. 정수 인수 분해는 NP의 예로 인용되지만 평가 인수 분해에는 O(sqrt(n))시간 이 걸리기 때문에 개인적으로 P가 아닌 이유를 이해하지 못합니다 .

  3. NP-Complete 전혀 이해하지 못하지만 Traveling Salesman Problem이 이에 대한 예입니다. 그러나 제 생각에는 TSP 문제는 NP 일 수 있습니다 . 앞으로 경로가 주어 졌는지 확인하는 것과 같은 것이 필요하기 때문 입니다.O(2n n2) time to solve, but O(n)

  4. NP-Hard는 알 수없는 것으로 가득합니다. 확인하기 어렵고 해결하기 어렵다.


4
CS.SE에 대한 질문을 읽었습니까 ? P, NP, NP-complete 및 NP-hard의 정의는 무엇입니까? ?

아직 그 링크를 보지 못했습니다. 감사합니다
Nakano

1
이 CS.SE의 답변은 매우 경외심을 불러 일으키지 만 거의 세부적으로 설명하지 않고이 용어의 의미에 대해 매우 간결하고 오해의 소지가없는 설명을하는 것이 가능하다고 생각합니다. @Nakano는 더 짧은 "정확한"답변에 관심이 있거나 CS.SE 게시물이 문제를 해결합니까?
Ixrec

@MichaelT 나는 그 링크를 읽었고 그것이 실제로 장황하고 몇 가지 점에서 그다지 명확하지 않다는 것을 알았습니다. 나는 그것이 대답보다 더 많은 질문을 한 것처럼 느낍니다.
나카노

1
"비결정론 적"은 "컴퓨터가 매번 올바른 선택을 할 수있는 선택"으로 해석 될 수 있습니다.
Thorbjørn Ravn Andersen 님이

답변:


39

기본적으로 P와 NP는 정확하지만 NP-hard와 NP-complete는 정확하지 않습니다.

우선, 다음 네 가지 복잡성 클래스에 대한 간결한 정의가 있습니다.

  • P는 결정 론적 튜링 머신으로 다항식 시간으로 해결할 수있는 결정 문제의 클래스입니다.

  • NP는 비 결정적 튜링 머신으로 다항식 시간으로 해결할 수있는 의사 결정 문제입니다. 마찬가지로 결정 성있는 Turing machine으로 다항식 시간 으로 확인할 수있는 문제의 종류 입니다.

  • NP-hard는 결정적 튜링 머신을 통해 NP의 모든 문제를 다항식 시간으로 줄일 수있는 의사 결정 문제입니다.

  • NP- 완료는 NP-hard와 NP의 교차점입니다. 마찬가지로 NP-complete는 결정 론적 Turing machine에 의해 NP의 모든 문제를 다항식 시간으로 줄일 수있는 NP의 의사 결정 문제 클래스입니다.

다음 은 Wikipedia 의 오일러 다이어그램 으로 ,이 네 클래스 사이의 관계를 보여줍니다 (P가 NP와 같지 않다고 가정).

여기에 이미지 설명을 입력하십시오

내가 가장 익숙하지 않거나 혼동한다고 생각하는 부분은 문제 X에서 문제 Y 로의 "다항식 시간 단축"이라는 개념입니다. X에서 Y 로의 감소는 단순히 일부를 사용하여 X를 해결하는 알고리즘 A입니다. B 이외의 A의 모든 부분이 다항식 시간 복잡성을 갖는 경우,이 감소를 "다항식 시간 감소"라고한다. 간단한 예를 들어, 배열에서 가장 작은 요소를 찾는 문제는 정렬 문제에 대해 일정 시간 감소 할 수 있습니다. 배열을 정렬 한 다음 정렬 된 배열의 첫 번째 요소를 반환 할 수 있기 때문입니다.

NP-hard 정의에서 놓치기 쉬운 한 가지는 NP 문제에서 NP-hard 문제로 감소 하지만 반드시 그 반대로는 아니라는 것 입니다. 이는 NP-hard 문제가 NP 또는 Euler 다이어그램에서 볼 수 있듯이 훨씬 더 복잡한 클래스에 있거나 결정 가능한 문제가 아닐 수도 있음을 의미합니다. 그렇기 때문에 사람들은이 정보를 비공식적으로 설명하려고 할 때 종종 "NP-hard는 NP만큼 힘들다는 것을 의미합니다"라고 말합니다.

중지 문제는 Wikipedia가 설명하는 것처럼 NP에는없는 NP-hard 문제의 좋은 예입니다 .

중지 문제가 NP-hard이지만 NP-complete가 아님을 쉽게 증명할 수 있습니다. 예를 들어, 부울 만족도 문제는 모든 진실 값 할당을 시도하는 튜링 머신의 설명으로 변환하고 수식을 만족하는 것을 발견하면 중지되고 그렇지 않으면 무한 루프로 진행됩니다. NP의 모든 문제는 유한 한 횟수의 조작으로 결정될 수있는 반면, 정지 문제는 일반적으로 결정 불가능하기 때문에 정지 문제가 NP에 있지 않다는 것도 쉽게 알 수 있습니다.


3
@Nakano 직관적으로, 한 문제가 다른 문제의 하위 문제가되고 있다는 의미에서 "감소"입니다. 이러한 "감소"중 일부는 "하위 문제"를 잘못 선택함으로써 복잡성을 감소시키는 대신 복잡성을 증가 시킨다는 사실은 실제 코드에서 이러한 감소를 절대로 사용하지 않을 것임을 의미합니다. 솔직히 말해서 NP-hard는 나를 이상하고별로 흥미롭지 않은 클래스로 생각합니다. 그것을 무시하고 더 많은 NP 문제가 줄어드는 NP 문제 세트로 NP- 완료에 대해 생각하는 것이 더 유익 할 수 있습니다.
Ixrec

1
@Nakano stackoverflow.com/questions/12637582/... 나는 짧은 대답은 믿는 사람들은 일반적으로 N 등으로 큰-O 교정을하고 시작하는 정수 인수 분해, 그들은 일반적으로 정말 큰 정수를 얘기 순이익 것에 대해 이야기 할 때 "함수에 전달 된 정수의 수"대신 "정수가 메모리에서 차지하는 비트 수".
Ixrec

1
@Nakano 내가 링크 한 SO 질문과 내 의견이 그 문제를 해결하기에 충분하지 않으면이 정수 인수 분해에 대해 특별히 새로운 질문을 할 가치가 있습니다.
Ixrec

2
@Nakano : big-O 표기법에서는 n입력 값이 아니라 입력 크기 (요소 수, 바이트, 숫자 등)를 측정 한 것입니다.
Bart van Ingen Schenau

2
@Nakano 짧은 대답은 당신이 괜찮다는 것이므로 시간 복잡성 분석을 할 때 항상 n이 무엇을 의미하는지 지정해야합니다 . n이 "입력의 크기"라는 주장은 단순히 우리가 일반적으로 n을 정의하기로 선택한 방법에 대한 간결한 요약입니다. 그것은 큰 O 표기법이나 시간 복잡성에 대한 엄격한 정의의 일부가 아닙니다. n이 입력 값일 때 정수 인수 분해가 O (sqrt (n))라고 말하는 것이 맞습니다 . n이 크기를 의미하는 복잡성 결과는 일반적으로 n이 값을 의미하는 것보다 실제로 훨씬 더 유용합니다.
Ixrec

7

정수 인수 분해는 NP의 예로서 인용되지만, 평가 인수 분해에 O (sqrt (n)) 시간이 걸리기 때문에 개인적으로 P가 아닌 이유를 이해하지 못합니다.

복잡성 클래스의 목적 상 n, 입력 길이입니다. 당신이 요인 정수로 싶다면 k, n아니다 k하지만 log k비트 (또는 무엇이든)의 수는 수를 적어 걸립니다. 정수 인수 분해는 O(sqrt(k))당신이 말하는 것처럼, 이것은 어느 것입니다 .O(sqrt(2n))O(2(n/2))

NP-Hard는 알 수없는 것으로 가득합니다. 확인하기 어렵고 해결하기 어렵다.

NP-Hard는 문제를 해결하기가 얼마나 어려운지에 대한 것입니다.

NP- 하드 문제는 적어도 NP에서 가장 어려운 문제입니다. NP-Hard 문제에 대한 다항식 시간 알고리즘이 있다면 그 알고리즘을 NP의 모든 문제에 적용 할 수 있기 때문에 우리는 그것들이 적어도 어렵다는 것을 알고 있습니다.

NP- 완료 나는 전혀 이해하지 못한다

NP-Complete은 문제가 NP와 NP-Hard라는 것을 의미합니다. 즉, 솔루션을 신속하게 확인할 수 있지만 (NP-NP) 가장 어려운 문제 (NP-Hard)만큼 어렵습니다.

비 결정적이라는 것이 무엇을 의미하는지 잘 모르겠습니다.

비결정론은 NP의 대안 적 정의입니다. 비 결정적 튜링 머신은 언제든지 효과적으로 복제 할 수 있으며 각 복제본마다 다른 실행 경로를 갖습니다. 이 정의에서 NP는 자유롭게 복제 할 수있는 것보다 컴퓨터로 다항식 시간으로 해결할 수있는 문제의 집합입니다. 이것은 다항식 시간에서 확인할 수있는 것과 정확히 동일한 문제 세트입니다.


그렇다면 $ O (n ^ k) $ 시간 알고리즘이 NP 문제가 될 수 있습니까?
나카노

k상수 실수입니까? 예. 모든 P 문제도 NP 문제입니다. 다항식 시간으로 해결할 수있는 것은 다항식 시간으로도 확인할 수 있습니다.
Winston Ewert

길이 / 크기는 실제로 어떻게 정의됩니까? 예를 들어 큰베이스에 $ n $를 쓰면 쓸 때 길이를 줄일 수 있습니다. 정수를 명시 적으로 다루지 않지만 $ V $ 꼭짓점과 $ E $ 가장자리 등이있는 그래프를 말하는 문제는 어떻습니까?
Nakano

@Nakano, 실제로 큰 기반은 상수 요인 차이 일 뿐이므로 변경하지 않습니다. 따라서 다항식 대 비 다항식에는 영향을 미치지 않습니다. 그러나 단항으로 숫자를 쓰면 변경됩니다.
Winston Ewert

2
@Nakano, 흠 ... 난 복잡한 클래스를 5 살짜리로 설명하려고하지 않을 것입니다. : P
Winston Ewert

5

가장 먼저 이해해야 할 것은 PNP가 문제가 아니라 언어를 분류 한다는 입니다. 이것이 의미하는 바를 이해하려면 먼저 다른 정의가 필요합니다.

알파벳 기호 비어 있지 않은 유한 집합이다.

{ 0, 1}는 ASCII 문자 집합 인 알파벳입니다. {}은 비어 있기 때문에 알파벳이 아닙니다. N (정수)은 유한하지 않기 때문에 알파벳이 아닙니다.

Σ를 알파벳 이라고하자 . 에서 심볼의 유한 수의 순서 연결 Σ는 불리며 단어 이상 Σ를 .

문자열 101은 알파벳 { 0, 1} 위에있는 단어 입니다. 빈 단어 (종종 작성 ε는 ) 모든 알파벳을 통해 단어입니다. 문자열 penguin은 ASCII 문자를 포함하는 알파벳 위에있는 단어입니다. 숫자 π의 소수점 표기는 알파벳을 통해 단어 아니다 { ., 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}는 유한하지 않기 때문에.

다음 과 같이 쓰여진 단어 w길이 | w |는 그 안의 기호 수입니다.

예를 들어, | hello| = 5와 | ε | = 0. 모든 단어 w 에 대해 | | ∈ N 따라서 유한하다.

Σ를 알파벳 이라고하자 . 집합 Σ ε을 포함하여 Σ 이상의 모든 단어를 포함합니다 . 세트 Σ +ε을 제외한 Σ 에 대한 모든 단어를 포함합니다 . 들면 NN , Σ N은 길이의 단어의 집합이고 , N .

모든 알파벳 Σ , Σ Σ + 는 무한한 셀 수있는 세트 입니다. ASCII 문자 세트에 대한 Σ의 ASCII , 정규 표현식 .*.+나타낸다 Σ의 ASCII *Σ의 ASCII + 각각.

{ 0, 1} 7 7 비트 ASCII 코드 세트는 { 0000000, 0000001, ... 1111111}. { 0, 1} 32 는 32 비트 정수 값의 집합입니다.

하자 Σ는 알파벳과 수 LΣ * . LΣ 이상의 언어 라고합니다 .

알파벳의 경우 Σ , 빈 세트 Σ *는 이상 사소한 언어이다 Σ는 . 전자는 종종 빈 언어 로 불린다 . 빈 언어 {}와 빈 단어 { ε } 만 포함 된 언어 가 다릅니다.

비 NaN IEEE 754 부동 소수점 값에 해당하는 { 0, 1} 32 의 하위 집합은 유한 언어입니다.

언어는 단어 수에 제한이 없지만 모든 언어는 셀 수 있습니다. 문자열의 집합 { 1, 2, ...} 진수 표기법으로 정수를 나타내는 것은 알파벳을 통해 무한한 언어 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. 문자열의 무한한 세트 { 2, 3, 5, 7, 11, 13, ...} 진수 표기법 소수를 나타내는 것은 이들의 부분 집합이다. 정규식과 일치하는 모든 단어를 포함 [+-]?\d+\.\d*([eE][+-]?\d+)?하는 언어는 ASCII 문자 세트를 넘는 언어입니다 (C 프로그래밍 언어로 정의 된 유효한 부동 소수점 표현식의 서브 세트를 나타냄).

실수 세트가 셀 수 없기 때문에 모든 실수를 포함하는 언어는 없습니다 (모든 표기법으로).

하자 Σ는 알파벳과 수 LΣ * . 기계 D는 결정 L을 각 입력에 대한 경우 wΣ * 가 산출 특성 함수 χ L ( w를 유한 한 시간 내에). 특성 함수는 다음과 같이 정의됩니다

χ L : Σ  → {0, 1}
     w   ↦ 1,   wL 
         0, 그렇지 않으면

이러한 기계 를 L결정 자라고 합니다 . "given w , D outputs x "에 대해 " D ( w ) = x " 라고 씁니다 .

많은 기계 모델이 있습니다. 오늘날 실용화되고있는 가장 일반적인 것은 튜링 머신 의 모델 입니다 . 튜링 머신에는 셀에 클러스터링 된 무제한 선형 스토리지가 있습니다. 각 셀은 특정 시점에서 정확히 하나의 알파벳 기호를 보유 할 수 있습니다. 튜링 머신은 일련의 계산 단계로 계산을 수행합니다. 각 단계에서 하나의 셀을 읽을 수 있으며 값을 덮어 쓰고 읽기 / 쓰기 헤드를 한 위치 씩 왼쪽 또는 오른쪽 셀로 이동할 수 있습니다. 기계가 수행 할 작업은 유한 상태 자동 장치에 의해 제어됩니다.

유한 명령 세트와 무제한 저장 공간을 가진 랜덤 액세스 머신은 튜링 머신 모델만큼 강력한 또 다른 머신 모델입니다.

이 논의를 위해, 우리는 우리가 사용하는 정확한 기계 모델로 우리를 귀찮게 할 것이 아니라 기계가 유한 한 결정 론적 제어 유닛, 무제한 저장을 가지고 계산할 수있는 일련의 단계로서 계산을 수행한다고 말하는 것으로 충분합니다.

당신이 당신의 질문에 그것을 사용했기 때문에, 나는 당신이 이미 “big-O”표기법에 익숙하다고 가정 하므로 여기에 빠른 새로 고침 만 있습니다.

하자 F를 : N은 함수가 될 →. 집합 O ( f )에는 모든 함수 g : NN 이 포함되어 있습니다. 상수 n 0NcN 이 존재 하여 n > n 0 인 모든 nN 에 대해 g ( n ) ≤ c f ( n ).

이제 우리는 실제 질문에 접근 할 준비가되었습니다.

클래스 P는 모든 언어 포함 L 튜링 기계가 존재하는 D 결정 L 및 정수의 KN 마다 입력하도록 w , D를 가 정지 후 최대 T를 (| 함수의 단계를 |) TO ( nn k ).

때문에 O ( NN K ), 수학적으로 정확한 동안, 쓰기에 불편하고 읽기, 대부분의 사람들입니다 - 솔직히 말해서, 모두 자신을 제외하고는 - 일반적으로 단순히 기록 O ( N 케이 ).

바운드는 w 길이에 따라 다릅니다 . 따라서 소수의 언어에 대한 인수는 우나 레 인코딩의 숫자에 대해서만 정확합니다 . 여기서 , 숫자 n 의 인코딩 w 의 경우 인코딩 길이 | | n에 비례합니다 . 실제로 그러한 인코딩을 사용하는 사람은 없습니다. 그러나 가능한 모든 요인을 시도하는 것보다 고급 알고리즘을 사용 하면 입력이 이진 (또는 다른 기준)으로 인코딩 된 경우 소수의 언어가 P로 남아 있음을 알 수 있습니다 . (대단한 관심에도 불구하고 Manindra Agrawal, Neeraj Kayal 및 Nitin Saxena에 의해서만 증명 될 수 있음 2004 년 수상 논문에서 알고리즘이 그리 간단하지 않다고 추측 할 수 있습니다.)

사소한 언어 {} 및 Σ 와 사소하지 않은 언어 { ε }는 분명히 P (알파벳 Σ )입니다. 문자열을 입력으로 사용하는 함수를 좋아하는 프로그래밍 언어로 작성하고 문자열이 각 언어의 언어인지 여부를 알려주는 부울을 반환하고 함수에 다항식 런타임 복잡성이 있음을 증명할 수 있습니까?

모든 정규 언어 (정규 표현식으로 설명 된 언어)는 P 입니다.

하자 Σ는 알파벳과 수 LΣ * . 두 단어 w , cΣ 의 인코딩 된 튜플을 취하고 유한 단계 수 이후에 0 또는 1을 출력 하는 기계 V 는 다음 특성을 갖는 경우 L에 대한 검증기 입니다 .

  • (감안할 , C ) V 를 출력 한 경우에만 wL .
  • 모든 wL 에 대해 V ( w , c ) = 1 인 cΣ 가 있습니다 .

C 위의 정의는이라고 증인 (또는 인증서 ).

검증자가 w가 실제로 L에 있더라도 잘못된 증인에 대해 잘못된 부정을 줄 수 있습니다. 그러나 거짓 긍정을주는 것은 허용되지 않습니다. 또한 언어의 각 단어마다 적어도 한 명의 증인이 있어야합니다.

소수가 아닌 모든 정수의 십진 인코딩을 포함하는 COMPOSITE 언어의 경우 감시는 인수 분해가 될 수 있습니다. 예를 들어, ∈ COMPOSITE (659, 709)의 증인입니다 467231. 증인이없는 동안 한 장의 종이에서 쉽게 확인할 수 있으므로 컴퓨터를 사용하지 않으면 467231이 소수가 아니라는 것을 증명할 수 있습니다.

적절한 증인을 찾는 방법에 대해서는 아무 말도하지 않았습니다. 이것은 비 결정적 부분입니다.

클래스 NP는 모든 언어 포함 L 튜링 기계가 존재하는 V가 있는지 확인 된 L 및 정수의 KN 마다 입력되도록 ( w , C ), V를 정지하고 이후 최대 T (| W |) 함수의 단계 TO ( NN K ).

참고 위의 정의는 각각 것을 의미하는 것이 wL 증인이 존재 C 와 일 | c | ≤ T (| w |). 튜링 기계는 더 많은 증인의 상징을 볼 수 없습니다.

NPP 의 슈퍼 세트입니다 (이유는 무엇입니까?). NP 에는 있지만 P 에는없는 언어가 있는지는 알 수 없습니다 .

정수 인수 분해는 언어 자체가 아닙니다. 그러나 의사 결정 문제 와 관련된 언어를 구성 할 수 있습니다 . 즉, ndm 인 인수 d 를 갖도록 모든 튜플 ( n , m ) 을 포함하는 언어입니다 . 이 언어를 FACTOR라고하겠습니다. FACTOR를 결정하는 알고리즘이있는 경우 각 소인수에 대해 재귀 이진 검색을 수행하여 다항 오버 헤드만으로 전체 인수 분해를 계산하는 데 사용할 수 있습니다.

FACTOR가 NP 에 있음을 쉽게 알 수 있습니다. 적절한 증인은 단순히 요인 d 자체 일 뿐이며 모든 검증자는 dmn mod d = 0 인지 확인해야 합니다.이 모든 것은 다항식 시간으로 수행 할 수 있습니다. (이것은 즉, 다시 기억 부호화의 길이를 계산하고 그 즉 로그N ).

FACTOR도 P에 있음을 보여줄 수 있다면 멋진 상을 많이받을 수 있습니다. (오늘날 암호화의 상당 부분을 깨뜨 렸습니다.)

NP의 모든 언어 에는 결정 론적으로 결정 하는 무차별 알고리즘이 있습니다. 그것은 단순히 모든 증인에 대해 철저한 검색을 수행합니다. (증인의 최대 길이는 다항식에 의해 제한됩니다.) 따라서 PRIMES를 결정하는 알고리즘은 실제로 COMPOSITE를 결정하는 무차별 대입 알고리즘이었습니다.

최종 질문을 해결하려면 축소 를 도입해야합니다 . 감소는 이론적 인 컴퓨터 과학의 매우 강력한 개념입니다. 한 문제를 다른 문제로 줄이는 것은 기본적으로 다른 문제를 해결하여 한 문제를 해결하는 것을 의미합니다.

Σ 는 알파벳이고 ABΣ 이상의 언어 라고 하자 . A는 이고 다항식 시간 대일 환원성B 기능이 존재하는 경우 F를 : Σ *Σ * 다음 속성.

  • w ∈   ⇔   F ( w ∈) B   모두 wΣ * .
  • 함수 f 는 다항식으로 묶인 여러 단계에서 모든 입력 w 에 대해 튜링 머신에 의해 계산 될 수 있습니다. |.

이 경우 우리는 Ap B 라고 씁니다 .

예를 들어, A를 삼각형이 포함 된 모든 그래프 (인접 행렬로 인코딩 된)가 포함 된 언어로 지정하십시오. (삼각형은 길이가 3의주기입니다.) B 가 0이 아닌 모든 행렬을 포함하는 언어가되도록하십시오. (매트릭스 추적 주요 대각 원소의 합이다.) 다음에 A를 다항식 시간 대일 환원성 인 B . 이를 증명하려면 적절한 변환 함수 f 를 찾아야합니다 . 이 경우, 우리는 설정할 수 F를 3 계산하는 RD의 인접성 매트릭스 전원. 여기에는 다항식 복잡도를 갖는 두 개의 행렬 행렬 제품이 필요합니다.

Lp L 인 것은 사소한 사실입니다 . (공식적으로 증명할 수 있습니까?)

이제 이것을 NP에 적용하겠습니다 .

언어 L은 이다 NP의 -hard 경우에만, L '≤ P L 모든 언어에 대한 L '∈ NP .

NP -hard 언어는 나에 있지 않을 수 있습니다 NP 자체.

언어 L은 이다 순이익 - 완전한 경우만

  • LNP
  • LNP- 하드이다.

가장 유명한 NP 완성 언어는 SAT입니다. 만족할 수있는 모든 부울 수식이 포함되어 있습니다. 예를 들어, ( ab ) ∧ (¬ a ∨ ¬ b ) ∈ SAT. 유효한 감시는 { a = 1, b = 0}입니다. 공식 ( ab ) ∧ (¬ ab ) ∧ ¬ b ∉ SAT. (어떻게 증명하겠습니까?)

SAT∈ NP 를 나타내는 것은 어렵지 않습니다 . SAT 의 NP- hardness 를 보여주는 것은 약간의 작업이지만 1971 년 Stephen Cook에 의해 수행되었습니다 .

그 한 가지 NP 완성 언어가 알려 지면 축소를 통해 다른 언어 의 NP 완성도 를 나타내는 것이 비교적 간단했습니다 . 언어 ANP- hard 로 알려진 경우 Ap B를 표시하면 BNP- hard 임을 나타냅니다 (“≤ p ” 의 전이를 통해 ). 1972 년 Richard KarpNP 가 보여줄 수있는 21 개 언어 목록을 발표했습니다.SAT의 (전이) 감소를 통해 완료. (이 답변에서 실제로 읽어야 할 것이 권장되는 유일한 논문입니다. 다른 논문과 달리 이해하기 어렵지 않고 축소를 통해 NP- 완전성을 입증하는 방법에 대한 좋은 아이디어를 제공 합니다.)

마지막으로 간단한 요약입니다. NPHNPC 기호를 사용하여 각각 NP -hard 및 NP -complete 언어 의 클래스를 나타냅니다 .

  • PNP
  • NPCNPNPCNPH , 실제로 NPC = NPNPH 정의
  • ( ANP ) ∧ ( BNPH ) ⇒   Ap B

P = NP 인 경우에도 포함 NPCNP 가 적합 합니다. 이를 확인하려면, 자신이 더 적지 않은 언어가 사소한 일에 감소하지 않으며 사소한의 언어가 될 수 있음을 분명히 P 뿐만 아니라 사소하지 않은 언어 순이익은 . 그러나 이것은 (흥미롭지 않은) 코너 케이스입니다.

추가

혼란의 주요 원인은 실제로 입력의 길이 를 참조 할 때 알고리즘 입력 의 해석 으로 " O ( nf ( n ) " 의 " n "을 생각한 것으로 보입니다 . 이것은 알고리즘의 점근 적 복잡성 이 입력에 사용 된 인코딩에 의존한다는 것을 의미하기 때문에 중요한 차이점 입니다.

이번 주, 가장 큰 알려진 메르 센 총리 에 대한 새로운 기록 이 달성되었습니다. 현재 알려진 가장 큰 소수는 2 74 207 281 − 1입니다.이 숫자는 너무 커서 두통을 유발하므로 다음 예에서 더 작은 것을 사용할 것입니다. 2 31 – 1 = 2 147 483 647. 다른 방식으로 인코딩됩니다.

  • Mersenne 지수로 10 진수로 표시 : 31(2 바이트)
  • 10 진수로 : 2147483647(10 바이트)
  • 단항 번호로 : 를 2 147 483 640 개 이상으로 대체 할 11111…11곳 (거의 2 GiB)1

이 모든 문자열은 동일한 숫자를 인코딩하고이 중 하나가 주어지면 동일한 숫자의 다른 인코딩을 쉽게 구성 할 수 있습니다. 원하는 경우 10 진수 인코딩을 2 진, 8 진 또는 16 진으로 바꿀 수 있습니다. 길이는 상수 요소 만 변경합니다.

원시성을 테스트하기위한 순진한 알고리즘은 단항 인코딩에 대해서만 다항식입니다. AKS 소수 판별법은 소수 (또는 다른 기재에 대한 다항식 B ≥ 2). 뤼카 - 레머 소수 판별법은 메르 센에 대한 잘 알려진 알고리즘 소수가 인 M의 P를 함께 P 홀수 프라임하지만 여전히 메르 센 지수의 바이너리 인코딩의 길이에 지수 함수 P (다항식 P ).

알고리즘의 복잡성에 대해 이야기하려면 어떤 표현을 사용하는지 명확하게 나타내는 것이 매우 중요합니다. 일반적으로 가장 효율적인 인코딩이 사용된다고 가정 할 수 있습니다. 즉, 정수에 대한 이진입니다. 모든 소수가 Mersenne 소수는 아니므로 Mersenne 지수를 사용하는 것이 일반적인 인코딩 체계는 아닙니다.

이론적 암호화에서는 많은 알고리즘이 공식적으로 첫 번째 매개 변수로 ks 1 의 완전히 쓸모없는 문자열을 전달합니다 . 이 알고리즘은 결코이 매개 변수에 보지 않는다 그러나 그것은 공식적으로 다항식 될 수 있습니다 K 는 IS, 보안 매개 변수 조정 절차의 보안을 사용했다.

이진 인코딩의 의사 결정 언어가 NP -complete 인 일부 문제의 경우, 포함 된 숫자의 인코딩이 단항으로 전환되면 의사 결정 언어는 더 이상 NP 완료 되지 않습니다 . 다른 문제에 대한 의사 결정 언어는 그때까지도 NP 완료 상태로 남아 있습니다 . 후자라고 강하게 순이익 - 완전한 . 가장 잘 알려진 예는 빈 포장 입니다.

입력이 압축 되면 알고리즘의 복잡성이 어떻게 변하는 지 보는 것도 흥미 롭습니다 . 메르 센 소수의 예에서 우리는 세 가지 인코딩을 보았는데, 각각의 인코딩은 이전보다 로그 압축이 더 압축되었습니다.

1983 년 Hana Galperin과 Avi Wigderson 은 그래프의 입력 인코딩이 로그 압축 될 때 일반적인 그래프 알고리즘의 복잡성에 관한 흥미로운 논문을 작성했습니다. 이러한 입력의 경우, 위에서 삼각형이 포함 된 그래프의 언어 ( P 는 명확하게 P에 있음 )가 갑자기 NP 완성이됩니다.

PNP 와 같은 언어 클래스 는 문제가 아닌 언어를 위해 정의 되었기 때문 입니다.


이 답변은 아마도 asker에 대한 이해 수준에는 유용하지 않을 것입니다. 다른 답변을 읽고 Nanako가 어려움을 겪고있는 것을보십시오. 이 답변이 도움이 될 것이라고 생각하십니까?
Andres F.

이 답변은 OP에는 도움이되지 않지만 다른 독자 (자체 포함)에게는 도움이 될 수 있습니다.
가브리엘

4

나는 당신에게 동일한 비공식적 인 정의를 줄 것이다.

P 문제 : 다항식 시간에 해결할 수있는 문제. 효율적으로 해결할 수있는 문제가 포함되어 있습니다.

NP 문제 : 다항식 시간으로 확인할 수있는 문제입니다. 예 : 여행 판매원, 회로 설계. NP 문제는 일종의 퍼즐과 같습니다 (스도쿠 같은). 문제에 대한 올바른 해결책이 주어지면 솔루션을 매우 빠르게 확인할 수 있지만 실제로 해결하려고하면 영원히 걸릴 수 있습니다.

이제 P 대 NP는 실제로 솔루션을 신속하게 확인하여 문제를 해결할 수 있는지 묻습니다. 그러면 항상 해결하는 빠른 방법이 있습니까? 수학적으로 표현하면 NP는 P의 부분 집합인가?

이제 NP 완료로 돌아갑니다. NP 문제에서 실제로 어려운 문제입니다. 따라서 NP 완료를 해결하는 더 빠른 방법이 있으면 NP 완료가 P가되고 NP 문제가 P로 축소됩니다.

NP 하드 : 다항식 시간에도 확인할 수없는 문제는 np 하드입니다. 예를 들어, 체스에서 최고의 움직임을 선택하는 것이 그 중 하나입니다.

확실하지 않은 내용이 있으면 다음 동영상을 시청하십시오. https://www.youtube.com/watch?v=YX40hbAHx3s

이것이 흐릿한 윤곽을 제공하기를 바랍니다.

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