原创 遞歸面試題

最近離職找工作,遇到許多面試題會考算法,決定先不找工作,看看面試題,前天面試一家公司做的筆試題特別愛考遞歸題目。許久沒碰過這些東西了都忘了,刷一刷。 一、超級樓梯 有一個m階的樓梯,上樓每次只能跨1步或者2步,問:爬上樓

原创 插入排序-《算法導論》學習筆記一

算法導論第二章的第一小節是插入排序,也就是像打撲克牌整理撲克一樣,從左邊第二張開始,每張與前邊排好序的撲克牌比較,比較到能插入的位置就插入,算法比較簡單。 #include <stdio.h> #include <unistd.h

原创 分治之最大子數組-《算法導論》學習筆記四

《算法導論》第4章4.1使用分治策略求最大子數組(數組包含負數,不然整個數組即使最大子數組,求解沒意義)。 思路:數組頭爲low,尾爲high,mid=(low+high)/2,這樣將數組分爲了兩段。首先肯定存在這個最大子數組。那

原创 堆排序-《算法導論》學習筆記六

堆排序就是將一組數按二叉樹層序遍歷的存儲順序,經過一系列比較轉移,最終變成有序的數組,這裏的二叉樹堆一定是完全二叉樹。堆排序能進行的基礎是有個最大堆的數組,最大堆性質是指樹上的每個節點的子節點都比自己小或等於。 因此最頂上的根節

原创 n階矩陣一般乘法-《算法導論》學習筆記五

A、B兩個矩陣均是nxn的矩陣,則兩個矩陣的乘法: 一般的矩陣乘法代碼: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd

原创 erlang的終端帶顏色輸出與中文字符串輸出

一、帶顏色輸出 erlang終端支持帶顏色輸出,例如lager日誌庫就可以。其實就是在輸出前設置一下輸出屬性,正常的字體是:”\e[0;38m” 下面自己弄了一些宏: -define(CONSOLE_COLOR_RED,

原创 編譯60個小程序之makefile

公司有個任務需要編譯60個c語言小程序,工程目錄結構爲: src:放所有小程序源文件.c drv:所有小程序編譯後都爲對應.drv 其它頭文件、庫目錄省略。 makefile不太熟,也很菜,我第一想法

原创 Linux daemon守護進程的創建

今天在看《UNIX網絡編程》的時候,看到了守護進程的創建,代碼中fork了兩次,並且第一次fork後對子進程調用setsid(),有些懵。當時搜了下setsid也是看得有點雲裏霧裏。後來折騰了一下午,纔算有點明白,這裏把自己的一點

原创 圖的簡單表示-算法學習筆記十七

基於鄰接矩陣和鄰接鏈表的圖表示法,以及各自的深度優先遍歷和廣度優先遍歷,但圖的表示中沒有加帶權的邊,只是簡單寫一寫,學習一下,底層鏈表和隊列用了通用鏈表 #include <stdio.h> #include <stdlib.h

原创 查找數組第i小的數-《算法導論》學習筆記十

查找第i小的數利用了快速排序的一點思想,即以數組某個值作爲比較值,然後遍歷數組中除這個數以外的數,小於它的就放左邊,大於它的放右邊,然後作爲比較值的數放中間,並返回比較值的下標,如果下標等於i,表示就找到了,如果下標大於i,又再次

原创 外排序多路歸併+敗者樹-算法學習筆記十五

問題:一個文件有大量的數,現要對文件排序,但內存無法一次讀取完全,而磁盤空間足夠,要如何排序。 學習了幾篇博客: 1. july大神的海量數據排序(他的其他博客都很值得看) 2. 對july大神的算法進行改進不用選擇法而是

原创 erlang:now()與os:timestamp()-Erlang源碼學習一

erlang中,關於erlang:now()與os:timestamp()兩個接口,查看官方文檔的解釋: erlang:now/0 os:timestamp/0 按官方文檔上說erlang:now/0是廢棄了的,

原创 【從零開始構建erlang服務器】-03用戶層和日誌

一、簡介 上一篇講了創建服務器項目以及添加ranch網絡庫,本篇利用網絡庫創建client socket消息處理的用戶層代碼以及服務器開發調試運維的日

原创 Erlang詞法分析器、語法分析器(lexer-leex,yac-yecc)

一、簡介一門編程語言的編譯器或者解釋器通常功能分解爲兩步: 1、讀取源碼文件然後分析它的結構 2、處理這些結構,例如生成目標程序lexer和yacc就是能完成第一步以便生成程序段的工具。而第一步的任務又能分爲兩個子任務: 1、分割源碼文件

原创 C時間輪

看完了《linux高性能服務器編程》對裏面的定時器很感興趣。書中提到三種定時器,分別是:基於升序鏈表的定時器,基於時間輪的定時器,基於時間堆的定時器。三種定時器的實現書中均是給了C++代碼,不過我對C++不太感興趣,雖然現在在做C