Algorithm 算法的时间复杂度?
这就是算法:我认为它的时间复杂度是O(n^2),因为是循环中的循环。我怎么解释呢Algorithm 算法的时间复杂度?,algorithm,time-complexity,Algorithm,Time Complexity,这就是算法:我认为它的时间复杂度是O(n^2),因为是循环中的循环。我怎么解释呢 FindSum(array, n, t) i := 0 found := 0 array := quick_sort(array, 0, n - 1) while i < n – 2 j = i + 1 k = n - 1 while k > j sum = array[i] + array[j]
FindSum(array, n, t)
i := 0
found := 0
array := quick_sort(array, 0, n - 1)
while i < n – 2
j = i + 1
k = n - 1
while k > j
sum = array[i] + array[j] + array[k]
if sum == t
found += 1
k -= 1
j += 1
else if sum > t
k -= 1
else
j += 1
FindSum(数组,n,t)
i:=0
找到:=0
数组:=快速排序(数组,0,n-1)
而ij时
总和=数组[i]+数组[j]+数组[k]
如果和=t
发现+=1
k-=1
j+=1
如果sum>t,则为else
k-=1
其他的
j+=1
是的,复杂性确实是O(n^2)
内部循环在k-j=n-1-(i+1)=n-i-2
到(k-j)/2=(n-i-2)/2
迭代之间的任意位置运行
将i
从0到n-2的所有可能值相加,得出:
T = n-0-2 + n-1-2 + n-2-2 + ... + n-(n-2)-2
= n-2 + n-3 + ... + 0
这是算术级数的和,它的和是二次的。请注意,除以额外的2(对于内部循环的“最佳”情况)不会改变大O表示法的时间复杂度。这就是这种语言-您可以用Ruby重写它吗?您假设项目是唯一的。如果这不是真的,那么您将错过一些匹配(在中,如果sum==t
)O(n^2)意味着在最坏的情况下,要在您的状态下对数组执行某些操作,您将需要引用每个元素n次。除非我遗漏了一些东西,否则您的时间复杂度为O(无穷大)因为你从不增加i
或减少n
,因此你最终会陷入一个无止境的循环(如果你真的循环的话)。谢谢你的回复。这就是全部代码:我的老师告诉我,她知道有n^2,但她需要更多的解释(每行)。。有可能解决吗?她说:“很好,但这还不够”:@matou这不是你的任务吗?我给了你一个非常清晰的解释,你所需要做的就是把更多的细节放进去,分析每一行,然后像我一样分析循环。不应该太难。祝你好运。。我知道,但是我的老师想要更多,我不知道如何比你写的解释得更清楚。我想一行一行地说,但“这还不够”。也许她不知道发生了什么?@matuo逐行总结,类似于我在这里对循环所做的,但有更多细节。