原创 算法:Dijkstra算法

算法概要: 解決(不含負權邊的加權有向圖的)單點最短路徑問題。計算的結果是一棵最短路徑樹(SPT,最短路徑樹)。主要特點是以起始點爲中心向外層層擴展,直到擴展到終點爲止。 維基百科的描述: 這個算法是通過爲每個頂點 v 保留目

原创 Python: 利用163郵箱遠程關電腦小腳本

學了一個禮拜Python之後寫的,代碼很粗糙,只是爲了完成功能。直接把代碼發上來吧。要執行的話得先安裝一些模塊,看import語句。 十月初寫的,寫完這個之後就沒怎麼寫python了,忘得厲害。 本來想從mail.163.com

原创 數據結構: 二叉查找樹(BST)

二叉查找樹是一種很有意思的數據結構, 比根節點小的元素將被存儲在左子樹中,比根節點大的元素被存儲在右子樹中。這就保證了中序遍歷該二叉查找樹時必然是升序排序的。 平均情況下: 二分查找的時間複雜度爲O(logN)

原创 正則表達式引擎實現體會

學編譯原理的詞法分析部分,看到了正則表達式,於是就動手自己實現了一番。 代碼:https://github.com/earayu/Regex.git 正則表達式的解析: 正則表達式->NFA->DFA->模擬DFA運行

原创 簡單的shell scripts例子

看了幾天的linux,剛開始接觸shell腳本的編程。對着書上的課後題,寫了幾個非常簡單的shell腳本,發到博客上來供自己複習思考一下,如有錯誤,還望指正。 編寫shell腳本可以用任意文本編輯器,後綴爲sh。編寫完後並沒有執行的權限

原创 數據結構: Java中ArrayList的簡單實現

上學期的數據結構這門課學到了圖。用C語言把書上介紹的內容都實現了一遍,但感覺學校教的都太基礎了。 這個學期準備先重溫一下,然後再深入一點學習算法和數據結構。 語言使用Java, 目前買了3本書《Algorithms (4th e

原创 算法: 有向無環圖(DAG)的拓撲排序

更新: 拓撲排序有2中方法(最後結果可能不同,因爲拓撲排序有多解)。 一個簡單的求拓撲排序的算法是先找出任意一個沒有入邊的頂點,然後將它和它的邊從圖中刪除。然後對剩餘部分使用同樣的操作。 public ArrayLis

原创 數據結構: Java中LinkedList的簡單實現

更新:以下代碼是初學鏈表後的簡單實現,時隔一年再看一下代碼。覺得有點慘不忍睹,測試了一下,標準庫的鏈表插入1000萬個元素用了10秒鐘,以下代碼花費的時間遠超標準庫。因爲如果要將元素插入到鏈表末尾,都需要遍歷整個鏈表。是個O(N)

原创 數據結構: 無向圖和有向圖的API

無向圖 無向圖的邊沒有方向,這意味着一條邊兩邊的頂點是平等的。 可以有多種方式表示無向圖:鄰接矩陣、邊的數組、鄰接表數組。 鄰接矩陣需要的空間爲V^2,對於稀疏圖(大部分情況下都是)太浪費了。 邊的數組使用起來十分不方便,不能快

原创 數據結構: AVL樹

二叉查找樹的主要缺點: 很多時候輸入得序列都是有序或基本有序的,二叉查找樹(BST)在最壞的情況下會退化成鏈表。樹的高度會變成N, 而BST的性能又依賴於樹的高度。插入、刪除、查找等操作的時間複雜度都變成了O(N)。所以

原创 算法: 無向圖的深度優先搜索(dfs)和廣度優先搜索(bfs)

更新:DFS和BFS是應用廣泛而實現簡便的算法,但有2個小點需要稍稍注意一下。 對於DFS來說,可以用遞歸,也可以用迭代。對於一張較大的圖,迭代是優於遞歸的,因爲遞歸要維護一個函數調用棧。小心stackoverflow喔。 對

原创 數據結構:紅黑樹java實現

package trees; import list.MyQueue; /** * Left-Leaning Red Black Binary Search Tree * 左傾紅黑二叉查找樹 * @author earayu

原创 MySQL 大表的count()優化

以下是基於我結合B+樹的數據結構和對實驗結果的推測作出的判斷,如有錯誤,懇請指正! 今天實驗了一下MySQL的count()操作優化, 以下討論基於mysql5.7 InnoDB存儲引擎. x86 windows操作系統。 創建的表的結構

原创 蠻力算法: 選擇排序 冒泡排序(詳解)

蠻力法: 蠻力法(brute force)是一種簡單直接地解決問題的方法,常常直接基於問題的描述和所涉及的概念定義。 雖然巧妙而高效的算法很少來自於蠻力法,但它還是具有重要地位。因爲它能解決幾乎任何問題,如果要解決的問題的規模不大,或者

原创 epoll小例

引言:## 標題 ## UNP的第6章講解IO複用的時候詳解了兩個函數:select和poll。我們可以用這兩個接口以單線程的方式處理多個客戶請求。但是,它們都有着自己的缺點。 select最多支持的描述符爲1024(除非你重新編譯內