邏輯結構即數據的抽象表示,與具體實現無關的。數組
即數據結構的物理結構,這是數據結構在計算中的實際表示,依賴於具體實現。數據結構
運算的定義針對邏輯結構,運算的功能針對存儲結構。函數
效率的度量由時間與空間的複雜度共同描述。spa
即執行算法須要消耗的時間。code
由於全部T(n)與f(n)同數量級,因此使用T(n)來衡量算法的實際複雜度。記作T(n)=O(f(n)),這裏的O記號表示的的是取f(n)的最大數量級。對象
對於時間複雜度還有一點很是很是重要的是,時間複雜度依賴於輸入。根據輸入的不一樣,通常咱們會將時間複雜度分類三類來討論:最壞時間複雜度,平均時間複雜度,最壞時間複雜度。通常咱們考慮在最壞狀況下的時間複雜度,即算法運行的上界。索引
經常使用的時間複雜度比較:
O(1) < O(\(log_2\)n) < O(n) < O(n) < O(n\(log_2\)n) < O(\(n^2\)) < O(\(n^3\)) < O(\(2^n\)) < O(\(n!\)) < < O(\(n^n\))隊列
即實現這樣的算法須要的輔助空間的大小。it
算法原地工做是指算法所須要的輔助空間是常量,即O(1)。
1) 如下屬於邏輯結構的是( )
A. 順序表 B. 散列表 C. 有序表 D.單列表
答案:C
解析:分清楚邏輯結構和存儲結構。
2) 下列函數的時間複雜度是( )
int func(int n){ int i=0, sum=0; while(sum < n) sum += ++i; return i; }
答案:O(\(\sqrt n\))
解析:
3) 如下說法錯誤的是()
A. 算法原地工做的含義是指不須要任何額外的空間
B. 相同規模n下,複雜度O(n)的算法在時間上老是優於複雜度O(\(2^n\))
C. 所謂的時間複雜度是指最壞的狀況下,估算算法執行時間的一個上界
D. 同一個算法,實現語言的級別越高,執行效率越低
答案:A 解析: