資料結構 筆記:程式演算法的選擇
如果兩個演算法都滿足功能性需求,那工程中最關心的其他特性是什麼?如何比較評判呢?
ps:價效比(效率)是工程中最關注的演算法附加特性!
事後統計法
-比較不同演算法對同一組輸入資料的執行處理時間
-缺陷
·為了獲得不同演算法的執行時間必須編寫相應程式
·執行時間嚴重依賴硬體以及執行時環境因素
·演算法的測試資料的選取相當困難
事前分析估算
-依據統計的方法對演算法效率進行估算
-影響演算法效率的主要因素
·演算法採用的策略和方法
·問題的輸入規模
·編譯器所產生的程式碼
·計算機執行速度
總結:
-演算法的度量事後統計法和事前分析估演算法
-時候統計法不容易準確度量演算法的效率
-事前分析估演算法通過運算元量度量演算法效率
-判斷一個演算法效率只需要關注最高階項就能得出結論
相關推薦
資料結構 筆記:程式演算法的選擇
如果兩個演算法都滿足功能性需求,那工程中最關心的其他特性是什麼?如何比較評判呢? ps:價效比(效率)是工程中最關注的演算法附加特性! 事後統計法 -比較不同演算法對同一組輸入資料的執行處理時間 -缺陷 ·為了獲得不同演算法的執行時間必須編寫相應程式 ·執行時間嚴重依賴硬體以
資料結構 筆記:程式的靈魂
資料結構靜態的描述了資料元素之間的掛你 高效的程式需要在資料結構的基礎上設計和選擇演算法 演算法是特定問題求解步驟的描述 在計算機中表現為指令的有限序列 算是獨立存在的一種解決問題的方法和思想,對於演算法而言,語言並不重要,重要的是思想。 演算法的特性: -輸入:演算法具有0
資料結構 筆記:KMP演算法的應用
成員函式 功能描述 indexOf(s) 查詢子串s在字串中的位置 remove(s) 將字串中的子串s刪除 operator-(s) 定義字串減法
資料結構 筆記:演算法效率的度量
演算法的空間複雜度(space Complexity) -定義:S(n) = S(f(n)) ·n為演算法的問題規模 ·f(n)為空間使用函式,與n相關 推導時間複雜度的方法同樣適用於空間複雜度 空間與時間的策略 -多數情況下,演算法的時間複雜度更令人關注 -如果有必要,
資料結構 筆記:演算法的事件複雜度
判斷一個演算法的效率時,運算元量中的常數項和其他次要項常常可以忽略,只需要關注最高階項就能得出結論 演算法的複雜度 -時間複雜度 ·演算法執行後對時間需求量的定性描述 -空間複雜度 ·演算法執行後對空間需求量的定性描述 大O表示法 -演算法效率嚴重依賴於操作(Operat
資料結構 筆記:選擇排序和插入排序
選擇排序的基本思想 -每次(例如底 i 次,i = 0 ,1,...,n-2)從後面n-i個待排的資料元素中選出關鍵字最小的元素,作為有序元素序列底 i 個元素. template <typename T> static void Select(T array[] , i
資料結構 筆記:KMP子串查詢演算法
發現 -匹配失敗時的右移位數與子串本身相關,與目標串無關 -移動位數=已匹配的字元數-對應的部分匹配值 -任意子串都穿在一個唯一的部位匹配表 字首 -除了最後一個字元以外,一個字串的全部頭部組合 字尾 -出了第一個字元以外,一個字串的全部尾部組合 部分匹配值 -字
給資料結構初學者:跨過演算法和程式之間的鴻溝
【摘要】學習資料結構時,將各種基本操作通過程式實現,可以加深對演算法的理解,也是提高程式設計能力的一種有效手段。針對初學者在搭建演算法和程式之間聯絡困難的問題,本文以線性表部分為例,介紹瞭如何從讀演算法中找出實現程式的線索,圍繞演算法和程式之間的聯絡、抽象的描述和具體的實現之間的關係,引導讀者學到抽象演算法的
資料結構 筆記:資料的藝術
資料的概念 -程式的操作物件,用於描述客觀事物 資料的特點 -可以輸入到計算機 -可以被計算機程式處理 資料中的新概念 -資料元素 ·組成資料的基本單位 -資料項 ·一個數據元素由若干資料項組成 -資料物件 ·性質相同的資料元素的結合 資料結構指資料物
資料結構 筆記:線性表的順序儲存結構
順序儲存的定義 線性表的順序儲存結構,指的是用一段地址連續的儲存單元一次儲存線性表中的資料元素。 順序儲存結構的元素插入操作 -判斷目標位置是否合法 -將目標位置之後的所有元素後移一個位置 -將新元素插入目標位置 -線性長度加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)個互補相交的有