有没有理论可以回答“解决问题的最简单程序”?


10

为了回答“什么问题可以通过计算解决”,我们开发了可计算性理论。对于可计算的问题,是否有一种理论可以回答“我得到了最简单的程序”这个问题?

我认为计算复杂性不能回答这个问题。我认为它考虑了我们需要多长时间(尽管以抽象方式衡量)。

我不确定算法信息论是否回答了这个问题。似乎该理论是关于尺寸的,最小尺寸和最简单的等效对我来说并不明显(嗯,至少它们对我而言是不同的)。

我认为该理论至少应定义“简单”或“比”简单的关系。


我现在坚信,我应该研究科莫莫洛夫的复杂性。但是,我想解释一下我问这个问题时的想法。

当我改进程序时,我尝试减少程序不同部分之间不必要的连接(也许重新划分部分,以便连接更少或更弱)。由于减少了连接,因此程序感觉“更简单”。因此,我在表述问题时选择“简单”一词。程序的大小很可能也会减小,但这是一个很好的副作用,而不是主要目标。显然,改进过程不会永远持续下去。有一点我应该停止。如果仅通过考虑“结构”(对另一个未定义概念感到抱歉)或“关系”,我能否说服自己别无选择?

这里包含对我的复杂性概念的更好描述。

Olaf Sporns(2007)复杂性学术论文集,2(10):1623



4
您可能对Bennett的“逻辑深度”概念感兴趣。Li和Vitanyi在他们的关于Kolmogorov复杂性的书中专门提到了7.7章。
马丁·史瓦兹

2
@YuNing:“简单”是什么意思,如果不是大小?
罗布

1
@于宁:是不是图灵机具有最小的最小描述长度,而不是最简单的最小的程序来生成输出,所以在“小”和“结构”之间取得平衡?
罗斯·斯尼德

3
我认为这个问题定义不明确。还要注意,有些算法非常简单,但是很难证明它们是正确的。并且有一些算法很简单并且很明显是正确的,但是很难证明它们是快速的。
Jukka Suomela 2011年

Answers:


16

在算法信息论中研究了这个问题。您所定义的称为Kolmogorov-Chaitin复杂度。

http://en.wikipedia.org/wiki/Kolmogorov_complexity

看来,您所需要的简单性概念可以通过复杂性度量的概念来形式化,而复杂性度量则由Blum的公理形式化。

http://en.wikipedia.org/wiki/Blum_axioms

似乎也有可能对Kolmogorov的复杂度进行概括,以考虑其他复杂度度量。请参阅下面的参考。(维基百科有关Kolmogorov复杂性的文章解决了这个问题。)

Burgin1990-广义的kolmogorov复杂性和其他双重复杂性度量控制论与系统分析第26卷第4期481-490


正如@Jukka Suomela所说,这个问题有点不确定。因此,我想知道我很难完全回答这个问题。但是,由于此答案非常有用,并且确实是问题的重要组成部分,因此我仍将其标记为答案。
尤宁

顺便说一句,您能否进一步说明该主题的应用,特别是如果一个人有一个程序的正式规范,她可以从规范中找到最小的尺寸吗?
尤宁

1

第一个问题的答案是:是的,有一种理论,它是算法信息论,被称为优雅程序(由Gregory Chaitin编写)。

对于第二个问题,“程序是我得到的最简单的程序”吗?

没有答案,因为这是一个无可争议的问题,不可能证明一个程序是一个优雅的程序。

我回答了一个问题,以提及优雅的程序


-1

有不同的方法来决定什么是简单的代码,什么不是简单的代码。

但是令人遗憾的是,没有自动的方法来确定它,例如,Kolmogorov复杂性由于递归函数而失败,某些递归函数(逻辑上很深)很简单,但是对它的理解却并不那么简单。

以我的经验,我们的团队正在一个系统中工作,我们在Oracle中发现了一个“简单”的过程(不超过50行)...我们试图理解它,花了2个月(和几次会议)才能完全理解它,而不是代码的复杂性,而是每个变量背后的逻辑。

我认为确定代码有多简单的方法是:“阅读代码并考虑理解它的时间。”

那么“解决问题的最简单程序?” 可以分为:

a)代码的简洁性(清晰的代码),但是过于主观。

b)函数的过于复杂,如果我遇到X问题,那么我必须解决DX(Delta X)任务来解决它,其中DX必须趋向X。

例如,如果我的问题是(一个)“去皮一个苹果”,而我必须用PHP(和语言)来做,那么

如果我非常幸运,PHP具有function_peel_apple()函数,则它是有史以来最简单的代码X = 1 DX = 1,只需调用该函数即可。

相反,如果我不是很幸运,但是存在函数function_peel()和function_get_apple(),则X = 1(一个问题)和DX = 2(两个任务)。

如果在最坏的情况下不存在任何功能,那么我必须自己创建一个(或多个)功能,并在解决问题之前添加多个任务,因为这是一个复杂的程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.