问题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”的含义是什么
亲切
答案 0 :(得分:1)
Max1(X,N-1)
实际的算法是剩下的几项检查O(1)
无论输入如何,所用的时间都是相同的。
我只能假设Max1
函数是在数组中找到数组最高的数字,这将是O(n)
,因为它将以线性方式增加到输入数n。
另据我所知,在大多数算法中,1代表1,只有字母具有可变含义,如果你的意思是如何得到
T(n-1) + 1
到O(n)
,这是因为你忽略系数和低阶项,所以1是两种情况都会被忽略而不能O(n)
答案 1 :(得分:1)
答案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的算法的运行时间是多少?