簡體   English   中英

查找程序的運行時間

[英]Finding running time of program

我是算法和DS的新手。 我指的是一本書,其中有一些我很難理解的問題。

我需要找到以下程序的運行時間:(注釋僅來自本書)

function(int n) {
    for(int i=1;i<=n/3;i++) { // will execute n/3 time
        for(int j=1;j<=n;j+=4) { // will execute n/4 times
            printf("*");
        }
    }
}

答案:O(n ^ 2)

n ^ 2怎么樣? 第一個循環將執行n / 3次,第二個循環將執行n / 4。 n / 3 * n / 4 = n ^ 2/12。 n ^ 2怎么樣? 請幫助我理解。

問題2

function(int n) {
    for(int i=0;i<n;i++) { // will execute n times
        for(int j=i;j<i*i;j+=4) { // will execute n*n times ?????? (How?) 
            if(j%i==0) {
                for(int k=0;k<j;k++) { // will execute j times
                    printf("*");
                }
            }
        }
    }
}

答案:O(n ^ 5)

第一個循環執行n次。 精細。

第二個循環如何執行n * n次? 在這里,j的值被初始化為i,所以它不應該是(n * n)-i次嗎? 如果將j初始化為0,那將是n * n次,對嗎?

第三個循環執行j次,因為k

請幫助我理解為什么第二個循環(j)將執行n * n次。 謝謝。

這本書涉及大哦。 關於big-Oh的完整介紹可能太長了,但是在big-Oh領域,它認為:

O(a*f(n)) = O(f(n))

a恆定的。

另一個是:

O(a_k * n^k+ a_(k-1) n^(k-1)+...+a_0) = O(n^k)

f(n)是一個隨機函數。


關於第二個問題 :第二個循環從ii*i 現在,由於i將達到n-1 ,因此它的大小為O(n) ,因此循環將在最后一次運行(n-1)*(n-1)次中執行。 由於j最終將達到O(n^2)量級,並且第三個循環從0j-1 ,因此第三個(最內部)循環的時間復雜度也為O(n^2) 因此,這意味着循環的總時間復雜度為:

O(n)*O(n^2)*O(n^2)=O(n^5)

暫無
暫無

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

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