1. 程式人生 > 其它 >資料結構01-時空分析

資料結構01-時空分析

1、時空分析

1、1時間複雜度分析

​ 我們一般採用大 o 表示法,大 O 複雜度表示法 , 它並不表示程式碼執行真正需要的時間 , 而是一種隨著資料規模增長的趨勢。也就是我們考慮的是執行時間的上界。

//example:
int cal(int n)
{
    int sum = 0; //執行一次
    int i = 1; //執行一次
    for (; i <= n; ++i) //執行n次
    {
        sum = sum + i;//執行n次
    }
    return sum; //執行一次
}

//總的執行時間就是 T = 3T(1) + 2T(n)
//因為我們只是估算一個增長趨勢, 而常數和係數不會對增長趨勢產生什麼影響, 所以可以簡寫為 f(n) = n
//當 n 足夠大的時候,整個 T 就趨向於 f(n)

則有 T(n) = O(n) , 即表示: 程式碼執行時間T(n)和程式碼執行次數f(n)成正比
如何快速估算一段程式碼的時間複雜度呢

1, 只關注迴圈執行次數最多的一段程式碼

2, 總的複雜度 = 複雜度量級最高的那段程式碼的複雜度

3, 巢狀程式碼的複雜度 = 巢狀內外程式碼複雜度的乘積

1、2常見的時間複雜度

O(1)
O(logn)
O(n)
O(nlogn)
O(n^2)
i = 1;
while (i <= n)
{
    i = i * 3;
}


計算方式:看迴圈終止時,關鍵語句執行次數

\[i = 3^x = n \] \[x = logn \]

即 i = i *3 執行 logn 次,那麼時間複雜度就是 T = O(logn)

1、3空間複雜度分析

空間複雜度全稱是漸進空間複雜度, 表示演算法的儲存空間和資料規模之間的增長關係

常用的空間複雜度量級有O(1), O(n), O(n^2)