從廣義上講,資料結構就是指一組資料的儲存結構。演算法就是運算元據的一組方法。
資料結構和演算法是相輔相成的,資料結構是為演算法服務,演算法要作用在特定的資料結構之上,二者不能孤立。
比如,因為陣列具有隨機訪問的特點,常用的二分查詢演算法需要用陣列來儲存資料。但如果我們選擇鍊錶這種資料結構,二分查詢演算法就無法工作了,因為鍊錶並不支援隨機訪問。
資料結構是靜態的,只是組織資料的一種方式,如果不在它的基礎之上操作、構建演算法,孤立存在的資料結構就是沒用的。
一、什麼是複雜度分析?
資料結構和演算法解決是「如何讓計算機更快時間、更省空間的解決問題」。
因此需從執行時間和占用空間兩個維度來評估資料結構和演算法的效能。
分別用時間複雜度和空間複雜度兩個概念來描述效能問題,二者統稱為複雜度。
複雜度描述的是演算法執行時間(或占用空間)與資料規模的增長關係。
二、為什麼要進行複雜度分析?
和效能測試相比,複雜度分析有不依賴執行環境、成本低、效率高、易操作、指導性強的特點。
掌握複雜度分析,將能編寫出效能更優的**,有利於降低系統開發和維護成本。
我們需要乙個不用具體的測試資料來測試,就可以粗略地估計演算法的執行效率的方法。
三、如何進行複雜度分析?
1.大o表示法
特點:以時間複雜度為例,由於時間複雜度描述的是演算法執行時間與資料規模的增長變化趨勢,所以常量階、低階以及係數實際上對這種增長趨勢不產決定性影響,所以在做時間複雜度分析時忽略這些項。
2.複雜度分析法則
四、常用的複雜度級別?
一、複雜度分析的4個概念
最壞情況時間複雜度:**在最理想情況下執行的時間複雜度。
最好情況時間複雜度:**在最壞情況下執行的時間複雜度。
平均時間複雜度:用**在所有情況下執行的次數的加權平均值表示。
均攤時間複雜度:在**執行的所有複雜度情況中絕大部分是低階別的複雜度,個別情況是高階別複雜度且發生具有時序關係時,可以將個別高階別複雜度均攤到低級別複雜度上。基本上均攤結果就等於低級別複雜度。
二、為什麼要引入這4個概念?
同一段**在不同情況下時間複雜度會出現量級差異,為了更全面,更準確的描述**的時間複雜度,所以引入這4個概念。
**複雜度在不同情況下出現量級差別時才需要區別這四種複雜度。大多數情況下,是不需要區別分析它們的。
三、如何分析平均、均攤時間複雜度?
平均時間複雜度:**在不同情況下複雜度出現量級差別,則用**所有可能情況下執行次數的加權平均值表示。
均攤時間複雜度:兩個條件滿足時使用
**在絕大多數情況下是低級別複雜度,只有極少數情況是高階別複雜度。
低級別和高階別複雜度出現具有時序規律,均攤結果一般都等於低級別複雜度。
01演算法 時間複雜度分析
本書是基於演算法導論第一節課的總結。主要總結演算法分析中的時間複雜度,並通過排序演算法中的插入排序和歸併排序來分析。文章中的 由go語言實現 分析演算法執行的快慢,主要有以下幾個方面決定 輸入資料的大小 data size 輸入資料的好壞,在什麼樣的平台上執行。乙個好的程式或者軟體,需要對輸入的物件...
01 複雜度分析(上)
執行次數!大 o 時間複雜度實際上並不具體表示 真正的執行時間,而是表示 執行時間隨資料規模增長的變化趨勢,所以,也叫作漸進時間複雜度 asymptotic time complexity 簡稱時間複雜度。當 n 很大時,你可以把它想象成 10000 100000。而公式中的低階 常量 係數三部分並...
演算法複雜度分析
分析非遞迴演算法效率的通用方案 1.決定用哪個 哪些 引數作為輸入規模的度量 2.找出演算法的基本操作 作為一規律,它總是位於演算法的最內層迴圈中 3.檢查基本操作的執行次數是否只依賴輸入規模。如果它還依賴一些其他的特性,則最差效率 平均效率以及最優效率 如果必要 需要分別研究。4.建立乙個演算法基...