原创 python的科學計算庫:Pandas

在數據分析中,Pandas是非常重要的一個庫,一方面是因爲pandas提供的數據結構DataFrame與json的契合度高,轉化起來很方便,另一面,如果我們日常的數據清理工作不是很複雜,只要幾行Pandas的代碼就可以對數據進行規整。

原创 數據結構與算法系列23--Trie樹

我們在使用搜索引擎進行搜索時,會發現當我們輸入一部分內容後,搜索引擎會彈出很多關鍵詞提示,如果發現有你要查找的內容,你可以直接選中它進行搜索,一定程度上節省了我們的時間。究竟如何實現這種功能呢,它使用的底層數據結構和算法是什麼呢? 沒

原创 數據結構與算法系列22--字符串匹配算法

字符串匹配這樣的函數,在很多編程語言中都提供了字符串的查找算法,那它底層具體是怎麼實現的呢? 字符串的匹配算法有很多,簡單一點的:BF算法和RF算法。高級一點的,BM算法和KMP算法。 BF算法 BF算法全稱是Brute Force,

原创 數據結構與算法系列21--深度和廣度優先搜索

廣度優先搜索和深度優先搜索是圖上的兩種最常用、最基本的搜索算法。 廣度優先搜索 廣度優先搜索(Breadth-First-Search),習慣性簡稱爲BFS。它是一種“地毯式”層層推進的搜索策略,先查找離起始頂點最近的,然後是次近的,

原创 數據結構與算法系列20--圖

圖的概念 在計算機科學中,一個圖就是一些頂點的集合,這些頂點通過一系列邊結對(連接)。樹中的元素我們稱爲節點,圖中的元素我們就叫作頂點(vertex)。圖中的一個頂點可以與任意其他頂點建立連接關係。我們把這種建立的關係叫作邊(edge

原创 數據結構與算法系列19--堆

什麼是堆(Heap) 堆其實就是一種特殊的樹,那它特殊在哪裏呢?只要滿足了以下兩點的,我們就可以稱之爲堆。 1.堆是一個完全二叉樹 2.堆中每一個節點的值都必須大於等於(或者小於等於)其子樹中每個節點的值。 這裏稍作解釋,對於第一點,

原创 數據結構與算法系列18--紅黑樹

紅黑樹是平衡二叉查找樹的一種,上一節我們已經講過二叉查找樹的定義,那什麼是平衡二叉查找樹呢? 什麼是平衡二叉查找樹 定義: 平衡二叉查找樹嚴格的定義是:二叉樹中任意一個節點的左右子樹的高度相差不能大於+1。從這個定義來看,的完全二叉樹

原创 數據結構與算法系列17--二叉樹

什麼是二叉樹? 二叉樹是每個結點最多有兩個子樹的樹結構,它是最常見的一種樹結構。 一些基本概念 根節點:樹的最頂端是節點,如圖中的1節點 父節點:圖中1就是2和3的父節點 子節點:相對的,2和3就是子節點 兄弟節點:在同一父節點下,

原创 數據結構與算法系列16--哈希算法

什麼的哈希算法? 將任意長度的二進制值串映射爲固定長度的二進制值串,這個映射的規則就是哈希算法。而通過原始數據映射後得到的二進制值串就是哈希值。 一個優秀的哈希算法應該滿足哪幾點? 從原始數據計算得到的哈希值,不能反向推導出原始數據

原创 數據結構與算法系列15(下)--散列表(哈希表)

藉助散列表,實現一個高效的LRU緩存淘汰算法 首先,我們先回顧一下只使用鏈表是怎麼實現一個LRU緩存淘汰算法的。 我們需要維護一個按照訪問時間從小到大有序排列的鏈表結構,當我們需要緩存一個數據時,首先我們會在鏈表中查找是否已經存在該數

原创 數據結構與算法系列13--二分查找

什麼是二分查找? 二分查找算法是一種針對有序集合的查找算法,也叫折半查找。 實現原理 每次都通過跟區間的中間元素對比,將待查找的區間縮小爲之前的一半,直到找到要查找的元素,或者區間被縮小爲0。(特別注意前提是針對有序的數據集合) 時間

原创 數據結構與算法系列15(中)--散列表(哈希表)

如何設計一個散列函數? 1.散列函數的設計不能太複雜,否則會消耗很多計算時間,也就影響了散列表的性能。 2.散列函數生成的值要儘可能的隨機並且均勻分佈,這樣才能最小化散列衝突,即便發生衝突,散列到每個槽裏的數據也會比較平均,不會出現某

原创 數據結構與算法系列15(上)--散列表(哈希表)

什麼是散列表 散列表的英文是“Hash Table”,也叫“哈希表”或者“Hash 表”。他是一種根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這

原创 數據結構與算法系列14-跳錶

注:文章出現的log2n中的2表示以2爲底,這裏是爲了方便這樣寫 什麼是跳錶? 爲一個值有序的單鏈表建立多級索引,比如每2個節點提取一個節點到上一級,我們把抽出來的那一級叫做索引或索引層。如下圖所示,其中down表示down指針,指向

原创 數據結構與算法系列12--排序優化

如何選擇合適的排序算法?** 這裏有前面講過的各種算法是時間複雜度的對比圖,大家可以看看下。 如果我們要選擇一個通用的排序算法,前面講到的線性排序算法顯然是不合適的,因爲它的適用場景非常有限,儘管他是速度最快的。 如果對於小規模數據