簡體   English   中英

此for循環的運行時復雜度是多少?

[英]What is the run time complexity of this for loop?

我試圖找出此算法的運行時復雜性。

public static void main(String[] args) throws InterruptedException{

  for (int N=100; N<=1000000; N=N*5) {  
   long start = System.currentTimeMillis();
   for (int i = 1; i <= N; i++) {     
      for (int j = 1; j <= Math.pow(N,1.5); j++) {
      i = i*2;
      j = j*2;
      Thread.sleep(10); 
     } 
    }
   long stop = System.currentTimeMillis();
   long elapsed = (long)(stop - start);
   System.out.println();
   System.out.println("For N=" + N + " RT in msec: "+elapsed); 
 }
}

第一個for循環:

for (int N=100; N<=1000000; N=N*5) // runs n/5 times, so O(n). 

第一個內部循環:

for (int i = 1; i <= N; i++) // runs n times. 

第二個內部循環:

for (int j = 1; j <= Math.pow(N,1.5); j++) { // we can consider Math.pow O(1)
      i = i*2;
      j = j*2;
      Thread.sleep(10); 
     } 

因此,通過將所有O(n)* O(n)* O(1)= O(n ^ 2)相乘,我的答案正確嗎? 我對此有些困惑。 將不勝感激對此任何澄清。 謝謝

第一個循環實際上是O(k) ,其中5^k = N 因此, k = log_5(N) 第一個內部循環為true(在O(n) )。 第二個內部循環j每次是2 因此,是O(h) 2^h = N^1.5 因此, h = 1.5 log(N)

總之,該算法為O(log_5(N) * N * log(N)) = O(N log^2(N))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM