1.算法在計算中的做用算法
1.1算法數組
算法解決哪些問題網絡
數據結構數據結構
技術,算法設計分析技術多線程
難題,PE徹底問題函數
並行性性能
1.2做爲一種技術的算法測試
效率編碼
算法與其餘技術加密
2.算法基礎
2.1插入排序
代碼
public static void main(String[] args) { int[] array = {5, 2, 4, 6, 1, 3}; for (int j = 1; j < array.length; j++) { int key = array[j];//從第2個元素開始和前一個元素進行比較 int i = j - 1; while (i > -1 && array[i] > key) {//第n個元素和第n-1個元素開始比較,直到第1個元素, array[i + 1] = array[i];//將找到的元素值給第n個元素 i--; } array[i + 1] = key;//將找到的元素賦值爲第n個元素值 } for (int i = 0; i < array.length; i++) { if (i == 0) { System.out.print("[" + array[i]); } else if (i == array.length - 1) { System.out.print("," + array[i] + "]"); } else { System.out.print("," + array[i]); } } }
圖示
初始化:循環第一次迭代前爲真
保持:某次迭代前爲真,下次迭代以前仍爲真
終止:循環終止時,不變式爲咱們提供有用的性質,該性質有助於證實算法是正確的
降序
int[] array = {5, 2, 4, 6, 1, 3}; for (int j = array.length - 2; j > -1; j--) { int key = array[j]; int i = j + 1; while (i < array.length && array[i] > key) { array[i - 1] = array[i]; i++; } array[i - 1] = key; }
2.2分析算法
例如求2的5階乘,能夠二進制進行左移5位
2.3設計算法
2.3.1分治法
分解元問題爲若干子問題
解決這些子問題
合併這些子問題
歸併排序
圖示
2.3.2分析分治算法
3.函數的增加
3.1漸近記號
3.2標準記號與經常使用函數
單調性
向下取整和向上取整
摸運算
多項式
指數
對數
階乘
多重函數
多重對數函數
斐波那契數
4.分治策略
4.1最大子數組問題
4.2矩陣乘法的Strassen算法
4.3用代入法求解遞歸式
4.4用遞歸樹方法求解遞歸式
4.5用主方法求解遞歸式
4.6證實主定理
5.機率分線和隨機算法
5.1僱傭問題
5.2指示器隨機變量
5.3隨機算法
5.4機率分析和指示器隨機變量的進一步使用
6.堆排序
6.1堆
二叉堆
6.2維護堆的性質
6.3建堆
6.4堆排序算法
6.5優先隊列
7.快速排序
7.1快速排序的描述
7.2快速排序的性能
7.3快速排序的隨機化版本
7.4快速排序分析
8.線性時間排序
8.1排序算法的下界
8.2計數排序
8.3基數排序
8.4桶排序
9.中位數和順序統計量
9.1最小值和最大值
9.2指望爲線性時間的選擇算法
9.3最壞狀況爲線性時間的選擇算法
10.基本數據結構
10.1棧和隊列
棧,後入先出
隊列
10.2鏈表
雙向鏈表
鏈表的搜索
鏈表的插入
鏈表的刪除
哨兵,簡化邊界條件的處理
10.3指針和對象的實現
對象的多數組表示
對象的單數組表示
對象的分配與釋放
10.4有根樹的表示
二叉樹
分支無限制的有根樹
11.散列表
11.1直接尋址表
11.2散列表
經過連接法解決衝突
連接法散列的分析
11.3散列函數
11.3.1除法散列法
11.3.2乘法散列
11.3.3全域散列法
11.4開放尋址法
11.5徹底散列
12.二叉搜索樹
12.1什麼是二叉搜索樹
12.2查詢二叉搜索樹
12.3插入和刪除
12.4隨機構建二叉搜索樹
13.紅黑樹
13.1紅黑樹的性質
13.2旋轉
13.3插入
13.4刪除
14.數據結構的擴張
14.1動態順序統計
14.2如何擴張數據結構
14.3區間樹
15.動態規劃
15.1鋼條切割
15.2矩陣鏈乘法
15.3動態規劃原理
15.4最長公有子序列
15.5最優二叉搜索樹
16.貪心算法
16.1活動選擇問題
16.2貪心算法原理
16.3赫夫曼編碼
16.4用擬陣求解任務調度問題
17.攤還分析
17.1聚合分析
17.2覈算法
17.3勢能法
17.4動態表
18.B樹
18.1B樹的定義
18.2B樹的基本操做
18.3從B樹中刪除關鍵字
19.斐波那契堆
19.1斐波那契堆結構
19.2可合併堆操做
19.3最大度數的界
20.van Emde Boas樹
20.1基本方法
20.2遞歸結構
20.3van Emde Boas樹及其操做
21.用於不相交集合的數據結構
21.1不相交集合的操做
21.2不相交集合的鏈表表示
21.3不相交集合森林
21.4帶路徑壓縮的按秩合併的分析
22.基本的圖算法
22.1圖的表示
22.2廣度優先搜索
22.3深度優先搜索
22.4拓撲排序
22.5強連通份量
23.最小生成樹
23.1最小生成樹的造成
23.2Kruskal算法和Prim算法
24.單源最短路徑
24.1BellmanFord算法
24.2有向無環圖中的單源最短路徑問題
24.3Dijkstra算法
24.4差分約束和最短路徑
24.5最短路徑性質的證實
25.全部節點對的最短路徑問題
25.1最短路徑和矩陣乘法
25.2Floyd-Warshall算法
25.3用於稀疏圖的Johson算法
26.最大流
26.1流網絡
26.2Ford-Fulkerson方法
26.3最大二分匹配
26.4推送-重貼標籤算法
26.5前置重貼標籤算法
27.多線程算法
27.1動態多線程基礎
27.2多線程矩陣乘法
27.3多線程歸併排序
28.矩陣運算
28.1求解性方程組
28.2矩陣求逆
28.3對稱正定矩陣和最小二乘逼近
29.線性規劃
29.1標準型和鬆弛型
29.2將問題表達爲線性規劃
29.3單純性算法
29.4對偶性
29.5初始基本可行解
30.多項式與快速傅里葉變換
30.1多項式的表示
30.2DET與FFT
30.3高效FFT實現
31.數論算法
31.1基礎數論概念
31.2最大公約數
31.3摸運算
31.4求解模線性方程
31.5中國餘數定理
31.6元素的冥
31.7RSA公鑰加密系統
31.8素數的測試
31.9整數的因子分解
32.字符串匹配
32.1樸素字符串匹配算法
32.2Rabin-Karp算法
32.3利用有限自動機進行字符串匹配
32.4Knuth-Morris-Pratt
33.計算幾何學
33.1線段的性質
33.2肯定任意一對線段是否相交
32.3尋找凸包
32.4尋找最近點
34.NP徹底性
34.1多項式時間
34.2多項式時間的驗證
34.3NP挖權限與可規約性
34..4NP徹底性的證實
34.5NP徹底問題
35.近似算法
35.1頂點覆蓋問題
35.2旅行商問題
35.3集合覆蓋問題
35.4隨機化和線性規劃
35.5子集和問題