HomeWork——Halt Problem

原创 2016年05月30日 10:44:39

初次接触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)。最后,还考察了一下如何将一个函数传入一函数,

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

以上。

图灵机简介

今天计算机病毒课上老师给我们介绍了一下图灵机。以前一直有听说过图灵机,今天简单地了解了一下图灵机,写下一些学习过程中的收获。图灵机是由图灵大神由1936年提出的一种确定的抽象计算模型,据说它可以被看做...
  • jmh1996
  • jmh1996
  • 2017年10月19日 23:57
  • 203

Irrationa problem

A - Irrational problem p Time Limit: 2000MS Memory Limit: 262144K 64bit IO Format: %I64d & %I6...
  • wwk0125
  • wwk0125
  • 2014年03月24日 12:04
  • 241

杭电1219

题目描述: Ignatius is doing his homework now. The teacher gives him some articles and asks him to tell ...
  • u010379510
  • u010379510
  • 2016年03月08日 11:12
  • 279

HDU 1219 AC Me(字母统计)

AC Me Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm...
  • liangzhaoyang1
  • liangzhaoyang1
  • 2016年04月23日 23:32
  • 418

halt低功耗模式

1. stm8l152有5种低功耗模式,wait mode, low power run mode, low power wait mode, active-halt mode, halt mode....
  • Ftworld21
  • Ftworld21
  • 2016年09月25日 15:37
  • 805

ubuntu13.04 使用halt机器没有关机的解决办法

增加 INIT_HALT=poweroff 到 /etc/default/halt 问题解决
  • zphj742
  • zphj742
  • 2014年03月27日 18:21
  • 257

PHP中的10个实用函数

1.php_check_syntax 这个函数可以用来检查特定文件中的PHP语法是否正确。 使用方法: php $error_message = ""; $filename = "./p...
  • baidu_35738377
  • baidu_35738377
  • 2016年11月10日 09:56
  • 342

Linux常用命令——halt和reboot

halt——最简单的关机命令 官方释义:halt把关机记录写在/var/lop/wtmp中。当系统运行在正常模式下,即不在runlevel 0(关机)或runlevel 6(重启)模式下时。halt命...
  • qq_25355591
  • qq_25355591
  • 2016年11月20日 10:58
  • 499

stm8l 低功耗 halt_active模式

第一次尝试做低功耗,芯片stm8l,用的半halt模式 1,关于唤醒,可以用外部中断和RTC(stm8l不同的模式用的唤醒方式均不同) 2,关于省电,如果没达到理想的电流,一般都是gpio...
  • small0909
  • small0909
  • 2015年05月22日 15:44
  • 2184

Linux halt --停止系统运行,但不关闭电源

用途说明 halt命令可以停止系统运行,但不关闭电源;poweroff命令也可实现关机,同时关闭电源。它们两个都是调用shutdown命令来进行的,reboot可以将机器重启。   常用方式 ...
  • mosesmo1989
  • mosesmo1989
  • 2016年04月08日 10:11
  • 3259
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HomeWork——Halt Problem
举报原因:
原因补充:

(最多只允许输入30个字)