我有以下问题:
让n为自然数,n> 10 ^ 100。 n被23整除吗?
这个问题是半确定的还是可确定的?
可以创建一种算法来找到答案,使其始终停止。关于半可决定性和可决定性之间的区别,我感到很困惑。据我了解,如果我可以构建一个图灵机(算法)来接受问题的解决方案,否则将拒绝该问题,那么这个问题是可以确定的。但是,如果在输入不是解决方案的情况下机器永远不会停止运行,则意味着该问题是半确定的。
所以,我想说上述问题是可以确定的,但是我不知道我说的话是否正确。您能帮我找出答案吗,为什么?谢谢。
答案 0 :(得分:3)
<xsl:template match="Root">
<xsl:copy>
<xsl:copy-of select="Record[emp/empInfo/class = 'G']"/>
</xsl:copy>
</xsl:template>
这不算作算法吗?对我来说似乎是可以决定的。
请参见answer by Hermann Döppes,您不希望承担模数的可计算性。
答案 1 :(得分:2)
是的,这是可以决定的。要给出比Lakshay Garg更基本的论点:
由于23 * n大于n,因此最晚在k = n时到达最后一步,这意味着该过程终止。
答案 2 :(得分:2)
您是正确的。问题是可判定,如果您可以编写一种算法,对于任何输入,该算法最终都会总是做出决定。对于“ n
是否可被23整除的问题”,请考虑以下(错误的)算法:从i = 1
开始,并检查23 * i
是否小于,大于或等于到n
。
n
,请增加i
。n
,请返回true
。n
,请返回false
。无论n
有多大,该算法最终总是会吐出一个答案,因为在i
大于{{之前,您只能将23 * i
递增有限的次数。 1}}。这可能会花费大量时间,但是出于可判定性的目的,我们不在乎。因此,该算法始终会做出决定;因此,问题是可以确定的。
将此问题与半确定问题进行对比。这些问题在于,如果存在正确的答案,就会有算法始终会回答n
,但是如果正确的答案是true
,则可能会永远运行。
最著名的半确定性问题是暂停问题:给定程序,请确定该程序是否曾经停止运行。假设您尝试通过编写执行其输入的程序来解决此问题。如果该执行终止,则可以返回false
:您知道程序终止了,因为您只是看着它终止了。但是,如果您已经等待了一段时间,并且它还没有终止,那么只要让它运行更长的时间,就无法确定它是否不会终止,因此您只需要等待即可。因此,如果输入程序没有终止,则您的程序也不会终止。
因此,有一个关于暂停问题的算法,如果实际答案为true,则始终返回true
,但是如果实际答案为false,则该算法将永远运行。因此,暂停问题是半确定的。