1.演算法:是一系列解決問題的明確指令,也就是說對於符合一定規範的輸入,能夠在有限的時間內獲得要求的輸出
2.演算法要點:
(1)演算法的每個步驟都必須沒有歧義,不能有半點含糊
(2)必須認真確定演算法所處理的輸入的值域
(3)同一演算法可以用幾種不同的形式來描述
(4)同一問題,可能存在幾種不同的演算法
(5)針對同一問題的演算法可能基於完全不同的解題思路,而且解題速度會有明顯的不同。
1.演算法是問題的程式化解決方案
2.理解問題
3.了解計算裝置的效能、
(1)隨機訪問(ram):主要假設是:指令逐條執行,每次執行一步操作。設計在這種機器上執行的演算法稱為順序演算法。
(2)並行演算法:同一時間執行多條操作,稱之為並行運算
4.在精確解法和近似解法之間做出選擇
(1)演算法設計技術:用演算法解題的一般性方法,用於解決不同計算領域的多種問題
5.確定適當的資料結構.
6演算法的描述
7.演算法的正確性證明
8.演算法的分析:時間效率;空間效率
1.排序
(1)鍵:
(2)排序演算法兩個特性:
穩定:如果排序演算法保留了等值元素在輸入中的相對順序,那麼可以說它是穩定的。乙個穩定演算法輸出的列表將會把成績相同的學碩仍然按照字母的順序排序。將隔很遠位置的鍵交換位置的演算法雖然不穩定,但是速度往往很快。
演算法需要的額外儲存空間。在位的:乙個演算法不需要額外的儲存 空間。
2.查詢:在給定的集合彙總找乙個給定的值(鍵查詢)
(1)查詢演算法沒有穩定性問題。
3.字串處理
(1)字串匹配
4.圖問題
(1)圖是由一些頂點構成的集合。其中某些頂點由邊相連。
(2)基本圖演算法:圖的遍歷演算法;最短路徑演算法;有向圖的拓撲排序
(3)旅行商問題(tsp):找出訪問n個城市的最短路徑,並且保證每個城市只訪問一次
5.組合問題
6幾何問題
(1)最近對問題:求的是給定平面中的n個點,找出距離最近的兩個點
(2)凸包問題:要求找出乙個能把給定集合中所有點都包含在裡面的最小凸多邊形
7.數值問題
1.線性資料結構:
(1)兩種基本的資料結構:
陣列:n個相同的資料型別的元素構成的序列,連續儲存在計算機的儲存器中,通過下標訪問這些元素
陣列可以實現多種其他的資料結構,如字串
陣列查詢效率高,插入刪除效率低
單鏈表中,除了尾節點,每個節點都包含指向下乙個元素的指標
優點:鍊錶不需要事先分配任何儲存空間,插入和刪除效率高,查詢效率低
陣列和鍊錶都屬於列表這種更抽象的資料結構,
(2)棧:插入和刪除都在棧頂進行的列表
運轉方式:後進先出(lifo)
(3)佇列:
出隊:只在隊頭刪除元素
入隊:只在隊尾插入元素
執行方式:先進先出(fifo)
2.圖(1)定義:g=由兩個集合來定義,乙個有限集合v,元素稱為頂點;另外乙個有限集合e,元素是一對頂點,稱之為邊
(2)無向邊:頂點之間沒有順序
(3)無向圖:圖g中的所有邊都是無向的。
(4)有向圖:如果每一條邊都是有向的,則圖本身就是有向的,稱之為有向圖
(5)頂點(u,v),u稱為尾,v稱為頭
(6)圖的表示:鄰接矩陣或者鄰接表
(7)圖是稀疏的用鄰接表來儲存,圖是稠密的用鄰接矩陣來儲存。
(8)加權圖:權重矩陣(成本矩陣)
(9)連通性和無環性。
(10)簡單路徑:一條路徑上所有的頂點都是互不相同的,路徑長度就是講路徑代表的頂點序列中的頂點數目減1,恰好與路徑所包含的邊的數目是一致的。
(12)連通:圖中的每一對頂點u和v都有一條從u到v的路徑
3.樹(1)自由樹:連通無迴路圖,如下圖所示:
(2)森林:無迴路圖但不一定連通的圖,每乙個分量都死一棵樹
(3)樹的特性:樹的邊數總比定點數少一
|e| = |v| - 1
(4)有根樹特性:樹的任意連個頂點之間總是恰好存在一條從乙個頂點到另乙個頂點的簡單路徑。
(5)狀態空間樹:回溯和分支界限
(6)樹的高度:從根到葉節點的最長簡單路徑的長度
(7)二叉樹:定義為有序樹,其所有頂點的子女個數都不超過兩個。二叉樹是乙個遞迴的定義。
(8)二叉查詢樹:父母頂點的數字比左子樹中的數字大,比右子樹中的數字小
(9)對於高度為h,具有n個頂點的二叉樹有下面的不等式
4.集合與字典
(1)集合:互不相同項的無序不重複組合;項被稱為元素;
(2)集合與列表的兩個主要差別:集合不能包含相同的元素,但是列表可以;結合元素是無序組合,改變集合元素的順序並不會改變集合。
(3)字典:從結合中查詢乙個給定的元素,增加乙個新元素和刪除乙個元素。
演算法設計與分析基礎 讀書筆記2 蠻力法
蠻力法 蠻力法是一種簡單直接地解決問題的方法,常常直接基於問題的描述和所設計的概念定義。1.選擇排序和氣泡排序 selectionsort a 0 n 1 c n n n 1 2 演算法效率為平方級別,但是鍵的交換次數僅為 n 1次。bubblesort a 0 n 1 最壞情況是鍵的交換次數和比較...
《需求分析與系統設計》讀書筆記1
這個月開始對 需求分析與系統設計 的閱讀,在讀這本書之前我先看了看網上對這本書的書評,了解到這本書論述了需求分析和系統設計的迭代增量式過程,並討論了軟體生命週期的其他階段 包括實現 測試和變化管理 本書提出了運用uml 統一建模語言 進行資訊系統分析和設計的方法,以克服大型系統模型的複雜性 改進軟體...
演算法設計與分析 作業13 讀書筆記
啊哈!演算法 讀書筆記 啊哈!演算法 這本書中的演算法舉例貼近生活,語言詼諧幽默,不會讓人產生枯燥感,並配有很多幽默的插圖。演算法講解通俗易懂,並配有詳細c語言 和注釋,是一本適合初學者學習以及借鑑的演算法書籍。由於時間有限,我簡單花了一些時間閱讀了其中的排序板塊,各種排序演算法層出不窮,一直都是困...