Kolmogorov- 복잡성 정의의 동등성


20

Kolmogorov-Complexity 를 정의하는 방법에는 여러 가지가 있으며 일반적으로 이러한 모든 정의는 부가 상수와 동일합니다. 경우 즉 및 콜 모고 로프 복잡도 함수는 (다른 언어 또는 모델을 통해 정의), 다음 상수가 존재 등을 그 모든 문자열에 대한 , . 나는 이것이 모든 Kolmogorov 복잡도 함수 와 모든 대해상수 .K 2 c x | K 1 ( x ) K 2 ( x ) | < c K x K ( x ) | x | + c cK1K2cx|K1(x)K2(x)|<cKxK(x)|x|+cc

Turing-machines을 기반으로 에 대한 다음 정의에 관심 이 있습니다.K

  1. number of states : 을 최소 수 로 정의 하여 상태 의 TM 이 빈 문자열에 를 출력 하도록합니다.q q xK1(x)qqx
  2. 프로그램 길이 : 를 를 출력하는 가장 짧은 "프로그램"으로 정의하십시오 . 즉, TM을 이진 문자열로 인코딩하는 방법을 수정하십시오. 머신 의 경우 (이진) 인코딩을 로 나타냅니다 . 여기서 최소값은 빈 입력에서 x 를 출력하는 모든 M 보다 큽니다.K2(x)xMMM xK2(x)=min|M|Mx

인가 K1K2 상응? 그들 사이의 관계는 무엇이며, Kolmogorov 복잡성의 개념을 동일하게 이해하지 못하면 더 잘 이해합니다.

특히 나에게 버그가 되는 것은 x 와 함께 속도 K2 증가 한다는 것인데 , 이는 초 선형이 아닌 것 같습니다 (또는 적어도 상수가 C> 1 인 경우 K_2 <C | x | 가 아닌 | x | + c 보다 ). x 를 출력하는 가장 간단한 TM- 상태와 전환 함수의 일부로 x 를 인코딩하는 TM을 고려하십시오 . K_1 (x) \ le | x | +1을 즉시 알 수 있습니다 . 그러나 동일한 컴퓨터의 인코딩은 훨씬 더 크며 사소한 한계는 K_2 (x) \ le | x | \ log | x | .xC>1K2<C|x||x|+cxxK1(x)|x|+1K2(x)|x|log|x|


n 상태의 2 ^ {n ^ 2} 개 이상의 2n2기계가 있으며 평균 크기가 n ^ 2 이상 이므로 추가 상수만으로 차이가 나지 않을 수 있습니다. nn2
Kaveh

1
잘 결합 알려져있다 그 에 의존하지 않는 일부 고정 경우 . 이 때문에 우리 인코딩 할 수있는 단의 각 비트 배로 접두사가없는 언어로 다음으로 끝나는 . 이것은 비트를 나타내는 . 따라서 는 범용 프리픽스 프리 머신으로 일부 고정 용 . 를 접두사없는 언어로 인코딩하는보다 지능적인 방법을 사용하여 일부를 개선 할 수 있습니다 . c x x x 01 2 | x | + 2 x K 2 K 2 ( x ) 2 | x | + 2 + c ' c xK2(x)c+2|x|cxxx012|x|+2xK2K2(x)2|x|+2+ccx
칼 머 머트

나는 방법을 볼 수 없습니다. 그것도 것으로 보인다 (원시 데이터로) 인코딩의 한 부분으로 주어진다하거나 구성해야한다 당신의 상태 머신에 의해. 첫 번째 옵션은 부정 행위로 보이며 두 번째 옵션 ( 을 의미 ) 과 비교할 수있는 방법을 알 수 없습니다.x K 1xxK1
Ran G.

@Ran G .: 요점은 en.wikipedia.org/wiki/Invariance_theorem에 설명 된 불일치 정리 입니다. 의 성장률을 가진 효과적인 시스템을 설명 할 수 있다면 그러면 범용 Turing 머신 ( 대해 설명 )이 추가 상수 내에서이를 충족시킵니다. 범용 기계 걸리는 하나 있는 입력 및 출력의 복귀 경우 정지하고있다. K 2M M M2|x|K2MMM
Carl Mummert

답변:


6

너무 많은 세부 정보를 제공 한 점에 대해 사과드립니다. 그러나 사람들과 모순 되려고합니다.

K(x)K(x)+c

사실 그 보통에서 오는 인터프리터 설명 언어 # 1에 설명 언어 # 2의 하지 # 1의 프로그램에 # 2의 프로그램의 번역에서.K1(x)K2(x)+c

예를 들어 이며 다음과 같이 간단 불평등이 발생합니다.KC(x)KPython(x)+cpy2c

