原创 《算法導論》筆記(7) 區間樹、B樹

動態順序統計。一種是紅黑樹結點儲存附加子樹的元素數size。一種是儲存中序遍歷的秩r。插入、刪除時對附加屬性的維護。相類似的擴展的紅黑樹附加屬性f若僅依賴於x、x.left、x.right,還可能包括x.left.f與x.right.f,

原创 《算法導論》筆記(3) 有關概率論

短篇,關於第5章。概率論的一些習題。 5.1-2,Random(0,1)只返回0和1,這裏有個坑是二項式分佈的問題,直接求和不可取。爲得到random(a,b),應該將random(0,1)重複N次後,按順序放入一個N位2進制數字中,對(

原创 《算法導論》筆記(8) 動態規劃、貪心法、攤還分析 簡述

動態規劃的步驟:構造最優解的結構,子問題求解後保存,計算最優解的值。最優解的結構是張表。動態規劃的關鍵就是:1,構造合適的表;2,找到合適的子問題分解原問題。有兩種方法計算最優解,一是自頂向下遞歸求解,保存已知的子問題的解到數組或散列表,

原创 《算法導論》筆記(16) 單源最短路徑 部分習題

習題21.1-3 Bellman-Ford算法改進爲m+1次鬆弛後終止。圖中結點若在s->v的路徑中則作標記。鬆弛過程中,若有標記的結點全部不更新v值,則停止。此時鬆弛次數爲m+1趟。 習題21.1-5 鬆弛方法改爲結點已有d值,對其所有

原创 《算法導論》筆記(14) 基本的圖算法 部分習題

習題22.1-5 有向圖G(V, E)的平方圖。鏈表表示時,對每結點u的Adj[u]中所有v加入隊列,後邊出隊邊將Adj[v]加入Adj[u]中。矩陣表示時,若w[i, j]、w[j, k]同時爲1則將w[i, k]置1. 習題22.1-

原创 《算法導論》筆記(10)貪心算法 部分習題

習題16.1-4 區間圖着色問題。邊最多的頂點G,其邊數n即需要的顏色數,也即教室數。有n種顏色,頂點標爲第i種顏色,則此活動可放在第i個教室舉行。從一頂點開始廣度優先遍歷,將相連接的點標爲不同顏色,標顏色同時檢查與此相連的所有點顏色不同

原创 《算法導論》筆記(13) 單源最短路徑,所有結點對的最短路徑

  單源最短路徑,單目的地最短路徑,單結點對最短路徑,所有結點對最短路徑。最短路徑的子路徑也是最短路徑。最短路徑不包含環路。鬆弛操作,三角不等式。前驅子圖,最短路徑樹。   Bellman-Ford算法。邊總數-1次循環,每次循環將所有邊

原创 《算法導論》筆記(15) 最小生成樹 部分習題

習題23.1-11 給定圖G和一棵最小生成樹T,假設減少了位於T之外的某條邊的權重。因爲T內的邊,是連接所有結點的權重最小的,那麼首先將T外的減少權重的邊(u, v)加入T,然後在u, v中尋找所有的路徑,去掉路徑中權重最大的邊。 習題2

原创 《算法導論》筆記(9) 動態規劃 部分習題

一些本章的習題的解法簡答及僞碼。 15.1-5 斐波那契數的子問題圖。每個斐波那契數與前兩個斐波那契數有關。所以有N個頂點,2*(N-2)條邊。 15.2-4 矩陣鏈乘法的子問題圖。N個矩陣的子問題是N-1對,所以共有(N-1)*N/2

原创 《算法導論》筆記(4)堆排序與快速排序 含部分習題

堆排序。堆是一個不需要指針的二叉樹,不需要指針是因爲對下標運算得到父、左、右三元素。不用指針的好處是省空間,交換上下元素時運算更簡單,另外便於迅速定位父、子結點,構建時快速遍歷同層結點以及上一層結點。但因爲不用指針,需要隊列(deque或

原创 《算法導論》筆記(12) 基本的圖算法,最小生成樹

  首先是圖的表示。G=(V, E),兩種標準表示方法。一是鄰接鏈表,一是鄰接矩陣。鄰接鏈表有|V|條鏈表,鏈表Adj[u]包含所有與結點u有邊關聯

原创 《算法導論》筆記(1)排序 含部分習題

爲什麼是《算法導論》讀書筆記?因爲這本書是經典中的經典,讀這本書對算法學習幫助非常大,讀書筆記值得寫。而且從這本書的讀書筆記開始寫博客,也是一個比較容易上手的辦法。一爲複習算法,一爲練筆。 開篇講算法的基本概念。從插入和歸併排序舉例說明僞

原创 《算法導論》讀書筆記(2)複雜度、分治策略 部分習題

繼續。 第3章,函數的增長。這章比較簡單。漸進符號,O, Θ, Ω。函數的上下界。 練習3.2-8,k*ln(k)>=C1*n; k*ln(k)<=C2*n; 解不等式,k=Θ(n/lnn)。 思考題3-6,a: n; b: lg*(n)

原创 《算法導論》筆記(6)鏈表到紅黑樹 部分習題

習題10.2-8, 記第i個元素的np爲np1,np2… 則np0xor np1 xor np2 xor np3 ….npi得到npixor np0,np0是表頭的地址。若定義np0爲0x00000000,(np1xor np2 xor

原创 《算法導論》筆記(5)鏈表到紅黑樹

基本數據結構:鏈表,隊列,散列表,二叉樹,紅黑樹。 棧和隊列都是抽象的結構,不一定是物理連續的內存空間。但必須實現push()和pop()的抽象接口。鏈表有單、雙向鏈表和循環鏈表。可按照iterator++或者iterator--的方式訪