Time complexity 确定程序';执行时间的长度(以位为单位)?

Time complexity 确定程序';执行时间的长度(以位为单位)?,time-complexity,collatz,code-complexity,halting-problem,computability,Time Complexity,Collatz,Code Complexity,Halting Problem,Computability,这是我在阅读停止问题、collatz猜想和Kolmogorov复杂性时突然想到的一个问题。我试图寻找类似的东西,但我找不到一个特定的主题,可能是因为它没有太大的价值,也可能只是一个微不足道的问题 为了简单起见,我将给出三个程序/函数的示例 function one(s): return s 因此,我的问题是,是否有一种方法可以形式化程序的长度(如用于描述它的位)以及程序使用的内部内存,以确定决定程序是否将终止或永远运行所需的最小/最大时间/步骤数 例如,在第一个函数中,程序不改变其内部内存

这是我在阅读停止问题、collatz猜想和Kolmogorov复杂性时突然想到的一个问题。我试图寻找类似的东西,但我找不到一个特定的主题,可能是因为它没有太大的价值,也可能只是一个微不足道的问题

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

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

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

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

最后,我想向我推荐任何我可能发现有用的来源,并帮助我弄清楚我到底在寻找什么。

非常感谢。(对不起,我的英语不是我的母语。我希望我说得很清楚)

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

如果事先知道确定性图灵机不可能使用超过某个固定数量的输入磁带,则TM必须显式停止或最终输入它已经访问过的某个配置。假设TM最多可以使用k个磁带单元,磁带字母表为T,状态集为Q。然后有(| T |+1)^k*| Q |唯一配置(长度为k的(T联合空格)上的字符串数乘以状态数)根据鸽子洞原理,我们知道,一个需要进行很多步骤的TM必须进入一些它以前已经去过的配置

第一:因为我们知道这个函数不使用内存,所以我们知道它要么停止,要么永远循环

第二:因为我们知道这个函数不使用内存,所以我们知道它要么停止,要么永远循环

第三:因为我们知道这个函数只使用固定数量的内存(比如34位),我们可以在不到2^34次的循环中判断TM是否会在任何给定的输入s中停止,这是有保证的


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

如果一个确定性图灵机进入两次完全相同的配置(我们可以检测到b保留迄今为止看到的配置跟踪),然后我们马上知道TM将永远循环

如果事先知道确定性图灵机不可能使用超过某个固定数量的输入磁带,则TM必须显式停止或最终输入它已经访问过的某个配置。假设TM最多可以使用k个磁带单元,磁带字母表为T,状态集为Q。然后有(| T |+1)^k*| Q |唯一配置(长度为k的(T联合空格)上的字符串数乘以状态数)根据鸽子洞原理,我们知道,一个需要进行很多步骤的TM必须进入一些它以前已经去过的配置

第一:因为我们知道这个函数不使用内存,所以我们知道它要么停止,要么永远循环

第二:因为我们知道这个函数不使用内存,所以我们知道它要么停止,要么永远循环

第三:因为我们知道这个函数只使用固定数量的内存(比如34位),我们可以在不到2^34次的循环中判断TM是否会在任何给定的输入s中停止,这是有保证的

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

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