原创 約瑟夫問題的數學解法

在原帖上加了一些內容,便於理解.     無 論是用鏈表實現還是用數組實現都有一個共同點:要模擬整個遊戲過程,不僅程序寫起來比較煩,而且時間複雜度高達O(nm),當n,m非常大(例如上百萬, 上千萬)的時候,幾乎是沒有辦法在短時間內出結

原创 三種最基本的排序 選擇排序 插入排序 冒泡排序

/* * 選擇排序(Selection sort)、插入排序(Insertion sort)與氣泡排序(Bubble sort)這三個排序方式是初學排序所必須知道的三個基本排序方式,它們由於速度不快而不實用(平均與最快的時間複雜度都是O

原创 Binary Indexed Tree

 通常對於求數組的兩個操作:    一、更新某個元素    二、求數組中某個區間的元素的和 對於操作一,在O(1)可完成,對於操作二,在O(n)內可完成,但是如果操作二的次數很多,可能就比較耗時間了,所以這裏對於操作二提供另外一種方法,叫

原创 bit 的 一些有用的操作

ALL_BITS 是所有的位都爲1 A: 1000 0010 B: 1100 1100 1.對A的所有位取反 ALL_BITS ^ A 2.將A的第bit位(最右邊是第0位)設置爲1 A |= 1 << bit    例如bit

原创 後綴樹

  在pongba的討論組上看到一道Amazon的面試題:找出給定字符串裏的最長迴文。例子:輸入XMADAMYX。則輸出MADAM。這道題的流行解法是用後綴樹(Suffix Tree)。這坨數據結構最酷的地方是用它能高效解決一大票複雜的字

原创 非遞歸遍歷二叉樹

 //使用棧模擬二叉樹遍歷(非遞歸) void preOrderNoRecursive(TreeNode* root) { stack<TreeNode*> s; while ((NULL != root) || !s.e