您的位置:首页 > 编程语言 > Go语言

Kolmogorov复杂度(转)

2015-06-08 16:05 363 查看
转自:http://blog.163.com/bit_runner/blog/static/5324221820101120115718334/

Kolmogorov复杂度和哥德尔定理的信息理论版本 - Chaitin定理及其数学证明 

定义一:若对于给定的字符串s, 输出该字符串的二进制程序的最短代码长度为K(s),就称K(s)为字符串s的Kolmogorov复杂度。将输出s的由一串二进制代码组成的程序叫做s的一种描述。将描述中长度最短的一种叫做最小描述,用d(s)来表示。|d(s)| 
则用来表示最小描述的长度。于是有 
K(s) = | d(s) | 
定理一: 一般而言,Kolmogorov复杂度是不可计算的,或者说不存在通用函数K(s), 
它能对任何给定的字符串s给出Kolmogorov复杂度。 
证明: 假如存在这么一种以s为输入,以K(s)为输出的函数,那么就可以编写如下程序 
产生复杂字符串的函数 function GenerateComplexString ( int X) 
for i = 1 to infinity: 
for each string s of length exactly i 
if K(s) >= X 
print s 
quit 
对于任意给定的输入,以上程序对具有每一种可能的长度的字符串逐一进行测试,直到找到某个复杂度不小于X的字符串s为止。然后再把这个复杂度不小于X的字符串s打印出来。因此,对于任意给定的X,这个程序都能输出复杂度不小于X的字符串s。
但是以上程序长度是有限的,可假设这个长度为U。考虑到输入X的位数基本上与LOG(X) 成正比( 此地LOG表以2为低的对数。),于是可认为程序的大致长度加上输入的长度为
U + LOG(X)。由于X比LOG(X)增长得快,所以存在X,使得U + LOG(X) < X 也就是说存在一个程序,其长度连带输入的长度居然比X小。而不小于X的Kolmogorov复杂度按定义就是对于给定的由上述程序输出的字符串s,没有任何一个程序可以输出s而其长度比X还要短。这就与U + LOG(X) < X 矛盾。 
[证毕] 
定理二(哥德尔定理的信息理论版本 - Chaitin定理) 
对于每一种(包含性)充裕的形式系统F,存在常量c, 对于任何字符串s,该形式系统不能证明 
K(s) > c。 
证明 
假设 Tm为长度为m的图灵计算机,其功能为 
Tm = “ 对于某个字符串s, 找到最小的x, 使得在形式系统F下证明 命题 K(s)> c的证明过程的哥德尔数= x。” 
令c > m。现在我们要证明图灵计算机Tm不会停机。也就是说对于任何字符串s,F都不能证明 K(s) > c. 
假设图灵机Tm停机,那么图灵机Tm输出字符串s,它满足K(s) > c。另一方面,根据K(s)的定义, K(s) <=m。但是 m
< c, 所以 
K(s) < c。 矛盾。 
于是图灵机Tm停机是不可能的。也就是说对于任何字符串s,形式系统F不能证明 
K(s) > c。 
绝大多数人接受如下的论调: 
哥德尔定理的信息理论版本-Chaitin定理的本质是在形式系统中,人们不能证明对象的复杂度大于理论本身的复杂度。 
但是对此也有人坚决反对。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  复杂度 数学