첫 번째 것은 이해하기는 P NP 분류 언어,지 않는 문제입니다. 이것이 무엇을 의미하는지 이해하려면 먼저 몇 가지 다른 정의가 필요합니다.
알파벳은 비어 있지 않은 유한 기호 집합입니다.
{0
1
}은 알파벳으로 ASCII 문자 집합입니다. {}는 비어 있기 때문에 알파벳이 아닙니다. N(정수)은 유한하지 않기 때문에 알파벳이 아닙니다.
Σ 가 알파벳이되도록하십시오. Σ 에서 유한 한 기호 수의 정렬 된 연결을 Σ 이상의 단어라고합니다.
문자열101
0
1
penguin
는 ASCII 문자를 포함하는 알파벳 위의 단어입니다. Decimal notation 수의 π 은 말씀 위에 알파벳{.
0
1
2
3
4
5
6
7
8
9
}지 않기 때문에 그것은 유한합니다.
|w|로 쓰여진 단어 w 의 길이는 그 안에있는 기호의 수입니다.예를 들어,/
예를 들어,/hello
|=5 및|ε/=0 입니다. 어떤 단어 w,|w|∈N 따라서 유한합니다.
Σ 가 알파벳이되도록하십시오. 집합 Σ*는 Σ 를 포함하여 Σ 이상의 모든 단어를 포함합니다. 집합 Σ+는 Σ 를 제외한 Σ 이상의 모든 단어를 포함합니다. N∈N 의 경우 Σn 은 길이 n 의 단어 집합입니다.
모든 알파벳 Σ,Σ*및 Σ+는 무한 셀 수있는 집합입니다. 를 위해 ASCII 문자 집합 ΣASCII,정규 표현식을.*
.+
나타내 ΣASCII*및 ΣASCII+각각합니다.
{0
1
}7 는 설정의 7-bit ASCII 코드{0000000
0000001
1111111
0
1
}32 는 32 비트 정수 값의 집합입니다.
Σ 가 알파벳이되도록하고 L⊆Σ*. L 은 Σ 이상의 언어라고합니다.알파벳 Σ 의 경우 빈 집합과 Σ*는 Σ 이상의 사소한 언어입니다. 전자는 종종 빈 언어라고합니다. 빈 언어{}와 빈 단어{ε}만 포함하는 언어는 다릅니다.
하위 집합의{
0
1
}32 에 해당하는 비 NaN IEEE754 부동 소수점 값은 유한 언어입니다.언어는 무한한 수의 단어를 가질 수 있지만 모든 언어는 셀 수 있습니다. The set of strings {
1
2
, …} denoting the integers in decimal notation is an infinite language over the alphabet {0
1
2
3
4
5
6
7
8
9
2
3
5
7
11
13
?\d+\.\d*(?\d+)?
는 언어를 통해 ASCII 문자 집합(나타내는 하위 집합의 유효한 부동 소수점으로 표현에 의해 정의는 C 프로그래밍 언어).실제 숫자 집합은 셀 수 없기 때문에 모든 실제 숫자(표기법)를 포함하는 언어가 없습니다.
Σ 가 알파벳이되도록하고 L⊆Σ*. 기계 D 는 모든 입력 w&in 에 대해 l 을 결정합니다.Σ*유한 시간에 특성 함수 xL(w)을 계산합니다. 성 기능으로 정의
χL: Σ* → {0, 1} w ↦ 1, w ∈ L 0, otherwise.이러한 컴퓨터라고 결정한 L. 우리가 쓰는”D(w)x=””에 대한 주 w,D 출력 x”.
많은 기계 모델이 있습니다. 오늘날 실용적으로 사용되는 가장 일반적인 것은 튜링 기계의 모델입니다. 튜링 기계는 무제한 선형 저장소가 셀에 클러스터되어 있습니다. 각 셀은 어느 시점에서든 알파벳의 기호 하나를 정확하게 보유 할 수 있습니다. 튜링 기계는 일련의 계산 단계로 계산을 수행합니다. 각 단계에서,그것을 읽을 수 있는 하나의 셀,가능하게 덮어 그것의 가치와 이동 읽기/쓰기 머리에 의해 하나의 왼쪽이나 오른쪽 셀입니다. 기계가 수행 할 작업은 유한 상태 오토 마톤에 의해 제어됩니다.
랜덤 액세스를 가진 기계 유한 지침의 설정과 무한한 스토리지는 다른 컴퓨터 모델을 만큼 강력링 기계 모델입니다.
을 위해서 이론,우리는 것이 귀찮게 하지 않으로 우리의 정확한 기계 모델로는 우리가 사용하지만 오히려하게 말할 수 있는 기계 유한 결정적인 제어 장치,무제한 저장하고 수행하는 계산 시퀀스로의 단계할 수 있는 계산됩니다.
때문에 당신은 그것을 사용했에서 당신의 질문에,나는 가정으로”big-O”표 그래서 여기에만 빠른시합니다.이 함수를 호출하면 다음과 같이 할 수 있습니다. Set O(f)의 모든 기능을 포함하 g:N→N 가 있는 존재 상수 n0∈N c∈N 는 모든 n∈N n>n0 그것은 사실 g(n)≤c f(n).
이제 우리는 실제 질문에 접근 할 준비가되었습니다.
등 P 이 모두 포함 언어 L 위해 존재 Turing machine D 는 결정하 L 와 지속적인 k∈N 는 모든 입력 w,D 을 중단 한 후에 가 T(|w|)단계 기능 T∈O(n↦nk).
이후 O(n↦nk),하는 동안 수학적으로 올바른 불편을 읽고 쓰기,대부분의 사람들–솔직히 말해서,모두를 제외하고 자신–일반적으로 기록 단순히 O(nk).
주는 바에 따라 달라의 길이 있습니다. 따라서,인수를 위해 만들어의 소수가 유일한 올바른 숫자에 unaray 인코딩을,어디서에 대한 인코딩 w 의 수 n,의 길이 인코딩|w|에 비례 n. 아무도 이용하는 인코딩에 있습니다. 를 사용하여 고급 알고리즘을 보다는 단순히려 가능한 모든 요인이 될 수 있고,다음과 같다,그러나,언어의 소수에 남아 있 P 면 입력은 인코딩된 바이너리(또는 다른 기준). (에도 불구하고 대규모 관심이 있는 검증 Manindra 왈,Neeraj 카얄 및 Nitin Saxena 에서 상을 받은 종이에서 2004 년도 추측할 수 있는 알고리즘은 아주 간단합니다.)
사소한 언어{}와 Σ*그리고 사소한 언어{ε}는 분명히 p 에 있습니다(모든 알파벳 Σ 에 대해). 을 쓸 수 있는 기능을 좋아하는 프로그래밍 언어가는 문자열을 입력으로 돌아와 부울을 말하는지 여부를 문자열에서 단어의 언어를 이러한 각각의 것을 증명하고 당신의 기능은 다항식-실행 시간 복잡도?
모든 정 언어(언어 설명에 의해 일반현)is in P.
자 Σ 수 있는 알파벳 L⊆Σ*. 기계 V 는 인코딩된 튜플의 두 단어를 w,c∈Σ*및 출력에 0 또는 1 유한 수 후의 단계는 검증을 위한 L 이 있는 경우 다음과 같은 속성이 있습니다.
- 주어진(w,c),V 는 모든 w∈L 에 대해 w∈L.
- 인 경우에만 1 을 출력합니다.
위의 정의에서 c 는 증인(또는 인증서)이라고합니다.
verifier 는 w 가 실제로 L 에 있더라도 잘못된 증인에 대해 거짓 네거티브를 제공 할 수 있습니다. 또한 언어의 각 단어에 대해 적어도 한 명의 증인이 존재해야합니다.
언어에 대한 합성,이 포함된 소수의 인코딩 모든 정수는지라,증인이 될 수 있을 인수 분해. 예를 들어,(659, 709)
467231
∈COMPOSITE 에 대한 증인입니다. 당신은 쉽게 확인할 수 있는 종이 한 장에 있는 동안없이 목격이 주어진 것을 증명하는 467231 지 않 prime 기 어려울 것 없이 사용하는 컴퓨터입니다.
우리는 적절한 증인이 어떻게 발견 될 수 있는지에 대해 아무 말도하지 않았습니다. 이것은 비 결정적 부분입니다.
클래스 NP 이 모두 포함 언어 L 위해 존재 Turing machine V 확인하는 L 와 지속적인 k∈N 는 모든 입력(w,c),V 을 중단 한 후에 가 T(|w|)단계 기능 T∈O(n↦nk).
위의 정의는 각 w∈L 에 대해|c|≤T(|w/)가있는 증인 c 가 존재 함을 의미합니다. (튜링 기계는 아마도 증인의 상징을 더 많이 볼 수 없습니다.)
NP 는 P 의 상위 집합입니다(왜?). Np 에 있지만 P.
정수 인수 분해가 언어 자체가 아닌 언어가 존재하는지 여부는 알 수 없습니다. 그러나 우리는 그와 관련된 결정 문제를 나타내는 언어를 구성 할 수 있습니다. 즉,n 이 d&leq 인 요인 d 를 갖도록 모든 튜플(n,m)을 포함하는 언어입니다. 가 있으면 알고리즘을 결정하는 요인,그것은 수를 계산하는데 사용될 전체 인수 분해과만 다항식 오버헤드를 수행하여 재귀 검색에 대한 각각의 주요 요인입니다.
그 요인이 NP 에 있음을 보여주는 것은 쉽습니다. 적절한 증인은 단순히 요인 d 자체이며 검증자가해야 할 모든 것은 d≤m 및 n mod d=0 임을 확인하는 것입니다. 이 모든 것은 다항식 시간에 이루어질 수 있습니다. (을 기억 다시는 그것의 길이를 인코딩하는 계산과하는 로그에서 n.)
경우에 당신을 보여줄 수 있는 요인은 또한에서 P,확신할 수 있습을 얻을 수 많은 멋진 상입니다. (그리고 당신은 오늘날의 암호의 상당 부분을 깨뜨 렸습니다.)
NP 의 모든 언어에 대해 결정적으로 결정하는 무차별 대입 알고리즘이 있습니다. 그것은 단순히 모든 증인에 대한 철저한 검색을 수행합니다. (증인의 최대 길이는 다항식에 의해 제한된다는 점에 유의하십시오.)그래서 소수를 결정하는 알고리즘은 실제로 합성을 결정하는 무차별 알고리즘이었습니다.
최종 질문을 해결하려면 감소를 도입해야합니다. 감소는 이론적 인 컴퓨터 과학의 매우 강력한 개념입니다. 을 줄 하나의 문제는 다른 기본적으로 해결을 의미한다 하나의 문제에 의하여 해결하는 또 다른 문제가 발생할 수 있습니다.
Σ 는 알파벳이고 A 와 B 는 Σ 이상의 언어가되도록하십시오. A 는 함수 f 가 존재하는 경우 B 로 환원 할 수있는 다항식 시간 다원식입니다:Σ*→Σ*다음과 같은 특성을 갖습니다.
- w∈A f f(w)∈b 모든 w∈Σ*.
- 함수 f 는|w|에서 다항식으로 묶인 여러 단계의 모든 입력 w 에 대해 튜링 기계로 계산할 수 있습니다.
이 경우에,우리는 우리를 쓰≤p B.
예를 들어 보자 되는 언어이 모두 포함 그래프(로 인코딩된 인접 매트릭스)을 포함하는 삼각형이다. (삼각형은 길이 3 의주기입니다.)추가 B 가 0 이 아닌 추적을 가진 모든 행렬을 포함하는 언어가되도록하십시오. (행렬의 추적은 주요 대각선 요소의 합계입니다. 우)은 다항식 시간 다 중 하나에 환원하 B. 이를 증명하기 위해,우리는 우리를 찾을 필요가 적절한 변환 기능을 f. 이 경우 설정할 수 있습니다 f 을 계산하는 제 3 회원의 인접성 매트릭스입니다. 이를 위해서는 두 개의 행렬-행렬 곱이 필요하며 각 곱은 다항식 복잡성을 갖습니다.
l≤p L.(공식적으로 증명할 수 있습니까?)
지금 NP 에 적용하겠습니다.
언어 L 은 모든 언어 L’∈NP 에 대해 L’≤p L 인 경우에만 NP-hard 입니다.
NP 하드 언어는 NP 자체에있을 수도 있고 아닐 수도 있습니다.
A language L 은 np-complete if and only if
- L∈NP 및
- L 이 NP-hard.
가장 유명한 NP-complete 언어는 SAT 입니다. 만족할 수있는 모든 부울 수식이 포함되어 있습니다. 예를 들어,(a∨b)∧(a∨b)∈SAT. 유효한 증인은{a=1,b=0}입니다. 공식(a∨b)∧(a∨b)∧b SAT SAT. (어떻게 그걸 증명하겠습니까?)
SAT∈NP 를 보여주는 것은 어렵지 않습니다. SAT 의 NP-경도를 보여주는 것은 몇 가지 일이지만 Stephen Cook 에 의해 1971 년에 이루어졌습니다.
일단 하나의 NP-complete 언어가 알려지면 감소를 통해 다른 언어의 NP-complete 를 보여주는 것이 상대적으로 간단했습니다. 언어 A 가 NP-hard 로 알려진 경우 a≤p B 가 B 가 NP-hard 임을 보여줍니다(“≤p”의 전이성을 통해). 1972 년 리차드 카프(Richard Karp)는 sat 의(전이)감소를 통해 np-complete 이었음을 보여줄 수있는 21 개 언어 목록을 발표했습니다. (이것은 내가 실제로 당신이 읽어야하는 것이 좋습니다이 답변의 유일한 종이입니다. 다른 사람과는 달리,그것은 이해하기 어렵지 않다고 아주 좋은 생각이 어떻게 증명하는 NP 완전성을 감소를 통해 작동합니다.)
마지막으로,짧은 요약. Nph 및 NPC 기호를 사용하여 각각 NP-hard 및 NP-complete 언어의 클래스를 나타냅니다.
- P⊆NP
- NPC&하위 집합; NP 및 NPC&하위 집합;NPH,실제로 NPC=NP∩NPH 에 의해 정의
- (A∈NP)∧(B∈NPH)⇒≤p B
참고 포함 NPC&하위 집합;NP 은 적절한 경우에는 P=NP. 이것을 볼 자신 없음을 분명히 아닌 사소한 언어 줄일 수 있습니다 사소한 한개 있고 사소한 언어에서 P 뿐만 아니라 아닌 사소한 언어 NP. 이것은(매우 흥미롭지는 않지만)코너 케이스입니다.
의 기본 소스의 혼란을 것 같다는 생각을 했다”n”에서”O(n↦f(n))”으로 해석하는 알고리즘을 입력 할 때 실제로 그것을 참조하의 길이를 입력합니다. 이것은 중요한 차이는 것을 의미하기 때문에 점근의 복잡도 알고리즘에 따라 달라집에 사용되는 인코딩에 대한 입력.
이번 주,가장 큰 알려진 Mersenne prime 에 대한 새로운 기록이 달성되었습니다. 현재 알려진 가장 큰 소수는 다음과 같습니다 274 207 281 − 1. 이 숫자는 너무 커서 두통을 주므로 다음 예제에서 더 작은 것을 사용하겠습니다: 231 – 1 = 2 147 483 647. 그것은 다른 방법으로 인코딩 될 수있다.
- 의 메르센 지수를 소수점 번호:
31
(2bytes) - 로 진수:
2147483647
(10bytes) - 으로 단항 번호:
11111…11
…
1
s(2GiB)
이러한 모든 문자열로 인코딩은 동일한 번호로 부여 모든 이,우리는 쉽게 구성 다른 모든 인코딩의 번호입니다. (원한다면 10 진수 인코딩을 2 진수,8 진수 또는 16 진수로 바꿀 수 있습니다. 그것은 단지 일정한 요인에 의해 길이를 변경합니다.)
원시성을 테스트하기위한 순진한 알고리즘은 단항 인코딩에 대해서만 다항식입니다. AKS primality test 는 십진수(또는 다른 기본 b≥2)에 대한 다항식입니다. Lucas-Lehmer 최초 테스트는 잘 알려진 알고리즘에 대한 Mersenne 소수 Mp p 이상한 주요 하지만 그것은 아직도 지수로서 길이의 바이너리 인코딩의 메르센 지 p(다항식에서 p).알고리즘의 복잡성에 대해 이야기하고 싶다면 어떤 표현을 사용하는지 매우 분명하다는 것이 매우 중요합니다. 일반적으로 가장 효율적인 인코딩이 사용된다고 가정 할 수 있습니다. 즉,정수에 대한 2 진수입니다. (모든 소수가 Mersenne prime 인 것은 아니므로 Mersenne 지수를 사용하는 것은 일반적인 인코딩 체계가 아닙니다.)
이론 암호화,많은 알고리즘은 공식적으로 통과 완전히 쓸모없는 문자열의 k1
의 첫 번째 매개 변수입니다. 알고리즘을 보지 않는 이 매개 변수이지만 그것은 그것은 공식적으로 수항식 k 는 보안하는 데 사용되는 매개 변수를 조정한 보안의 절차입니다.
일부에 대한 문제에 대한 결정에서 언어진 인코딩은 NP-complete,결정은 언어가 더 이상 NP-complete 는 경우 인코딩을 포함 숫자로 전환해 단일체. 다른 문제에 대한 결정 언어는 그때에도 np-complete 로 남아 있습니다. 후자는 강하게 NP-complete 라고합니다. 가장 잘 알려진 예는 빈 포장입니다.
입력이 압축되면 알고리즘의 복잡성이 어떻게 변하는 지 보는 것도 흥미 롭습니다. 예를 들어 메르센의 소수가는 세 가지 인코딩을,각각의 로그로 더 많은 압축 이전 모델보다.
1983 년 Hana Galperin 과 Avi Wigderson 은 그래프의 입력 인코딩이 대수로 압축 될 때 일반적인 그래프 알고리즘의 복잡성에 대한 흥미로운 논문을 작성했습니다. 이러한 입력의 경우 위에서 삼각형을 포함하는 그래프의 언어(명확하게 P 에 있음)가 갑자기 NP-complete 가됩니다.왜냐하면 p 와 NP 와 같은 언어 클래스는 문제가 아니라 언어에 대해 정의되기 때문입니다.