我想知道从严谨的计算机科学角度来看,正确答案是什么。
int main()
{
Generator gen; // True random generator returning 0 or 1 with 50% probability each
while (gen() == 0);
}
答案 0 :(得分:0)
使用图灵机模型很难对这种情况进行建模。
为什么呢?好吧,图灵机不会冒险。有非确定性TM,但那里没有机会; NTM并不比确定性TM更强大,它们在同一配置中始终具有相同的行为。因此,如果我们要为计算注入机会,很难将其注入TM本身的工作方式。
另一种可能性是将RNG的输出视为TM的输入磁带。然后TM的磁带是二进制字符串。您的问题现在我们可以重新表述如下:是00 ... 0 ...一个有效的无限二进制字符串,用于输入图灵机?我们可以解释这两种方式:
随机性的现代信息理论方法回答了第一个问题。序列00 ... 0 ...具有低熵并且可以由while true print 1 loop
有限地描述。其样本分布与大数定律或中心极限定理不一致。基于输出,现代方法将字符串表征为不是来自随机源,这是一个矛盾,因为我们假设RNG是一个真正的随机源。所以00 ... 0 ...不是由我们的来源生成的。
图灵机的标准定义,基于正式语言,通常不允许在磁带上输入无限量的输入。也就是说,空白符号是唯一出现无限次数的符号。现在,我们可以将空白符号解释为0并且唯一的输入符号为1,这将是允许的,但是我们将在输入中有空白,这是不允许的,或者TM不是从开头开始输入。在这种情况下,我认为问题类似于停止鸡的问题:给鸡作为输入,TM停止了吗?答案也是类似的。
总结:我对这个问题的严格处理方法的猜测是: - RNG无法生成00 ... 0 ...并且TM停止它可以生成的所有字符串,因此TM停止;要么 - TM到00 ... 0的应用是未定义的。
答案 1 :(得分:0)
从“严谨的计算机科学角度”来看,你的问题有一个错误:没有“真正的随机数生成器”可以从C编译器访问,例如你的代码形式隐含的那个。
如果你假设你的C编译器可以访问一些可能实际上可以调用你的gen()函数的量子效应的硬件,那么当然代码在没有停止的情况下通过循环运行N次的概率是(1 / 2)** N因为你需要得到1 N次,这意味着在任何有限的时间内,程序没有停止的概率是有限的。
计算机科学界通常研究的暂停问题涉及确定性计算机程序(例如图灵机)的行为,你的程序不能这样做 - 例如,参见关于“暂停问题”的维基百科文章讨论