Time complexity 时间复杂度比较

Time complexity 时间复杂度比较,time-complexity,big-o,Time Complexity,Big O,我得到了这两个算法,每个算法有两个for循环,我认为第一个算法的运行时间是二次的。第二个算法是否具有相同的运行时间-O(n^2) 算法1: for (int i = 1..n) { for (int j = 1..n) { // sort m[i, j] } } 算法2: for (int i = 1..n) { for (int j = i..n) { // sort m[i, j] } } 我查看了以

我得到了这两个算法,每个算法有两个for循环,我认为第一个算法的运行时间是二次的。第二个算法是否具有相同的运行时间-O(n^2)

算法1:

for (int i = 1..n) { 
     for (int j = 1..n) {
          // sort m[i, j]
     } 
}
算法2:

for (int i = 1..n) { 
     for (int j = i..n) {
          // sort m[i, j]
     } 
}
我查看了以前类似的帖子(大O符号),但找不到任何解决我问题的方法-如果你这样做,请给我指出正确的方向


谢谢

让我们分析算法2,另一个类似

首先让我们同意,
排序m[i,j]
O((j-i)lg(j-i))


谢谢你的回答。那么你认为这两次都是O(n³)?
Alg 2  = O(sum_{i=1}^n sum_{j=i}^n (j-i)lg(j-i))
      <= O(sum_{i=1}^n sum_{j=i}^n (n-i)lg(n-i))
      <= O(sum_{i=1}^n (n-i)^2 lg(n-i))
       = O(sum_{i=1}^n i^2 lg(i))
      <= O(sum_{i=1}^n i^2 lg(n))
       = O(n^3 lg(n))
Alg 2  = O(sum_{i=1}^n sum_{j=i}^n (j-i)lg(j-i))                      ; take 1/2 of terms
      >= O(sum_{i=n/2}^n sum_{j=(i+n)/2}^n (j-i) lg(j-i))
      >= O(sum_{i=n/2}^n sum_{j=(i+n)/2}^n (n-i)/2 lg((n-i)/2)))      ; because j>=(i+n)/2
      >= O(sum_{i=n/2}^n ((n-i)/2)^2 lg((n-i)/2)))
      >= O(sum_{i=n/2}^{(n+n/2)/2} ((n-i)/2)^2 lg((n-i)/2)))          ; 1/2 of terms
      >= O(sum_{i=n/2}^{3n/4} (n/8)^2 lg(n/8))                        ; -i >= -3n/4
       = O(n^3 lg(n))