关闭

HomeWork——Halt Problem

标签: C++Halt Problem运行时间内存
98人阅读 评论(0) 收藏 举报

初次接触halt problem,wiki百科和google了一下,大概讲的是对于某个程序P,给出某种输入I,求解此程序P是否会达到终止状态。更通俗的说,一个程序说:“我能预测别的程序是否能够breakdown停机”的问题。如果没有接触这样的一个问题,像我一样,估计觉得这个程序简直不知道在干什么,而且觉得这似乎是个哲学方面的问题?

引用一下维基百科上面的表述(Halting Problem):是目前逻辑数学的焦点,和第三次数学危机的解决方案。其本质是给定一个图灵机T,和一个任意语言集合S,是否T会最终停机于每一个s属于S。其意义相同于可确定语言。显然任意有限S时刻判定的,可数的S也是可停机的。

当然,这个命题现在已经被证明是 不可解问题 了。证明如下:如果这个问题可以在有限的时间之内解决,可以有一个程序判断其本身是否停机并做出相反行为。这时候,不管停不停机结果是什么都不符合要求。这么说还是有点抽象。不如用一个对话来解释之。

一个程序A:“我能判断所有程序能否停机。”

另一个程序B:“如果我是你就这么玩,给我任意一个程序,要是你判断停了,我就变成死循环”。

之后王老师说:“如果你自己给你自己呢,即自己判断自己呢?”

那就有两种情况了,第一,如果B(B)停了,根据程序B,变成了死循环,而B又被A验证停不了。第二,如果B(B)停不了,根据程序B,B能被A验证可以停。

这充满了矛盾不是吗?

这里给出一个我在网站看到的证明该命题的伪代码:

int H(procedure, Input); // 这里的H函数有两种返回值,死循环或停机

int K(P) {

if (H(P, P) == 死循环) {

return 停机;

} else {

while(1)  // 这里会死循环

}

}

由停机问题引发的诸多不可解问题诸如理发师悖论:村子里有个理发师,这个理发师的原则是,对于村里的人,当且仅当这个人不自己理发,理发师就给他理发,如果这个人自己理发,理发师就不给他理发,无法回答的问题是,理发师给自己理发吗?

上述代码是否很简洁易懂呢?说了这么多,该讲讲本次homework的Halt Problem,事实上这并不是真正的Halt Problem。

问题可以简单表述为,给定几个函数传入另一个Decide判断函数,每一个函数内部还有个check函数,用来判断运行时间是否超时或内存是否超过其大小。整个程序总共会传入5个函数,规则是:1,Time Limit:1秒, Memory Limit:8MB, Function Input: 5。

该homework只需要我们定义Decide函数。

首先定义check函数,每个函数为void 函数(check c, int a, int b),且使用TIC(),TOC(),且函数输入有5个,其他方面也会占用一定时间,故临界值设为1000ms / 5 - 一定值 = 这里我定义为180。而检查内存时,其他方面也会占用内存,故临界值为sizeof(long long int) * v.size()是否大于8 * 1024KB * 1024B,v为STL的vector容器。

bool check() {
    if (time_now - time_begin > 180) {
        return true;
    }
    if (MEM_CHECK()) {
        return true;
    }
    return false;
}


之后的Decide函数,因为先前定义了func和check

  1. typedef bool (*check) ();
  2. typedef void (*func) (check, int, int);
所以传入func函数类型的形参f, 而f再传入已定义好的check函数即可。

void Decide(func f, int a, int b) {

    f(check, a, b);
}

总结:

本道题其实就是为我们科普了Halt Problem这个类哲学问题。以及看懂一个没有注释的代码需要花费很大功夫(微笑jpg)。最后,还考察了一下如何将一个函数传入一函数,

而该函数形参再调用另一个函数。不变的是函数形参一定有类型和名字,函数内部是可以调用外部已经定义好的函数的。

以上。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:288次
    • 积分:40
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档