【问题标题】:Will this program halt这个程序会停止吗
【发布时间】:2016-06-22 12:07:19
【问题描述】:

我想知道从严格的计算机科学角度来看,正确答案是什么。

int main()
{
    Generator gen; // True random generator returning 0 or 1 with 50% probability        each
    while (gen() == 0);
}

【问题讨论】:

  • 最终会的。
  • 你不能确定。从理论上讲,它也可以无限长地使用 0。但在现实生活中的问题中,是的,它肯定会停止。
  • ... 但它的机会归零。 1/2 * 1/2 * 1/2...

标签: computer-science


【解决方案1】:

使用图灵机模型很难对这种情况进行建模。

为什么?好吧,图灵机不会冒险。有非确定性的 TM,但没有机会参与其中; NTM 并不比在相同配置中始终具有相同行为的确定性 TM 更强大。因此,如果我们要将机会注入到计算中,则很难将其注入到 TM 本身的工作方式中。

另一种可能性是将 RNG 的输出视为 TM 的输入磁带。那么 TM 的磁带就是一个​​二进制字符串。您的问题现在可以重新表述如下: 00...0... 是用于输入图灵机的有效无限二进制字符串吗?我们可以用两种方式解释:

  1. 00...0... 是 RNG 的有效输出吗?
  2. 00...0... 是 TM 的有效输入吗?

关于随机性的现代信息论方法对第一个问题的回答是否定的。序列 00...0... 具有低熵,可以用while true print 1 loop 进行有限描述。它的样本分布不符合大数定律或中心极限定理。基于输出,现代方法将字符串描述为不是来自随机源,这是一个矛盾,因为我们假设 RNG 是真正的随机源。所以 00...0... 不是由我们的源生成的。

图灵机的标准定义基于形式语言,通常不允许无限量的输入在磁带上。也就是说,空白符号是唯一出现无数次的符号。现在,我们可以将空白符号解释为 0,将唯一的输入符号解释为 1,这是允许的,但是我们会在输入中有空白,这是不允许的,或者 TM 不是从开头开始的输入。在这种情况下,我认为这个问题类似于停止鸡问题:给定一只鸡作为输入,TM 会停止吗?答案也差不多。

总而言之:我对解决这个问题的严格方法的猜测是: - RNG 无法生成 00...0... 并且 TM 停止它可以生成的所有字符串,因此 TM 停止;或者 - 将 TM 应用于 00...0... 未定义。

【讨论】:

    【解决方案2】:

    从“严格的计算机科学的角度”来看,您的问题有一个错误:没有可从 C 编译器访问的“真正的随机数生成器”,例如您的代码形式所暗示的那个。

    如果您假设您的 C 编译器可以访问某些硬件实现的可能是量子效应的东西,它们确实可以调用您的 gen() 函数,那么代码将在循环中运行 N 次而不停止的概率当然是 (1 /2)**N 因为你需要得到 1 N 次,这意味着对于任何有限的时间,程序没有停止的概率是有限的。

    在计算机科学界更典型地研究的停机问题与确定性计算机程序(例如图灵机)的行为有关,而您的程序不能 - 例如,请参阅关于“停机问题”的维基百科文章讨论。

    【讨论】:

      猜你喜欢
      • 2020-12-28
      • 1970-01-01
      • 2011-11-13
      • 2020-08-31
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多