資料結構 筆記:演算法的事件複雜度
判斷一個演算法的效率時,運算元量中的常數項和其他次要項常常可以忽略,只需要關注最高階項就能得出結論
演算法的複雜度
-時間複雜度
·演算法執行後對時間需求量的定性描述
-空間複雜度
·演算法執行後對空間需求量的定性描述
大O表示法
-演算法效率嚴重依賴於操作(Operation)數量
-運算元量的估算可以作為時間複雜度的估算
-在判斷時首先關注運算元量的最高次項
總結:
-時間複雜度是演算法執行時對於時間的需求量
-大O表示法用於描述演算法的時間複雜度
-大O表示法只關注運算元量的最高次項
-常見的時間複雜度為:線性階,平方階和對數階
相關推薦
資料結構 筆記:演算法的事件複雜度
判斷一個演算法的效率時,運算元量中的常數項和其他次要項常常可以忽略,只需要關注最高階項就能得出結論 演算法的複雜度 -時間複雜度 ·演算法執行後對時間需求量的定性描述 -空間複雜度 ·演算法執行後對空間需求量的定性描述 大O表示法 -演算法效率嚴重依賴於操作(Operat
資料結構 筆記:演算法效率的度量
演算法的空間複雜度(space Complexity) -定義:S(n) = S(f(n)) ·n為演算法的問題規模 ·f(n)為空間使用函式,與n相關 推導時間複雜度的方法同樣適用於空間複雜度 空間與時間的策略 -多數情況下,演算法的時間複雜度更令人關注 -如果有必要,
(最全)資料結構各排序演算法時間複雜度,空間複雜度,穩定性比較
演算法 時間複雜度 最好 ---------- 平均 --------- 最壞 直接插入排序 o(n)-------- o(n的平方) ---------
資料結構 筆記:程式演算法的選擇
如果兩個演算法都滿足功能性需求,那工程中最關心的其他特性是什麼?如何比較評判呢? ps:價效比(效率)是工程中最關注的演算法附加特性! 事後統計法 -比較不同演算法對同一組輸入資料的執行處理時間 -缺陷 ·為了獲得不同演算法的執行時間必須編寫相應程式 ·執行時間嚴重依賴硬體以
資料結構 筆記:KMP演算法的應用
成員函式 功能描述 indexOf(s) 查詢子串s在字串中的位置 remove(s) 將字串中的子串s刪除 operator-(s) 定義字串減法
資料結構 筆記:KMP子串查詢演算法
發現 -匹配失敗時的右移位數與子串本身相關,與目標串無關 -移動位數=已匹配的字元數-對應的部分匹配值 -任意子串都穿在一個唯一的部位匹配表 字首 -除了最後一個字元以外,一個字串的全部頭部組合 字尾 -出了第一個字元以外,一個字串的全部尾部組合 部分匹配值 -字
資料結構 筆記:程式的靈魂
資料結構靜態的描述了資料元素之間的掛你 高效的程式需要在資料結構的基礎上設計和選擇演算法 演算法是特定問題求解步驟的描述 在計算機中表現為指令的有限序列 算是獨立存在的一種解決問題的方法和思想,對於演算法而言,語言並不重要,重要的是思想。 演算法的特性: -輸入:演算法具有0
資料結構 筆記:資料的藝術
資料的概念 -程式的操作物件,用於描述客觀事物 資料的特點 -可以輸入到計算機 -可以被計算機程式處理 資料中的新概念 -資料元素 ·組成資料的基本單位 -資料項 ·一個數據元素由若干資料項組成 -資料物件 ·性質相同的資料元素的結合 資料結構指資料物
資料結構 筆記:線性表的順序儲存結構
順序儲存的定義 線性表的順序儲存結構,指的是用一段地址連續的儲存單元一次儲存線性表中的資料元素。 順序儲存結構的元素插入操作 -判斷目標位置是否合法 -將目標位置之後的所有元素後移一個位置 -將新元素插入目標位置 -線性長度加1 順序儲存結構的元素插入示例 bool
資料結構 筆記:線性表的本質和操作
線性表(List)的表現形式 -零個或多個數據元素組成的集合 -資料元素在位置上是有序排列的 -資料元素的個數是有限的 -資料元素的型別必須相同 線性表(List)的抽象定義 線性表是具有相同型別的n( >= 0)個數據元素的有限序列 線性表(List)的性質
資料結構 筆記:單鏈表的具體實現
LinkList設計要點 -類模板,通過頭結點訪問後繼結點 -定義內部結點型別Node,用於描述資料域和指標域 -實現線性表的關鍵操作(增,刪,查,等) template<typename T> class LinkList : public List<T>
資料結構 筆記:線性表的鏈式儲存結構
鏈式儲存的定義 為了表示每個資料元素與其直接後繼元素之間的邏輯關係;資料元素出了儲存本身的資訊外,還需要儲存直接後繼的資訊。 ps:在邏輯上,元素之間是相鄰的;在實體記憶體中元素之間並無相鄰關係。 鏈式儲存邏輯結構 -基礎鏈式儲存結構的線性表中,每個節點都包含資料域和指標域 ·資
資料結構 筆記:陣列類的建立
需求分析 -建立陣列類代替原生陣列的使用 ·陣列類包含長度資訊 ·陣列類能夠主動發現越界訪問 Array設計要點 -抽象類模板,儲存空間的位置和大小由子類完成 -過載陣列操作符,判斷訪問下標是否合法 -提供陣列長度的抽象訪問函式 -提供陣列物件間的複製操作 Arr
資料結構 筆記:順序儲存結構的抽象實現
SeqList設計要點 -抽象類模板,儲存空間的位置和大小由子類完成 -實現順序儲存結構線性表的關鍵操作(增,刪,查,等) -提供陣列操作符,方便快速獲取元素 template <typename T> class SeqList : public List<T&g
資料結構 筆記:靜態單鏈表的實現
單鏈表的一個缺陷 -觸發條件 ·長時間使用單鏈表物件頻繁增加和刪除資料元素 -可能的結果 ·堆空間產生大量的記憶體碎片,導致系統執行緩慢 新的線性表 設計思路: 在單鏈表的內部增加一片預留的空間,所有Node物件都在這片空間中動態建立和動態銷燬。 靜態單鏈表的實
資料結構 筆記:單鏈表的遍歷與優化
如何遍歷單鏈表中的每一個數據元素? 為單鏈表提供新的方法,線上性時間內完成遍歷 設計思路(遊標) -在單鏈表的內部定義一個遊標(Node* m_current) -遍歷開始前將遊標指向位置為0的資料元素 -獲取遊標指向的資料元素 -通過結點中的next指標移動遊標 提供一
資料結構 筆記:順序表和單鏈表的對比分析
如何判斷某個資料元素是否存在於線性表中? find -可以為線性表(List)增加一個查詢操作 -int find(const T& e)const; ·引數: ~待查詢的資料元素 ·返回值: ~>= 0:資料元素線上性表中第一次出現的位置 ~-1:資料
資料結構 筆記:迴圈連結串列的實現
什麼事迴圈連結串列? -概念上 ·任意資料元素都有一個前驅和一個後繼 ·所有的資料元素的關係構成一個邏輯上的環 -實現上 ·迴圈連結串列是一種特殊的單鏈表 ·尾結點的指標域儲存了首結點的地址 迴圈連結串列的實現思路 -通過模板定義CircleList類,繼承自L
資料結構 筆記:樹的定義與操作
樹是一種非線性的資料結構 樹是由n(n>=0)個結點組成的有限集合 -如果 n = 0,成為空樹; -如果n > 0,則: ·有一個特定的稱之為根(root)的結點 ·根據點只有直接後繼,但沒有直接前驅 ·除根以外的其他結點劃分為m(m>=0)個互補相交的有
設任意n個整數存放於陣列A[1..n]中,試編寫演算法,將所有正數排在所有負數前面(要求:演算法時間複雜度為O(n))。
注意陣列的實際長度 #include <iostream> using namespace std; void sort(int A[],int n) { int i=0;//陣列的頭下標 int j,x; j=n-1;//陣列的尾下標 while