void py_run(char * s) {
    // code of your Python interpreter
}

int main(void) {
    py_run("Put here your Python program of size Kpython(x)");
}

그러면 상수 는 과 여기서 은이 코드의 비트 수이고 비트는 공식 Python 인터프리터가 C로 작성한 크기입니다. 물론 가능한 것을 해석하기 됩니다. 파이썬에 대한 설명 언어로 69MB보다 낫습니다 :-) 528 + 490,240,688 528 490,240,688cpy2c528+490240688528490240688

중요한 것은 C 코드에서 파이썬 프로그램을 선형으로 작성할 수 있다는 것 입니다. 예를 들어, 모든 문자 사이에 "BANANA"를 넣어야하는 언어는 매우 좋은 설명 프로그램이 아니며 속성은 false입니다. (하지만 설명 언어에서 데이터를 별도의 파일이나 블록으로 쓸 수있는 권한을 부여하면이 문제는 사라집니다)

에 결함이있는 이유K1(x)=q

정의의 은 전환을 인코딩해야하므로 상태 의 튜링 머신을 설명하기 위해 비트 이상이 필요할 수 있다는 것 입니다 . q qK1qq

따라서 과 는 동일하지 않을 수 있지만 주로 의 결함입니다. 모든 대해 와 같은 가 있음을 증명할 수 있다고 생각합니다 . 물론 어느 이라는 사실을 반증 충분하다 우리가보다 모두 인코딩 할 수 있음을 의미하므로, 유효한 함수가 아니다 길이의 가능한 현 으로 비트.K 2 K 1 a > 0 c a K 1 ( x ) a | x | + c a a < 1 K 1 2 n n a n + c aK1K2K1a>0caK1(x)a|x|+caa<1K12nnan+ca

그러나 튜링 기계를 만들 때 크기는 엄청나게 빡빡합니다. 상태 블록에는 각 상태에 대한 전환을 찾는 방법이 있으며 이는 비트를 채울 수 있는 일반적인 방법 보다 낫습니다 . 그런 다음 각 블록에 비트의 정보를 저장할 수 있습니다 . ( 블록을 다른 방법으로 출입해야하기 때문에)b 2 b 2 b b log 2 b 2 log 2 bbb2b2bblog2b2log2b

그래서 그래 ... 크기의 블록으로 당신은 아마 증명할 수 . 그러나 나는 이미 국가의 수가 유효한 Kolmogorov 복잡도 함수가 아닌 이유에 대해 너무 많이 썼습니다. 내가 자세히 설명하고 싶다면 K 1 ( x ) a | x | + c a21/aK1(x)a|x|+ca

이제 에 대해K2

순진한 설명 언어는 대략 (즉, 다음 각 상태에 대한 및 쓰기 및 종료에 대한 세부 사항).log 2 qK2(x)=q2(log2q+2)log2q

당신은 것 같다, 나는, 어쩌면 상태가이다 아닌지라고 설명 언어의 이진 태그를 추가하여 더 나은 / 사기꾼 방법은 인코딩에 튜링 기계에 "데이터"를 승인 할 것이라고 확신 데이터 상태를 ( 그냥 조금 쓰고 다음 상태로 가십시오) 또는 다른 일을하는 경우. 그렇게하면 의 1 비트를 설명 언어의 1 비트에 저장할 수 있습니다.x

같은 유지하는 경우에는 당신은 내가 몇 비트를 저장하는 이전 부분에 사용되는 것과 동일한 기술을 사용할 수 있습니다,하지만 난에 붙어 것 같다 에 대한 ( 어떤 ) .. 어쩌면 미만그러나 얻는 것은 어려워 보입니다. (그리고 나는 조차도 이어야한다고 기대합니다 .)K 2 ( x ) a | x | 로그 | x | + c a > 0 로그 | x | O ( | x | )K2K2(x)a|x|log|x|+ca>0log|x|O(|x|)O ( | x | )|x|O(|x|)


이 복잡함 함수가 아니라고 주장 합니까? 은 실제로 내가 한 번 수행 한 계산 과정에 대한 일부 유도에서 사용 된 정의 이기 때문에 매우 놀랍 습니다 (정확성에 대해서는 아무 것도 말하지 않습니다). K 1K1K1
Ran G.

그런데 사실 상당히 방해한다. 이것을 고려하십시오 : 비트 의 가능한 단어가 있으며 비트를 사용하여 인코딩 할 수 있습니까? 그것은 을 의미 할 것입니다 (인코딩해야합니다)2nn1K1(x)12|x|+c2nn2N=O(2 112n+c2n=O(212n)
jmad

파이썬 프로그램에 C가 예약 한 문자가 있으면 어떻게됩니까?
PyRulez
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.