原创 數據結構 |B+樹| 索引

1. B+樹 爲了加速數據庫中數據的查找速度,常用的處理思路是,對錶中數據創建索引。數據庫索引是如何實現的呢?底層使用的是什麼數據結構和算法呢? 數據庫查詢需求:  根據某個值查找數據,比如 select * from user wher

原创 數據結構-05 |散列表-②| 工業級水平的散列表

  1. 散列碰撞攻擊 散列表的查詢效率並不能籠統地說成是 O(1)。它跟散列函數、裝載因子、散列衝突等都有關係。如果散列函數設計得不好,或者裝載因子過高,都可能導致散列衝突發生的概率升高,查詢效率下降。在極端情況下,有些惡意的攻擊者,還有

原创 算法02 | 哈希算法

  2011 年 CSDN 的“脫庫”事件,當時,CSDN 網站被黑客攻擊,超過 600 萬用戶的註冊郵箱和密碼明文被泄露,如果你是 CSDN 的一名工程師,你會如何存儲用戶密碼這麼重要的數據?僅僅 MD5 加密一下存儲就夠了嗎? 要想搞清

原创 算法 09| 多模式匹配算法| AC自動機

     BBS等文本內容網站,大都會有敏感詞過濾功能,用來過濾掉用戶輸入的一些淫穢、反動、謾罵等內容。 實際上,這些功能最基本的原理就是字符串匹配算法,也就是通過維護一個敏感詞的字典,當用戶輸入一段文字內容之後,通過字符串匹配算法,來查找

原创 算法 08| 字符串算法| BM| KMP

  1. BF和 RK算法  2. BM(Boyer-Moore)算法  對於工業級的軟件開發來說,我們希望算法儘可能的高效,並且在極端情況下,性能也不要退化 的太嚴重。那麼,對於查找功能是重要功能的軟件來說,比如一些文本編輯器,它們的查找

原创 算法-00| Cache緩存淘汰算法

Cache緩存   ①.記憶  ②.錢包-儲物櫃  ③.代碼模塊 一個經典的鏈表應用場景,那就是 LRU 緩存淘汰算法。 緩存是一種提高數據讀取性能的技術,在硬件設計、軟件開發中都有着非常廣泛的應用,比如常見的 CPU 緩存、數據庫緩存、瀏

原创 算法 08| 字符串算法

  1. 字符串概念 • Python:   x = ‘abbc’ x = “abbc”• Java:   String x = “abbc”;   Python和Java中的string 都是不可變數據類型, immutable:http

原创 算法-07 | 動態規劃

1. 分治 + 回溯 + 遞歸 + 動態規劃  它的本質即將一個複雜的問題,分解成各種子問題,尋找它的重複性。動態規劃和分治、回溯、遞歸併沒有很大的本質區別,只是小細節上的不同。 遞歸 代碼模板 public void recur

原创 算法-04 | 貪心算法

1. Greedy 貪心算法是一種在每一步選擇中都採取在當前狀態下最好或最優(即最有利)的選擇,從而希望導致結果是全局最好或最優的算法。   2. 貪心算法與回溯和動態規劃 貪心算法與動態規劃的不同點: 貪心算法與動態規劃的不同在於它對每個

原创 算法-05 | 二分查找

1. 概述 二分查找(Binary Search)算法,也叫折半查找算法。 二分查找針對的是一個有序的數據集合,查找思想有點類似分治思想。每次都通過跟區間的中間元素對比,將待查找的區間縮小爲之前的一半,直到找到要查找的元素,或者區間被縮小爲

原创 數據結構-07| 堆

   1. 堆概念 二叉堆的性能有很大的問題,現實中很大高級的堆用的是斐波拉契堆和加的堆。 https://www.cnblogs.com/skywang12345/p/3610187.html#a1 https://en.wikipedi

原创 數據結構-06| 字典樹| 並查集

  字典樹Trie 1. 字典樹的數據結構2. 字典樹的核心思想3. 字典樹的基本性質 1. 樹Tree    按層次打印一顆二叉樹, 在樹中深度優先搜索:ABDH I EJ  CFG 廣度優先搜索:A BC DEFG HIJ 2. 二叉搜

原创 數據結構-05| 布隆過濾器| 緩存機制

  布隆過濾器 Bloom Filter 布隆過濾器和哈希表類似,HashTable + 拉鍊表存儲重複元素: 元素  ---哈希函數---> 映射到一個整數的下標位置index。比如Join Smith和Sandra Dee經過哈希函數都

原创 數據結構-04 | AVL樹| 紅黑樹

  1. 樹Tree     2. 二叉樹 Binary Search 二叉樹遍歷   Pre-order/In-order/Post-order 1. 前序(Pre-order):根-左-右 2. 中序(In-order):左-根-

原创 算法-03 | 深度優先DFS| 廣度優先BFS

  1. 搜索算法 在樹(圖/狀態集)中尋找特定節點 深度優先搜索算法和廣度優先搜索算法都是基於“圖”這種數據結構。 圖上的搜索算法就是,在圖中找出從一個頂點出發,到另一個頂點的路徑。圖上的搜索算法有深度優先、廣度優先搜索算法,和A*A∗、