原创 神奇算法小集合
整理一些今天看到的比較神奇的算法,可以拓寬下自己的思維和視野。 一、一個Float類型的絕對值 一個數值的絕對值可以通過與符號位的按位與操作來實現,對於IA32 32bit處理器,符號位是0x80000000,對於IA32
原创 隨機從長度未知的數組中抽取數字,且保證每個元素被抽到的概率相同
一、題目簡介 這個題目出自一道面試題,題目描述如下: 有一個函數int getNum(),每運行一次可以從一個數組V[N]裏面取出一個數,N未知,當數取完的時候,函數返回NULL。現在要求寫一個函數int get(),這個函
原创 基數排序簡介及LSD、MSD實現
一、簡介 基數排序(Radix Sort)屬於“分配式排序”(Distribution Sort)。基數排序法是屬於穩定性的排序。設待排序列爲n個記錄,d個關鍵碼,關鍵碼的取值範圍爲Radix,則進行基數排序的時間複雜度爲O(d(
原创 (2)啊哈!算法
一、三個問題 1、給定一個最多包含40億個隨機排列的32位整數的順序文件,找出一個不在文件中的32位整數。分別考慮在有足夠內存或有幾個外部臨時文件可用,但僅有幾百字節的內存的情況下,如果解決問題; 2、將一個n元一維向量向
原创 說說雙調排序
一、簡介 雙調排序(Bitonic Sort)屬於排序網絡(Sorting Network)的一種,它是一種可以並行計算的排序算法。 要理解雙調排序,首先需要理解雙調序列,雙調序列定義如下: 如果序列<a0, a1
原创 (3)數據決定程序結構
一、格式信函編程 編寫一個格式信函發聲器,該發聲器基於格式信函模板。可將數據從控制中分離出來。 二、用於特殊數據的強大工具 在實際應用中,每種工具都是用數據的某一視圖來解決特定但又通用的問題。主要包括超文本、名字-值對、電
原创 (14)堆
一、簡介 堆數據結構的性質:堆:任何結點的值都小於或等於其孩子的值的完全二叉樹爲小根堆,任何結點的值都大於或等於其孩子的值的完全二叉樹爲大根堆。爲了方便使用完全二叉樹的性質,假定數組從下標1開始。這樣: leftChild =
原创 一道有關hash的POJ題目:POJ1200 Crazy Search
一、題目描述 這裏把題目粘過來吧,網頁是在http://poj.org/problem?id=1200,題目描述如下: Description: Many people like to solve hard puz
原创 判斷無向圖和有向圖是否有迴路
一、無向圖迴路的判斷 對於無向圖,判斷其是否有迴路有四種方法,如下所示: 1、利用深度優先搜索DFS,在搜索過程中判斷是否會出現後向邊(DFS中,連接頂點u到它的某一祖先頂點v的邊),即在DFS對頂點進行着色過程中,若出現
原创 Unix編程藝術中的17點編程哲學原則
Unix編程藝術中的17點編程哲學原則 ---設計開發者的至高準則 譯者:July 二零一一年一月十三日。 參考文獻:The Art of Unix Programming By Eric St
原创 (9~10)代碼調優、空間節省
一、代碼調優 1、問題1--整數取模 一種算法是: k = (j + rotdist)%n; 另一種優化方法是: k = j + rotdist; if(k >= n) k -=n; 2、問題
原创 (13)搜索
一、簡介 通過構造可生成一個隨機整數的有序集合(不允許重複)來引出問題的討論。C++相關的代碼使用了set數據結構,具體代碼如下所示: void gensets(int m, int maxval) { int *v =
原创 關於浮點數
一、浮點的精度限制 看了看《深入理解計算機系統》中有關信息存儲的內容,不得不感嘆浮點數的存儲真讓人望而生畏。下面就看看編程中遇到浮點數需要注意的東西吧。 浮點數的存儲格式與整數完全不同。大部分的實現採用的是IEEE 754
原创 (15)字符串
一、統計文本中各字符串出現的個數 利用map容器,代碼實現如下所示: #include <iostream> #include <map> using namespace std; int main() { map <stri
原创 線程和fork
一、簡介 當線程調用fork時,就爲子進程創建了整個進程地址空間的副本,父子進程通過寫時複製技術來共享內存頁的這一副本。 子進程通過幾成整個地址空間的副本,也從父進程那裏繼承了所有互斥量、讀寫鎖和條件變量的狀態。如果父進程