算法導論

 

 

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子集和問題

相關文章
相關標籤/搜索