Algorithm 依赖于2个输入的算法的时间复杂度T(n)
通常,在分析算法的运行时间时,我处理的是影响运行时间的单个输入。我试图理解当有2个或更多的输入影响运行时间时,如何表示T(n) 例如,在最坏情况下的线性搜索中:Algorithm 依赖于2个输入的算法的时间复杂度T(n),algorithm,time-complexity,analysis,Algorithm,Time Complexity,Analysis,通常,在分析算法的运行时间时,我处理的是影响运行时间的单个输入。我试图理解当有2个或更多的输入影响运行时间时,如何表示T(n) 例如,在最坏情况下的线性搜索中: function LinearSearch(arr, N, x) for (i = 0; i < N; i++) ---> C1*N + C2 if arr[i] = x ---> C3*N return true
function LinearSearch(arr, N, x)
for (i = 0; i < N; i++) ---> C1*N + C2
if arr[i] = x ---> C3*N
return true
return false ---> C4
函数线性搜索(arr,N,x)
对于(i=0;iC1*N+C2
如果arr[i]=x--->C3*N
返回真值
返回false->C4
T(n)=(C1+C3)*n+(C2+C4)
=CN+C
所以T(n)相对于n是线性的
现在假设有另一个算法,它接受了输入X和Y,我做了类似的分析,发现在最坏的情况下成本是:
T(n)=CX+C
最好的情况是:
T(n)=CY+C
我的问题是,这样表示运行时间是否正确?假设在不同的情况下,有两种不同的输入会影响运行时间
我没有在网上或教科书中找到太多信息,但我一直在思考T(n)中的n是否代表所有输入,或者是否可以这样表示:
T(X)=CX+C
T(Y)=CY+C
我在一篇研究论文中也看到了一种算法,类似于:
T(n,m)=某个表达式
任何帮助都将不胜感激
谢谢
编辑:时间复杂度取决于两个输入的算法示例可以是基数排序
我知道基数排序通常表示为O(n*k),其中n是要排序的元素数,k是最大值的位数
忽略T(n)的确切细节,这是如何表示的?如果算法的复杂度取决于单个参数,并且您希望将该参数称为
X
,那么时间复杂度也将取决于X
,而不是n
(什么是n
):例如T(X)=X^2
如果算法的复杂度取决于参数
n1
,n2
,…,nk
(且参数相互独立),则时间复杂度将是k
参数中的函数,T(n1,…,nk)
例如,一个算法需要两个长度为
x
和y
的字符串并打印它们,它的时间复杂度T(x,y)=O(x+y)
O(n*k)
在x
和k
中都是线性的(显然),可以说O(n)
,这意味着k
是固定的(或反之亦然)。毕竟,大多数现实世界的算法都有许多参数;在这种情况下,它的教科书只依赖于一个“正确的”,在这种情况下,作为它的唯一符号,这实际上是一个惯例。我可以说是O(n*k)
,O(k)
,O(x)中的任何一个
在理解假设的情况下是正确的。在上述最佳情况为CY+C的示例中,如果我被问到关于T(X)的最佳情况,它是否会是常数,因为关于X的运行时间不受Y的影响(在最佳情况下)?当然不会。如果问题是“关于X的最佳情况”,您可能希望看到关于X的运行时间。但我遇到的问题是,如果我计算出最好的情况,例如CY+C,而他们要求X,我不明白那会是什么