너무 많은 세부 정보를 제공 한 점에 대해 사과드립니다. 그러나 사람들과 모순 되려고합니다.
약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)=q⋅2⋅(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|)