原创 數據結構之kmp算法

Knuth-Morris-Pratt 字符串查找算法,簡稱爲 “KMP算法”,常用於在一個文本串S內查找一個模式串P 的出現位置,這個算法由Donald Knuth、Vaughan Pratt、James H. Morris三人於1977年

原创 數據結構之圖

1.爲什麼要有圖 1)前面我們學了線性表和樹 2)線性表侷限於一個直接前驅和一個直接後繼的關係 3)樹也只能有一個直接前驅也就是父節點 4)當我們需要表示多對多的關係時, 這裏我們就用到了圖 圖是一種數據結構,其中結點可以具有零個或多個相

原创 數據結構之二叉樹與B樹

二叉樹與B樹 1.1二叉樹的操作效率較高,但是也存在問題, 請看下面的二叉樹 二叉樹需要加載到內存的,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多(比如1億), 就存在如下問題: 問題1:在構建二叉樹時,需要多次進行i/o

原创 數據結構之

1.基本介紹 1)平衡二叉樹也叫平衡二叉搜索樹(Self-balancing binary search tree)又被稱爲AVL樹, 可以保證查詢效率較高。 2)具有以下特點:它是一 棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且

原创 數據結構之二叉排序樹

二叉排序數 1.二叉排序樹介紹 二叉排序樹:BST: (Binary Sort(Search) Tree), 對於二叉排序樹的任何一個非葉子節點,要求左子節點的值比當前節點的值小,右子節點的值比當前節點的值大。 特別說明:如果有相同的值,可

原创 數據結構之哈夫曼樹

哈夫曼樹 1.1基本介紹 給定n個權值作爲n個葉子結點,構造一棵二叉樹,若該樹的帶權路徑長度(wpl)達到最小,稱這樣的二叉樹爲最優二叉樹,也稱爲哈夫曼樹(Huffman Tree), 還有的書翻譯爲霍夫曼樹。 赫夫曼樹是帶權路徑長度最短

原创 數據結構之堆排序

1.堆排序基本介紹 堆排序是利用堆這種數據結構而設計的一種排序算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均爲O(nlogn),它也是不穩定排序。 堆是具有以下性質的完全二叉樹:每個結點的值都大於或等於其左右孩子結點的值,稱

原创 數據結構之線索二叉樹

1.順序存儲二叉樹的概念 基本說明 從數據存儲來看,數組存儲方式和樹 的存儲方式可以相互轉換,即數組可 以轉換成樹,樹也可以轉換成數組, 看右面的示意圖。 要求: 右圖的二叉樹的結點,要求以數組�的方式來存放 arr : [1, 2

原创 數據結構之二叉樹

二叉樹 1.爲什麼需要樹這種數據結構 數組存儲方式的分析�優點:通過下標方式訪問元素,速度快。對於有序數組,還可使用二分查找提高檢索速度。�缺點:如果要檢索具體某個值,或者插入值(按一定順序)會整體移動,效率較低 鏈式存儲方式的分析�優點

原创 哈希算法

1.哈希表介紹 散列表(Hash table,也叫哈希表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這個映射函數叫做散列函數,存放記錄的數組叫做

原创 查找算法

查找算法 在java中,我們常用的查找有四種: 1) 順序(線性)查找 2) 二分查找/折半查找 3) 插值查找 4) 斐波那契查找 1順序查找 package cn.smallmartial.search; /** * @Autho

原创 數據結構之基數排序

1.基數排序(桶排序)介紹 基數排序(radix sort)屬於“分配式排序”(distribution sort),又稱“桶子法”(bucket sort)-或bin sort,顧名思義,它是通過鍵值的各個位的值,將要排序的元素分配至某

原创 數據結構插入排序與希爾排序

1.插入排序 插入式排序屬於內部排序法,是對於欲排序的元素以插入的方式找尋該元素的適當位置,以達到排序的目的。 1.2.插入排序法思想 插入排序(Insertion Sorting)的基本思想是:把n個待排序的元素看成爲一個有序表和一個無序

原创 數據結構快速排序與歸併排序

1.快速排序 1.1快速排序法介紹 快速排序(Quicksort)是對冒泡排序的一種改進。基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此 方法對這兩部分數據分別進

原创 數據結構之冒泡排序

1.基本介紹 冒泡排序(Bubble Sorting)的基本思想是:通過對待排序序列從前向後(從下標較小的元素開始),依次比較相鄰元素的值,若發現逆序則交換,使值較大的元素逐漸從前移向後部,就象水底下的氣泡一樣逐漸向上冒。 因爲排序的過