原创 查找算法 | B+樹詳細分析

在閱讀本篇博客前請先閱讀《數據結構和算法 | B-樹詳細分析》 B+樹是由B樹變來的,B+樹和B樹有這樣的區別: B+樹的非葉子節點不記錄數據本身,只記錄引用的連接,並且結點中僅含有其子樹中的最大(或最小)關鍵字。基於此特點

原创 圖 | 存儲結構:鄰接表、鄰接多重表、十字鏈表及C語言實現

上一節介紹瞭如何使用順序存儲結構存儲圖,而在實際應用中最常用的是本節所介紹的鏈式存儲結構:圖中每個頂點作爲鏈表中的結點,結點的構成分爲數據域和指針域,數據域存儲圖中各頂點中存儲的數據,而指針域負責表示頂點之間的關聯。 使用鏈式

原创 排序算法 | 桶排序算法原理及實現和優化

排序充斥着我們的生活,比如站隊、排隊買票、考試排名、公司業績排名、將電子郵件按時間排序、QQ 好友列表中的會員紅名靠前,等等。 這裏先舉個例子,通過這個例子讓我們接觸第 1 個算法。 在某個期末考試中,老師要把大家的分數排序,比如

原创 查找算法 | 靜態樹表(次優查找樹)詳細分析

前面章節所介紹的有關在靜態查找表中對特定關鍵字進行順序查找、折半查找或者分塊查找,都是在查找表中各關鍵字被查找概率相同的前提下進行的。 例如查找表中有 n 個關鍵字,表中每個關鍵字被查找的概率都是 1/n。在等概率的情況,使用折

原创 查找算法 | 紅黑樹詳細分析

1 紅黑樹簡介 紅黑樹是一種自平衡的二叉查找樹,是一種高效的查找樹。它是由 Rudolf Bayer 於1978年發明,在當時被稱爲對稱二叉 B 樹(symmetric binary B-trees)。後來,在1978年被 Le

原创 排序算法 | 快速排序算法原理及實現和優化(一)

快速排序是對冒泡排序的一種改進,由 C.A.R.Hoare(Charles Antony Richard Hoare,東尼·霍爾)在 1962 年提出。 快速排序的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部

原创 排序算法 | 快速排序算法原理及實現和優化(二)

接上文《數據結構和算法 | 快速排序算法原理及實現和優化(一)》,我們來講講快速排序的五種優化方案。 1、優化選取基準點 三數取中法:先找出三個關鍵字,然後排序,取中間的關鍵字(至少不會是兩個極端)。在代碼示例中我們選取相應區間

原创 查找算法 | 鍵樹詳細分析

鍵樹,又稱數字查找樹(Digital Search Trees),是一棵度>=2的樹,它的某個節點不是包含一個或多個關鍵字,而是隻包含組成關鍵字的一部分(字符或數字)。 如果關鍵字本身是字符串,則鍵樹中的一個結點只包含有一個字符

原创 排序算法 | 基數排序算法原理及實現和優化

基數排序不同於之前所介紹的各類排序,前邊介紹到的排序方法或多或少的是通過使用比較和移動記錄來實現排序,而基數排序的實現不需要進行對關鍵字的比較,只需要對關鍵字進行“分配”與“收集”兩種操作即可完成。 基數排序的原理 例如對無序表

原创 查找算法 | 平衡二叉樹(AVL樹)詳細分析

AVL:完全平衡的二叉查找樹 二叉查找樹可以表示動態的數據集合,對於給定的數據集合,在建立一顆二叉查找樹時,二叉查找樹的結構形態與關鍵字的插入順序有關。如果全部或者部分地按照關鍵字的遞增或者遞減順序插入二叉查找樹的結點,則所建立

原创 排序算法 | 歸併排序算法原理及實現和優化

歸併排序(MERGE-SORT)是建立在歸併操作上的一種有效的排序算法,該算法是採用分治法(Divide and Conquer)的一個非常典型的應用。將已有序的子序列合併,得到完全有序的序列;即先使每個子序列有序,再使子序列段間

原创 圖 | 存儲結構:鄰接矩陣及C語言實現

使用圖結構表示的數據元素之間雖然具有“多對多”的關係,但是同樣可以採用順序存儲,也就是使用數組有效地存儲圖。 鄰接矩陣 鄰接矩陣(Adjacency Matrix),又稱 數組表示法,存儲方式是用兩個數組來表示圖: 一個一

原创 Spring Cloud 探索 | 整體架構介紹

認識微服務1 何爲微服務?簡而言之,微服務架構風格這種開發方法,是以開發一組小型服務的方式來開發一個獨立的應用系統的。其中每個小型服務都運行在自己的進程中,並經常採用RESTful API這樣輕量的機制來相互通信。這些服務圍繞業

原创 圖 | 兩種遍歷方式:深度優先搜索(DFS、深搜)和廣度優先搜索(BFS、廣搜)

前邊介紹了有關圖的 4 種存儲方式,本節介紹如何對存儲的圖中的頂點進行遍歷。常用的遍歷方式有兩種:深度優先搜索和廣度優先搜索。 深度優先搜索(簡稱“深搜”或DFS) 圖 1 無向圖 深度優先搜索的過程類似於樹的先序遍歷,