相关疑难解决方法(0)

什么是停顿问题?

每当人们询问与编程有关的暂停问题时,人们会回答:"如果你只是添加一个循环,那么你就有了停止程序,因此无法自动完成任务 "

说得通.如果你的程序有一个无限循环,那么当你的程序运行时,你无法知道程序是否仍在处理输入,或者它是否只是无限循环.

但其中一些似乎反直觉.如果我正在编写一个暂停问题求解器,它将源代码作为输入,那该怎么办?rascher@localhost$ ./haltingSolver source.c

如果我的代码(source.c)看起来像这样:

for (;;) {  /* infinite loop */  }
Run Code Online (Sandbox Code Playgroud)

看起来我的程序看起来很容易."查看循环,看看条件.如果条件只是基于文字而没有变量,那么你总是知道循环的结果.如果有变量(例如while(x <10)),看看是否这些变量是永远修改的.如果没有,那么你总是知道循环的结果."

当然,这些检查不会是微不足道的(计算指针算术等),但这似乎不可能.例如:

int x = 0
while (x < 10) {}
Run Code Online (Sandbox Code Playgroud)

可以检测到.以及 - 尽管不是轻微的:

int x = 0
while (x < 10)
{
   x++;
   if (x == 10)
   {
      x = 0
   }
}
Run Code Online (Sandbox Code Playgroud)

那么用户输入呢?这就是踢球者,这就是让程序无法预测的原因.

int x = 0;
while (x < 10) 
{
   scanf("%d", &x); /* ignoring infinite scanf loop oddities */
}
Run Code Online (Sandbox Code Playgroud)

现在我的程序可以说:"如果用户输入10或更高,程序将停止.在所有其他输入,它将再次循环."

这意味着,即使有数百个输入,也应该能够列出程序停止的条件.实际上,当我编写程序时,我总是确保有人能够终止它!我并不是说由此产生的条件清单是微不足道的,但对我来说似乎并不可能.您可以从用户那里获取输入,使用它们来计算指针索引等等 - 但这只会增加条件的数量以确保程序终止,不会使它们无法枚举. …

computer-science halting-problem

52
推荐指数
8
解决办法
2万
查看次数

"查找给定二进制文件中的所有代码等同于停止问题." 真?

刚刚阅读有关模拟器和声明的高度投票的问题

已经证明,找到给定二进制文件中的所有代码等同于停止问题.

真的困在我身边.

当然不可能是真的吗?这不仅仅是一个大的依赖图吗?

非常感谢对此声明的进一步了解.

computer-science emulation halting-problem p-np

9
推荐指数
2
解决办法
2357
查看次数