当我测量算法的复杂性时,如何找到T(1)

时间:2013-01-03 15:34:57

标签: complexity-theory time-complexity space-complexity

问题01: 当我测量算法的复杂性时,如何找到T(1)?

例如 我有这个算法

Int Max1 (int *X, int N)
{
  int a ;
  if (N==1) return X[0] ;
  a = Max1 (X, N‐1);
  if (a > X[N‐1]) return a;
  else return X[N‐1];
}

如何找到T(1)?

问题2:

T(n)= T(n-1) + 1 ==> O(n)

这个等式中“1”的含义是什么

亲切

3 个答案:

答案 0 :(得分:1)

Max1(X,N-1)实际的算法是剩下的几项检查O(1) 无论输入如何,所用的时间都是相同的。

我只能假设Max1函数是在数组中找到数组最高的数字,这将是O(n),因为它将以线性方式增加到输入数n。

另据我所知,在大多数算法中,1代表1,只有字母具有可变含义,如果你的意思是如何得到

T(n-1) + 1O(n),这是因为你忽略系数和低阶项,所以1是两种情况都会被忽略而不能O(n)

答案 1 :(得分:1)

答案1.您正在寻找复杂性。您必须确定所需的案例复杂程度:最佳,最差或平均。根据您选择的内容,您可以通过不同的方式找到T(1):

  • 最佳:想想您的算法可以获得的最简单的长度1输入。如果你在列表中搜索一个元素,最好的情况是元素是列表中的第一个元素,你可以得到T(1)= 1.
  • 最糟糕的是:想想你的算法可以获得的最长1的输入。也许你的线性搜索算法对长度为1的大多数输入执行1条指令,但是对于列表[77],你需要100步(这个例子有点人为,但是算法完全有可能采取更多或更少的步骤,具体取决于输入的属性与输入的“大小”无关。在这种情况下,您的T(1)= 100。
  • 平均值:考虑算法可以得到的长度为1的所有输入。为这些输入分配概率。然后,计算得到平均情况T(1)的所有可能性的平均T(1)。

在您的情况下,对于长度为1的输入,您总是返回,因此您的T(n)= O(1)(实际数字取决于您如何计算指令)。

答案2.在某些指令系统中,此上下文中的“1”表示精确的指令数。它与O(1)的区别在于O(1)可以表示不依赖于(根据,趋势等)输入的任何数字(或数字)。你的等式说“在大小为n的输入上评估函数所花费的时间等于在大小为n-1的输入上评估函数所花费的时间,加上一个额外的指令”。

答案 2 :(得分:1)

T( n )是所谓的“ n 的函数”,也就是说, n 是一个“变量”(这意味着您可以在其位置替换不同的值),并且 n 的每个特定(有效)值将确定T( n )的对应值。因此,当 n 为1时,T(1)只表示“T( n )的值。”

所以问题是,输入值为1的算法的运行时间是多少?