写出尽可能长的循环

时间:2010-12-23 20:38:36

标签: programming-languages loops computer-science

最近我在技术讨论中被问到这个问题。考虑到运行它的机器/架构,可以在计算科学中编写的最长循环是什么? 这个循环必须尽可能长,但不是无限循环,不应该最终崩溃程序(递归等......)

老实说,我不知道如何解决这个问题,所以我问他是否真的有可能。他说使用一些计算机科学概念,你可以得出一个假设的数字,这可能不实用,但它仍然不会是无限的。

任何人在这里;知道如何分析/攻击这个问题。

P.S。为可以存储最高数值的类型选择某个最高限制显然不是答案。

提前致谢,

5 个答案:

答案 0 :(得分:10)

你正在进入图灵机领域。

简单地说(让我们留在确定性字段中......)您的计算机/机器可以处于算法期间传递的有限数量的状态中。每个州都是独一无二的,只会发生一次,否则你会因为定义而无限循环。喜欢“goto”。 我们可以删除这个限制,但它没有多大意义,因为可以找到一个简单的算法,它总是比其他所有算法都有一个循环运行。

所以这取决于机器可能的状态,你可以通过“它的ram”天真地翻译。

所以现在的问题是:什么是可以在X几个状态的机器上最长的循环?维基百科给出了the answer

答案 1 :(得分:6)

请阅读Busy Beaver问题。

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

答案 2 :(得分:1)

最大可能的有限值?作为一名数学家,我觉得这很荒谬。也许问题可以更好地解释。

答案 3 :(得分:1)

如果我们正在谈论语言限制,那么,有些语言定义了任意精度的整数(如Python和Common Lisp),因此就语言而言,你可以计算出你喜欢的任何数字。您可以轻松地将其设置为对于任何实际机器而言都太大,但这不是语言限制。

就计算实际机器而言,这取决于可能的状态数量。对于每个位,您可以将其分配为计数器(并且它不必作为一个数据元素,因为它很容易构成一个任意长度的计数器),这是两个状态,所以,如果你有8G的可用内存,你可以用它来计算2 ^ 8G。您当然可以使用文件系统获得更多的计数器空间。

或者,假设您没有使用物理可逆计算,您可以检查翻转所需的最小能量,划分可用能量(如预期的太阳能总输出量等),并获得限制

指定复杂性的图灵机有限制。它上升得非常快。

提供一个答案的答案太多了。

答案 4 :(得分:0)

如果“long”表示时间,则以下有限循环应该是一个不错的选择:

for(unsigned long long i = 0; i < ULONG_LONG_MAX; ++i) sleep(UINT_MAX);

好的,这个答案并不是很严重,但实际上我认为在求职面试中提问是完全没用的。为什么?根据S.Lott的回答,这可能是关于繁忙的海狸问题,这个问题已有近50年的历史,并且完全未知,因为没有人可以在实际工作中使用它。