演算法中的基本操作的執行次數,稱為演算法的時間複雜度
我們計算時間複雜度,並不一定要計算所有執行次數,而是擇其大概次數就行了。
即漸進計數。
漸進計數就是說
1 已知常數次記為o(1);
2 忽略 係數 即2n次 記為o(n);
3 大資料下忽略小資料 即 n^2+2n+1 記為o(n^2);
時間複雜度 也有最好,最壞,平均情況。
最壞情況 : 最多執行的次數;
最好情況 : 最少執行的次數
平均 : 就是平均執行次數咯
在實際中,我們通常只關注最壞情況,因為這樣最保險!
再解釋有的演算法的複雜度並不僅僅只是迴圈的次數;
比如 :折半查詢, n個數,每次縮小一半,一半…直到最後乙個,如果是要找的物件就是找到了,否則沒找到。
那麼最壞情況執行了對少次呢 ??
n/2 /2/2/2/2/2/2/…直到為1個數時。
2^n=n;
n=logn(程式中的log 以2為底 n的對數 就這樣寫,方便程式設計師(不然就得呼叫格式字元輸入,太麻煩));
這就對應
o(n)=o(log n);紙上寫就要寫成 正常形式
遞迴 這個斐波那契數列
時間複雜度: 外邊n個迴圈,每個迴圈又內分開做兩個迴圈…
n=222*2.……
o(n)=2^n
空間複雜度:
他沒有開闢新空間吧?
不
引數也會開闢棧上的空間!!
long long fibonacci(size_t n)
空間複雜度 就是演算法執行的時間內需要開闢新空間的大小
切記空間跟時間的差異 ;
空間是用的時候開闢,不用就隨時釋放了,所以說它可以不同時間復用(前提是之前確實不同釋放了);
2 函式引數也會開闢棧上的空間
同理區域性變數也會
現在的科技發展很迅速,我們對空間的利用率已經相當高了,空間已經顯得不是那麼非常重要了,就好比你年前的記憶體跟如今的記憶體大小接各方面的差異。
時空複雜度的理解
1.演算法效率的度量 演算法執行的時間需通過依據該演算法編制程式在計算機上執行時所消耗的時間來度量。而度量乙個程式執行時間通常有兩種方法。1 事後統計法 因為計算機內部都有計時功能,有的甚至精確到毫秒級,不同演算法的程式可通過一組或若干組相同的統計資料以辨別優劣。但這種方法有兩個缺陷 一是必須先執行...
演算法時空複雜度分析
目錄 1.時間複雜度 2.空間複雜度 3.常見的演算法複雜度 4.相關典型例題 5.總結 在acm範圍裡,我們只需了解時間複雜度可以大致地通過乙個演算法運算的次數來描述程式執行的效率,常常用大寫字母o來表示。在表示時間複雜度的時候,只保留數量級最大的一項,並忽略係數。對於給定的常數n 若某乙個演算法...
時間複雜度 空間複雜度
時間複雜度 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串 的長度的函式。時間複雜度常用大o符號 表述,不包括這個函式的低階項和首項係數。計算時間複雜度的方法 1 只保留高階項,低階項直接丟棄 2 係數不要 3 執行次數是常數是為o 1...