【问题标题】:Write the longest possible loop写出最长的循环
【发布时间】:2011-05-30 04:02:43
【问题描述】:

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

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

这里的任何人;知道如何分析/解决这个问题。

附:为可以存储最高数值的类型选择一些最高限制显然不是答案。

提前致谢,

【问题讨论】:

  • 我很好奇这会得到什么样的答案。我不禁回想起我的离散类并学习最小的可数无限集。 +1 好话题!
  • 定义长度。是时候跑了?迭代次数?
  • @Joseph:没有定义的长度、时间或限制。我认为这是一个计算机科学理论测试,其中你需要达到最大可能的数字,而不是无限循环。
  • @Abhay:需要澄清一下。在我的回答中,我列出了四个可能的问题。
  • @David:我同意您回答中的可能性。但从计算机科学的角度来看,“忙碌的海狸”接近于答案。我将“编程语言”的措辞改为“计算科学”。让我知道问题是否切中要害。

标签: programming-languages loops computer-science


【解决方案1】:

你正在进入图灵机领域。

简单地说(让我们留在确定性领域......)您的计算机/机器可以处于算法期间传递的有限数量的状态。每个状态都是唯一的,并且只发生一次,否则按照定义,您将有一个无限循环。像“转到”。 我们可以消除这个限制,但它没有多大意义,因为这样可以找到一个简单的算法,它总是比其他所有可能的算法多运行一个循环。

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

所以现在的问题是:一台机器上可能处于 X 多个状态的最长循环是多少?维基百科给出了the answer

【讨论】:

  • 是的,我想这就是我开始分析问题的方式。
【解决方案2】:

请阅读“忙碌的海狸”问题。

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

【讨论】:

  • 但这也可能是一个无限循环,所以这不是 op 想要的。但非常好的答案,+1
  • @Oops:“这也可能是一个无限循环”?真的吗? “此类中的图灵机必须满足某些设计规范,并且在使用空白磁带启动后最终需要停止”是维基百科上的引述。有错吗?
  • Busy Beaver 问题允许无限磁带,这使它能够在有限数量的状态下进行更长的循环,而我认为普通计算机可以做到。
  • @munificent:无限磁带与非终止磁带不同。 “无限磁带”是一种数学形式,它只是去除了一个任意的上限。繁忙的海狸算法必须停止这一事实使得它们是有限的。
  • 明白。但是,Busy Beaver 程序可以以相对较少的状态运行非常长(但不是无限)时间的原因是因为它可以访问所需的尽可能多的磁带。给一个忙碌的海狸一个有限的磁带,你会发现界限会下降。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    就实际机器的计数而言,这与可能状态的数量有关。对于每个位,您可以分配为一个计数器(它不必是一个数据元素,因为制作任意长度的计数器真的很容易),这是两种状态,所以如果您有 8G 的可用内存,您可以用它算到 2^8G 之类的东西。您当然可以使用文件系统来获得更多计数器空间。

    或者,假设您没有使用物理可逆计算,您可以检查翻转一点所需的最小能量,除以可用能量(如预期的总太阳能输出或其他),然后得到一个限制。

    指定复杂度的图灵机是有限制的。它上升得很快。

    有太多可能的答案无法提供。

    【讨论】:

      【解决方案5】:

      如果“长”意味着时间,那么下面的有限循环应该是一个不错的选择:

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

      好吧,这个答案并不是很严肃,但实际上我的观点是,在求职面试中问这个问题完全没用。为什么?根据 S.Lott 的回答,这可能与将近 50 年的 Busy Beaver 问题有关,并且完全未知,因为没有人可以在实际工作中使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-22
        • 2017-04-24
        • 1970-01-01
        相关资源
        最近更新 更多