让我们考虑一种略有不同的疑问悖论:算法悖论。算过程(通常但并非总是计算)的指令。流程图是表达算法最有用、最信息丰富的方法之一。但如果不小心,我们可能会绘制出流程图,其中包含一些无法实现的过程指令。
考虑图 1 中的流程图。它有两种状态:起始状态(程序从此处开始)和停止状态(程序到达该状态时,表示程序已完成)。当然,并非每个流程图都代表一个始终会停止的程序。有些程序会陷入无限循环,即一遍又一遍地重复同一组指令,永无止境。具体来说,流程图包含停止状态并不能保证其所代表的程序始终会停止。
图 1 中的起始状态包含一个问题,以及从该问题指向其他(不一定是不同的)状态 欧洲手机号码列表 的箭头,这些状态分别对应于该问题的每个可能答案。在本例中,该问题是“是”或“否”的问题,因此有两个这样的箭头。
因此,图 1 看起来是一个完美的流程图
然而,现在要问的问题是:我们能否成功执行该流程图中列出的指令?
答案是“不”。
推理如下:假设你从起始状态开始(理所当然)。现在,当执行此流程图所示程序的第一步时,你必须选择“是”箭头,到达停止状态,或者选择“否”箭头,回到起始状态。让我们依次考虑这两种情况:
牛津大学出版社 6月15日 图2
图2,图片由Roy T Cook提供。未经许可,请勿转载。
如果你选择“是”箭头并到达停止状态,那么程序就会停止。因此,起始状态下问题的正确答案是“否”,因为执行该算法只需要有限步(实际上只有一步)。但你一开始就不应该选择“是”箭头,因为你毕竟没有陷入无限循环。所以你没有正确执行算法。
如果您选择了“否”箭头并回到起始状态,那么您需要再次询问相同的问题以确定下一步应该选择哪个箭头。但是您现在所处的情况与您执行程序第一步时的情况完全相同。因此,如果第一步问题的正确答案是“否”,那么第二步仍然是“否”。但是然后您再次回到起始状态,处于与之前相同的情况,因此您应该第三次选择“否”箭头(第四次,第五次……无限次)。所以您永远不会到达停止状态,从而陷入了无限循环。因此,问题的正确答案是“是”,您一开始就不应该选择“否”箭头。所以您没有正确执行该算法。
因此,Liar 流程图代表一种不可能正确实现的算法。
和许多悖论一样,一旦我们了解了一个版本,就很容易构建出一些 什么让优质域名如此有价值 有趣的、自相矛盾的或令人费解的变体。这种变体与“No-No悖论”(继续——去查吧!)密切相关,其构造如图2所示,它包含两个独立的流程图。
在这种情况下,我们可以正确地执行这两种算法,但方式永远不会 印度尼西亚号码列表 相同。如果我们在实现第一个流程图时选择“是”箭头,那么在实现第二个流程图时就必须一遍又一遍地选择“否”箭头;如果我们在实现第一个流程图时(一遍又一遍地)选择“否”箭头,那么在法只是一组用于有效 实现第二个流程图时就必须选择“是”箭头。因此,我们有两个相同的流程图,但我们只有在一种情况下执行一件事,而在另一种情况下执行完全不同的事情,才能正确地执行这两个程序。
这或许不是一个完全的悖论,但肯定令人费解。