왜 복잡성 클래스들 사이의 평등이 하향이 아닌 상향으로 번역 되는가?


25

안녕하세요, 패딩 트릭을 사용하면 복잡한 클래스를 위쪽으로 변환 할 수 있습니다 (예 : . 패딩은 입력을 "팽창"하여 변환 (예 : 에서 )을 실행하여 패딩 된 입력에서 실행할 수있는 "매직"알고리즘을 생성합니다. 이것이 기술적으로 의미가 있지만, 이것이 어떻게 작동하는지 잘 이해할 수 없습니다. 여기서 정확히 무슨 일이 일어나고 있습니까? 패딩이 무엇인지에 대한 간단한 비유가 있습니까?N P PP=NPEXP=NEXPNPP

이것이 왜 상식적인 이유를 제공 할 수 있습니까 ?


11
복잡한 클래스 결과가 모두 위로 올라가지는 않는다고 지적하고 싶습니다. 예를 들어 를 증명 했다면 의미 합니다. 일반적으로 붕괴는 증가하고 분리는 감소합니다. P N PEXPNEXPPNP
Robin Kothari

과연. 실제로, 분리가 붕괴보다 더 직관적이기 때문에 이것은 그것에 대해 생각하는 좋은 방법처럼 보입니다.
gabgoh

2
@Robin, @gabgoh : 일부 축소는 아래쪽으로 진행되지만 인수를 채우면 안됩니다. 예를 들어 arxiv.org/abs/cs/9910008을 참조하십시오 .
Joshua Grochow

답변:


30

이 문제에 대한 직관을 얻는 가장 좋은 방법은 지수 시간 수업의 완전한 문제가 무엇인지 생각하는 것입니다. 예를 들어, NE에 대한 완전한 문제는 간결하게 설명 가능한 입력에 대한 표준 NP- 완전한 문제입니다. 예를 들어 그래프의 인접 행렬을 설명하는 회로가있는 경우 그래프는 3 색입니까? 그런 다음 E = NE인지의 문제는 간결하게 서술 가능한 입력에 대해 다항식 시간으로 NP 문제를 해결할 수 있는지 여부, 예를 들어 효과적인 Kolmogorov 복잡도를 가진 입력 문제와 동등 해집니다. 이것은 모든 입력에서 해결할 수 있는지 여부보다 더 강력하지 않습니다. 시간 제한이 클수록 관련 입력의 Kolmogorov 복잡성이 더 작아 지므로 더 큰 시간 제한에 대한 축소는 사실상 작은 입력 하위 집합에서 작동하는 알고리즘입니다.

러셀 임 팔리 아초


14

OK, 목표가 보여주는 것이다 그래서 에 두는 C L S S 1 [ g ( n ) ] = C L A S S 2 [ h ( n ) ]CLASS1[g(f(n))]=CLASS2[h(f(n))]CLASS1[g(n)]=CLASS2[h(n)](우리는이 클래스가 정확히 무엇인지 지정하지 않고 입력 크기로 매개 변수가 있음을 알고 있습니다). 알고리즘 A에 의해 결정된 언어 있습니다. 이제 언어하게 L을 ' 각 단어 패딩하여 X L을 그것의 길이 지금 그래서, f를 ( N ) , 우리는에 포함되는 것을 알 C L S S 1 [ gLCLASS1[g(f(n))]ALxLf(n) (우리의 새로운 알고리즘 A '는 기본적으로 추가 된 0을 무시하고 실제 짧은 입력에서 A 를실행합니다).CLASS1[g(n)]AA

우리가하는 일은 : 우리는 더 큰 클래스에서 언어를 가져 와서 더 약한 알고리즘으로 해결할 수 있도록 더 작은 클래스에 포함시킬 수 있도록 약한 알고리즘으로 할 수 있습니다. '실제 작업'은 이전과 동일하지만 입력을 확장하여 제한 사항 (입력 길이의 기능)을 해제했습니다.

이제 알고 , 따라서 L 'C L S S 2 [ H ( N ) ] (일부 알고리즘에 의해 결정 B ' ). 여기에서 L C L A S S 2 [ h ( f ( n ) ) ]로 이동하고 싶습니다LCLASS1[g(n)]LCLASS2[h(n)]BLCLASS2[h(f(n))]. 그러나 그것은 간단합니다 -L을 결정하는 알고리즘 는 그에 따라 입력을 채우고 패딩 된 입력에서 B ' 를 실행 합니다.BLB

이 단계는 다음과 같이 요약 될 수 있습니다. 우리 는 더 크고 더 많은 자원을 갖춘 클래스에서 을 결정하려고합니다 . 추가 리소스를 사용하여 입력을 채운 후 채움 언어를 결정하는 알고리즘을 실행합니다L .

물론 여기에 관련된 기술적 인 세부 사항이 있습니다 (우리가 고려하는 클래스에서 패딩을 구현할 수 있는지 확인해야 함). 그러나 나는 일반적인 직감을 부여하기 위해 무시합니다.


