資料結構 筆記:演算法效率的度量
演算法的空間複雜度(space Complexity)
-定義:S(n) = S(f(n))
·n為演算法的問題規模
·f(n)為空間使用函式,與n相關
推導時間複雜度的方法同樣適用於空間複雜度
空間與時間的策略
-多數情況下,演算法的時間複雜度更令人關注
-如果有必要,可以通過增加額外空間降低時間複雜度
-同理,也可以通過增加演算法的耗時降低空間複雜度
總結:
-一般而言,工程中使用的演算法,時間複雜度不超過O(n^3)
-演算法分析與設計時,重點考慮最壞情況下的時間複雜度
-資料結構課程中重點關注演算法的時間複雜度
-大O表示同樣適用於演算法的空間複雜度
-空間換時間是工程開發中常用的策略
相關推薦
資料結構 筆記:演算法效率的度量
演算法的空間複雜度(space Complexity) -定義:S(n) = S(f(n)) ·n為演算法的問題規模 ·f(n)為空間使用函式,與n相關 推導時間複雜度的方法同樣適用於空間複雜度 空間與時間的策略 -多數情況下,演算法的時間複雜度更令人關注 -如果有必要,
資料結構 筆記:演算法的事件複雜度
判斷一個演算法的效率時,運算元量中的常數項和其他次要項常常可以忽略,只需要關注最高階項就能得出結論 演算法的複雜度 -時間複雜度 ·演算法執行後對時間需求量的定性描述 -空間複雜度 ·演算法執行後對空間需求量的定性描述 大O表示法 -演算法效率嚴重依賴於操作(Operat
資料結構 筆記:程式演算法的選擇
如果兩個演算法都滿足功能性需求,那工程中最關心的其他特性是什麼?如何比較評判呢? 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)個互補相交的有
資料結構 筆記:二叉樹的儲存結構設計
設計要點 -BTree為二叉樹結構,每個結點最多隻有兩個後繼結點 -BTreeNode只包含4個固定的共有成員(哪4個?) -實現樹結構的所有操作(增,刪,查,等) BTreeNode的設計與實現 template <typename T> class BTreeNo
資料結構 筆記:二叉樹的深層特性
性質1 -在二叉樹的第i層最多有個2^(i-1)個結點。(i>=1) 性質2 高度為k的二叉樹最多有2^k-1個結點。(k>=0) 性質3 對任何一棵二叉樹,如果其葉節點有N0個,度為2的非葉節點有n2個,則有n0 = n2 + 1. 性質4 具有n個結點的完