1

我正在尝试在 Python(或伪代码)中为给定的函数列表 [f1,...,fn] 和给定的输入列表 [x1,...,xn] 仅打印一次 fi(xj)(表示所有函数和输入对)。

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

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

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

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

我只需要一个关于如何做到这一点的想法或算法。

4

1 回答 1

7

对此的一般概念是配合。您不必尝试运行每个备选方案以完成,而是交错各种备选方案。例如,给定三个计算 c1、c2、c3:

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

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

当然,如果任何计算没有停止,这也不会停止。这是不可避免的(参见停止问题)并且不是问题,因为您将在进入无用的无限循环之前完成那些停止的(在您的情况下:输出它们的结果)。

于 2014-05-06T16:18:16.700 回答