原创 有趣的整數

一、     153 = 1^3 + 5^3 + 3^3     153 = 1! + 2! + 3! + 4! + 5! 二、     145 = 1! + 4! + 5! 三、     666 = 1^3 + 2^3 + 3^3 +

原创 紅黑樹(red black tree)

紅黑樹是滿足下列紅黑條件的二叉查找樹 1 根節點是黑色; 2 葉節點是黑色; 3 從根到任意葉節點有相同數量的黑節點(有相同的黑高度); 4 紅節點的子節點只能是黑節點; 5 節點要麼是紅色,要麼是黑色; 二叉查找樹是一種二叉樹,它至多有

原创 寂寞程序員

感情始終打醬油, 收入還是那麼糗。 看來只好耍單身, 無車無房無女友。 與所有大齡單身程序員共勉。 祝大家節日快樂,早日獲得幸福。

原创 簡單數學程序

在我學習計算數論時寫了3個玩具程序: 第一個是求兩個數的GCD(最大公約數)和LCM(最小公倍數),用的是歐幾里德算法--第一個非平凡算法。 第二個是用了Miller-Ribin強擬素性檢測算法,概率性的檢測一個整數是否是素數。 第三個是

原创 字符串匹配:two-way算法

字符串匹配是一維模式匹配的特例;是查找在字符串text中是否存在字符串pattern的一種操作。 字符串匹配的形式化定義大體如下:     設字符集合A。text和pattern是定義在字符集合A上的兩個字符串;設|text|是text的

原创 內存泄漏檢測

我在Linux編程中通常使用三種方法檢測內存泄漏。 第一種方法是閱讀程序源代碼,打印和查看日誌,觀察分析程序的執行。 第二種方法使用valgrind:     假設名爲mytest的程序可能有內存泄漏的情況。     那麼執行命令:   

原创 makefile

這是我編譯一些C原型程序時用的makefile,這些程序一般用於學習和驗證一些想法 makefile: ===================================================================

原创 快速排序(Quick sort)

在《編程珠璣》中看到作者的的quick sort的速度介於C的qsort和C++的sort之間。 經過3次調優之後始終比C++的sort慢。我在作者的基礎上又進行了若干次調優後, 速度和C++的sort基本持平。 所作的改變是將數組版改成

原创 數字轉換成指定進制的數字字符串

下面的函數將一個long型的整數轉換爲某個指定進制的數字字符串。 正數和0的前面輸出'+'號,負數的前面輸出'-'號。 如果指定8進制字符串則以'0

原创 計算 ip udp tcp 效驗和

下面敘述的是IPv4的 ip udp tcp 效驗和的計算。 ip效驗和計算相對簡單,只需對ip協議頭進行計算; ip協議頭長20字節; udp協議

原创 機器生成中文句子

自然語言處理有兩種基本的方法:基於規則和基於統計。 馬爾可夫統計模型在自然語言處理中被廣泛的應用。馬爾可夫鏈 由俄國數學家馬爾可夫提出,利用條件概率對語言建立數學模型, 最初馬爾可夫用它分析普希金的詩。 我寫了個玩具程序,它將一階馬爾可夫

原创 Linux inotify

inotify 是Linux的file system事件通知系統。 用於監測指定目錄內文件的創建,刪除,修改,訪問等操作。 下面的代碼是我學習過程中的實驗代碼,存在錯誤和不適當的地方。 參考: inotify(7), Linux內核文檔

原创 Linux glob 路徑模式匹配

glob庫函數用於Linux文件系統中路徑名稱的模式匹配, 即查找文件系統中指定模式的路徑。 注意,這不是正則表達式匹配,雖然有些相似,但還是 有點差別。 編譯: gcc -std=c99 -g -W -Wall -Wextra -o m

原创 GNU/Linux 編程中的定時器

GNU/Linux 編程中的定時器 在Linux C/C++編程中GNU C庫提供了多種定時器實現。主要有4種: 1、alarm方式:     sigaction/signal, 和alarm等函數實現; 2、setitimer方式:  

原创 好代碼

有人問達索公司(就是研製陣風戰鬥機的企業)創始人老達索:““什麼飛機是好飛機?”達索回答:"漂亮的飛機就是好飛機”。 當然這裏說的”漂亮”不是普通意義上的漂亮,她是指那些受過嚴格訓練的飛行器設計師眼中的漂亮。 那麼什麼是好代碼? 漂亮的代