停机问题
1、定义:
停机问题(halting problem)是逻辑数学中可计算性理论的一个问题。通俗的说,停机问题就是判断任意一个程序是否会在有限的时间之内结束运行的问题。如果这个问题可以在有限的时间之内解决,那么就可以有一个程序判断其本身是否会停机。但是,在程序停止之前,没有办法判断它会不会停止。所以这是一个不可解的问题。
2、本质:
停机问题本质是一阶逻辑的不自洽性和不完备性,类似的命题有理发师悖论、全能悖论等。
3、理发师悖论:
我认为,它类似“理发师悖论”,或者说“理发师悖论”就是一种“停机”问题:理发师只给不给自己剪头发的人剪头发,那理发师是否为自己剪头发呢?如果理发师为自己剪头发,那他就不是“不给自己剪头发的人”,他就不应该为自己剪头发;如果理发师不为自己剪头发,那他就是“不给自己剪头发的人”,他就应该为自己剪头发。无论怎么做都不对。
4、那么该如何应用呢?
利用“限制范围”的思想,设计一些“启发式的算法”来解决部分问题:
虽然不能写出一个程序来判定任何给定程序是否会停机,但是可以写出一个简单的程序,让它只是识别出某些一定会停机的程序。例如,如果一个程序的第一条指令就是停机,那么,这个程序一定可以停机。如果一个程序内没有循环,它也一定可以停机等等。Java虚拟机中字节码检验器好像就是利用这种思想来实现的~~~
有兴趣的读者可以关注一下~~~