证明不存在这样的算法

时间:2016-04-01 02:06:57

标签: algorithm np np-hard

我正在研究算法,我遇到了这个练习:

'证明没有程序/算法确定程序P是否在给定输入x上使用未初始化的变量。'

以下是我提出的证明:

假设有一个算法Det来确定程序P是否在给定输入x上使用未初始化的变量。

让程序

P(x)的  如果Det(P,x)为真     没做什么  其他    变量i    打印我

在这里我们看到了一个矛盾。如果Det(P,x)为假,那么我们使用了未初始化的变量。我们没有在其他地方使用未初始化的变量,所以每当它返回true时,它就错了。

我不确定我是否正在以正确的方式思考。

1 个答案:

答案 0 :(得分:2)

我认为你几乎拥有它,但你必须多说一点才能真正展现矛盾。

你的程序是完美的,即'P(x):如果Det(P,x)为真则不做任何其他变量我打印i'。您还展示了Det(P,x)求值为false的情况,但是您忘了提及如果Det(P,x)求值为true会发生什么(完整性需要这种情况)。例如:

假设Det(P,x)为真。然后,Det确定P(x)使用带输入x的未初始化变量。但这是不可能的,因为P表示如果Det(P,x)为真,那么我们就不使用未初始化的变量。

现在假设Det(P,x)为假。然后,Det确定P(x)不使用未初始化的变量。但这是不可能的,因为P表示如果Det(P,x)为真,那么我们使用未初始化的变量i。

因此,评估Det(P,x)总是会导致矛盾,这意味着它不存在。

编辑:此证明正确!观察Det(P,x)只能检查P,如果Det(P,x)看到对自身的调用,则Det(P,x)选择使用未初始化的变量并返回true。目前正试图找到正确的解决方案(见评论)。