我有以下问题:
设n为自然数,n>10^100n与23可除吗?
这个问题是半可判定的还是可判定的?
可以创建一个算法来找到答案,这样它就会一直停止。关于半可判定和可判定的区别,我很困惑据我所知,如果我能建立一个图灵机器(算法),接受问题的解决方案,否则拒绝,问题是可判定的。然而,如果机器在输入无法解决的情况下永远不会停止,这意味着问题是半可判定的。
所以,我想说上面的问题是可以决定的,但我不知道我说的是否正确你能帮我找出答案吗?为什么谢谢您。

最佳答案

你是对的。如果你能写出一个算法,对于任何输入,最终都会做出一个决定,那么问题是可以决定的对于“isn是否可以被23整除”的问题,考虑以下(错误的)算法:从i = 1开始,检查23 * i是否小于、大于或等于n
如果小于n,则递增i
如果等于n,则返回true
如果大于n,则返回false
不管n有多大,这个算法最终都会给出一个答案,因为在i大于23 * i之前,你只能增加n有限的次数。这可能需要很长时间,但为了确定性,我们不在乎因此,这个算法总是做一个决定;因此,这个问题是可以决定的。
将此与半可判定问题进行对比这些问题都存在一个算法,它总是回答true如果这是正确答案,但如果正确答案是false,则可能永远运行。
最著名的半可判定问题是停止问题:给定一个程序,确定该程序是否停止运行。假设您试图通过编写执行其输入的程序来解决此问题如果该执行终止,那么您可以返回true:您知道程序终止是因为您刚刚看到它这样做但如果你已经等了一段时间,它还没有终止,你永远无法确定如果你让它再运行一段时间,它是否不会终止,所以你只能等待因此,如果输入程序没有终止,您的程序也不会终止。
因此,有一个停止问题的算法,如果实际答案是真的,它总是返回true,但如果实际答案是假的,它将永远运行因此,停止问题是半可判定的。

07-28 07:45