13

나는 표현의 소형화 측면에서 패딩 논쟁을 봅니다. 두 개의 번역기 튜링 머신을 생각해보십시오. 인스턴스를 폭발시키고 C는 다시 압축합니다.BC

패딩 인수는 B 와 하위 비결정론 적 클래스의 언어에 대한 결정 론적 버전의 TM을 구성 하여 와 함께 작동합니다 . B 의 출력은 전체적으로 간결하게 표현되지 않은 언어를 형성하므로 "더 쉬워진다".BBB

쉬운 클래스의 일부 언어 만 하드 클래스의 언어를 불어서 생성하므로 사용하여 다른 방법으로 아이디어를 적용 할 수 없습니다 .C


5

보다 직관적으로 만들기 위해 더 추상적 인 상황을 살펴 보겠습니다!

우리는 두 가지 변형이 있는데, 하나는 입력과 다른 하나는 문제에 대한 것입니다. 나는 둘 다 로 표시 할 것입니다. 그것은 그것이 첫 번째 일 때와 두 번째 일 때의 맥락에서 분명해질 것입니다.pad

이 두 변환에는 다음과 같은 속성이 있습니다.

I. 모든 문제 , 모든 입력 x Σ :AΣxΣ

iff x A ,pad(x)pad(A)xA

II. 만약 E X P ( N E X P ), 그런 다음 P는 D ( A는 )P ( N P ).AEXPNEXPpad(A)PNP

III. 입력의 변환은 복잡한 클래스 .EXP

패딩에 대한 변환에는 이러한 속성이 있음이 분명합니다.

이제 우리가 반대 방향으로 똑같은 일을하는 방법을 모르는 이유는 반대 방향으로 패딩과 같은 변환이 없기 때문입니다 ( PN E X PN 과 교환 할 때) P ). 문제는 왜입니까?EXPPNEXPNP

나는 지금 왜 그런 변화가 없는지에 대한 공식적인 주장은 없지만, Andrss Salamon이 말한 것은 직관적입니다. 입력 크기를 늘리는 것이 쉽지만 어떻게 압축 할 수 있는지 확실하지 않습니까?

그것을 이해하는 또 다른 방법은 다음과 같이 생각하는 것입니다. 라고 가정 하고 N E X P = N T i m e ( 2 n O ( 1 ) ) 문제 를 해결하려고합니다 . 우리는 주어진 입력 (X) 의 길이를 N , 우리가 생각 길이의 입력으로의 N = 2 n은 O ( 1 ) :P=NPNEXP=NTime(2nO(1))xnN=2nO(1)

NEXP(n)=NTime(2nO(1))=NTime(N)NP(N)P(N)=Time(NO(1))=Time(2nO(1))=EXP(n)


1
후자의 주장은 일종의 "변형의 변형"논증으로 볼 수 있습니다. 그러나 나는 왜 당신이 의 입력을 가지고 있다고 생각할 수 없는지 알지 못합니다 . 다른 두 가지 접근 방식을 통해 NP 알고리즘에 더 많은 리소스를 제공한다는 측면에서 생각하고 압축 대 패딩 측면에서 생각하는 것은 효과가 없다고 생각합니다. N=log(n)
gabgoh

1
그것을 생각하는 세 번째 방법은 실제로 대화를 보는 것입니다. 나는 쓴 끝에 대한 그 접근법을 따르지 않았지만 위대한 통찰력이 오면 나는 그것을 나 자신에 대한 응답으로 게시 할 것입니다.
gabgoh

1
@gabgoh : 변수를 변경하는 것보다 더 섬세합니다. 나는 생각 길이의 것으로 입력의 때문에,이 작품을 N N은 , 난 그냥 거기에 길이를 만들기 위해 원래의 입력의 마지막에 충분한 공백이 동일 상상 N 하지만, 길이 n 의 입력 을 길이 N = log ( n ) 인 것으로 어떻게 생각할 수 있습니까? 괄호 안에있는 것은 입력 길이라는 것을 잊지 마십시오! 즉, 함수의 출력이 의존하는 입력의 일부입니다.N=2nO(1)nNNnN=log(n)
Kaveh

1
[continued] Considering this might also help: assume that the input is in unary and of length n, then we can compress it to N=log(n) bits and actually that would work! A problem which is P (NP) with unary encoding will be in EXP (NEXP) with binary encoding.
Kaveh

1
I guess my trouble is with the phrase "thinking of", I can't wrap my head around what it means to think of a smaller input as a larger input, and what that does, in reality. I do realize that you can't think of N=log(n), for the reason you state, which is a restatement of the padding argument, not a clean analogy I suppose. After all, when we change variables we are always thinking of variables in terms of other variables, but unlike real variables it's kinda "incompressible". Not to say it is a bad answer, but it doesn't help me much personally.
gabgoh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.