繁体   English   中英

通过以位为单位的长度确定程序的执行时间?

[英]Determining a program's execution time by its length in bits?

这是我在阅读停机问题、collat​​z 猜想和 Kolmogorov 复杂性时突然想到的一个问题。 我试图搜索类似的东西,但我无法找到一个特定的主题,也许是因为它没有很大的价值,或者它可能只是一个微不足道的问题。

为了简单起见,我将给出三个程序/函数的例子。

function one(s):
  return s
function two(s):
  while (True):
    print s
function three(s):
  for i from 0 to 10^10:
    print(s)

所以我的问题是,是否有一种方法可以将程序的长度(如用于描述它的位)以及程序使用的内部存储器形式化,以确定决定所需的最小/最大时间/步数程序是终止还是永远运行。

例如,在第一个函数中,程序不会改变其内部存储器并在一些时间步后停止。
在第二个示例中,程序永远运行,但程序也不会更改其内部存储器。 例如,如果我们考虑所有与程序 2 长度相同但不改变其状态的程序,难道我们不能确定步数的上限,如果超过这个上限,我们可以得出这个程序永远不会终止的结论吗? (如果不是为什么?)
在最后一个例子中,程序改变了它的状态(变量 i)。 因此,在每一步,上限可能会改变。

[简而言之] Kolmogorov 复杂性提出了一种寻找对象(例如一段文本)的(描述性)复杂性的方法。 我想知道,给定一种描述程序使用的内存空间的正式方式(在运行时计算),我们是否可以计算最大步数,如果超过该步数,我们就可以知道该程序是否会终止或永远运行。

最后,我想向我推荐任何我认为有用的来源,并帮助我弄清楚我到底在寻找什么。
谢谢你。 (对不起我的英语,不是我的母语。我希望我很清楚)

如果确定性图灵机两次进入完全相同的配置(我们可以检测到保留迄今为止看到的配置的痕迹),那么我们立即知道 TM 将永远循环。

如果它事先知道确定性图灵机不可能使用超过某个固定常量的输入磁带,那么 TM 必须明确地停止或最终进入它已经访问过的某个配置。 假设 TM 最多可以使用 k 个磁带单元,磁带字母表是 T,状态集是 Q。那么有 (|T|+1)^k * |Q| 唯一的配置(长度为 k 倍的状态数的字符串数量(T union blank)和鸽巢原理我们知道,一个需要这么多步骤的 TM 必须进入它之前已经进入的某个配置。

一:因为我们知道这个函数不使用内部存储器,我们知道它要么暂停,要么永远循环。

二:因为我们知道这个函数不使用内部存储器,我们知道它要么暂停,要么永远循环。

三:因为我们知道这个函数只使用固定数量的内部存储器(比如 34 位),所以我们可以在少于 2^34 次循环迭代中判断 TM 是否会针对任何给定的输入 s 停止,保证。

现在,知道TM 将使用多少磁带,或者程序将使用多少内存,都不是 TM 可以解决的问题。 但是如果你有一个预言机(比如一个能够做证明的人)告诉你一个正确的固定内存上限,那么停机问题是可以解决的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM