问题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”是什么意思
亲切地
问题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”是什么意思
亲切地
答案 1. 您正在寻找复杂性。你必须决定你想要什么样的案例复杂度:最好的、最坏的或平均的。根据您选择的内容,您会以不同的方式找到 T(1):
在你的情况下,对于长度为 1 的输入,你总是返回,所以你的 T(n) = O(1) (实际数字取决于你如何计算指令)。
回答 2。在这种情况下,“1”表示指令的精确数量,在某些指令计数系统中。它与 O(1) 的区别在于 O(1) 可以表示不依赖于(根据、趋势等)输入的任何数字(或数字)。您的等式表示“在大小为 n 的输入上评估函数所需的时间等于在大小为 n - 1 的输入上评估函数所需的时间,再加上一条额外的指令”。
Max1(X,N-1)是实际的算法,其余的是一些检查,O(1)
无论输入如何,所用的时间都是相同的。
Max1我只能假设的函数是在数组中找到数组最高数,这将是O(n)因为它会以线性方式随时间增加到输入 n 的数量。
另外据我所知,在大多数算法中,1 代表 1,只有字母具有可变含义,如果您的意思是它们是如何得到的
T(n-1) + 1到O(n),这是由于您忽略了系数和低阶项,所以 1 是两种情况都被忽略了O(n)
T( n ) 是所谓的“ n的函数”,也就是说,n是一个“变量”(意味着您可以用不同的值替换它的位置),并且n的每个特定(有效)值将确定T( n )的对应值。因此,T(1) 仅表示“当n为 1时 T( n ) 的值”。
所以问题是,对于输入值为 1,算法的运行时间是多少?