如何避免不停止功能?

时间:2014-05-06 16:08:14

标签: python halting-problem

我试图找到一个编写高级函数的算法 - 不必停止 - 在Python(或伪代码)中,对于给定的函数列表[f1,... 。,fn]和给定的输入列表[x1,...,xn]只打印一次fi(xj)(意思是所有的函数和输入对)。

当然,实施这一点的天真建议是:

for f in lst1:
   for x in lst2:
      f(x)

但问题是,某些功能可能会在某些输入上永远循环。

我被允许使用一个步进器(它有一个step()方法,每次调用该函数的一个后续计算步骤)

我只需要一个关于如何操作的想法或算法。

1 个答案:

答案 0 :(得分:7)

一般的概念是鸠尾榫。您可以交替使用各种替代方法,而不是尝试运行每个替代方案。例如,给定三个计算c1,c2,c3:

  • 执行c1
  • 的第1步
  • 执行c2
  • 的第1步
  • 运行c3的第1步
  • 执行c1
  • 的第2步
  • 运行c2的第2步,终止
  • 运行c3的第2步
  • 执行c1
  • 的第3步
  • 运行c3的第3步
  • ...

如果计算停止,则此过程在有限时间内达到其暂停状态,而不管有多少其他计算没有停止。以这种方式运行k计算仅将每个计算减慢因子k。由于这可能是家庭作业,我不会详细说明如何将其应用于您的具体问题。

当然,如果任何计算都没有停止,这不会停止。这是不可避免的(参见暂停问题)而不是问题,因为在你进入徒劳无限循环之前,你将完成那些停止(在你的情况下:输出他们的结果)。< / p>