Algorithm 算法的时间复杂度?

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]

这就是算法:我认为它的时间复杂度是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] + 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逐行总结,类似于我在这里对循环所做的,但有更多细节。