簡體   English   中英

*幫助*確定程序的運行時間

[英]*Help* Determining the run time of a program

必須確定以下代碼的運行時間。 對於下面的程序片段,給出運行時間的 Big-O 分析。

我試圖將數字添加到變量中,以查看需要多長時間以及如何簡化。 對 i*i 部分有困難。 我知道第二個循環將運行 O(n) 次,但很難理解第二個循環。 我知道它會遍歷 (i^2) 時間,給它一個 (i^2) 的運行時間,但這會使整個程序運行時間 n + (n^2) 還是由於簡化,因為我只是保持高階(n^2) 的數量還是我完全錯了,我需要區別對待。 我相信 t、if 語句和 t++ 的減速是 O(1) 並且是可以忽略的。

總而言之,我認為 i 對我應該如何對待它們以及在整個運行時應該如何對待 a (i^2) 感到困惑。 因為我知道嵌入式 for 循環的典型時間為 O(n^2)。

int t = 0;                       //O(1)
for(int i=1; i <= n; i++)        //O(n)
   for(int j=1; j <= i*i; j++)   //O(i^2) 
      if(j % i == 0)             //O(1)
          t++;                   //O(1)

您是正確的,典型的嵌套 for 循環的時間為O(N^2) 他們可能看起來像這樣

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        ...

或者一些變化。

因為我們嵌套它們,所以我們增加了它們的復雜性。 O(N) * O(N) = O(N^2)。

您的函數有點不同,因為內循環是您正確識別的 O(N^2),因為我們對 n 的值進行平方,然后迭代多次,而外循環是標准的 O(N) 循環。

O(N) * O(N^2) = O(N^3),這是你整體函數的復雜度。

暫無
暫無

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

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