Time of Update: 2018-12-03
7-1-1:其中藍圈表示下次排序中的主元,紅框表示這次不用參加排序的元素:7-1-2:返回r;這兒肯定就是對等號做處理,對於對於主元的元素,一個放入左邊,另一個放在右邊,交叉進行;PARTITION(A,p,r) x=A[r] i=p-1 flag=true//對於等於x元素的處理控制, //當為true時,放在左邊,當為false時放在右邊 for j=p to r-1 //此處等號單獨處理 if A[j]==x and flag==true i=i+1
Time of Update: 2018-12-03
(Havel-Hakimi 定理)由非負整數組成的非增序列s:d1, d2, …, dn(n ≥ 2, d1 ≥ 1)是可圖的,若且唯若序列 s1: d2 – 1, d3 – 1, …, dd1+1 – 1, dd1+2, …, dn是可圖的。序列s1 中有n-1 個非負整數,s 序列中d1 後的前d1 個度數(即d2~dd1+1)減1 後構成s1 中的前d1 個數。不可圖的情況:(1)某次對剩下序列排序後,最大的度數(設為d1)超過了剩下的頂點數;(2)
Time of Update: 2018-12-03
DFS是我學習圖論所學到的第二個知識點,思想就是棧的思想。解一道自己做的題:農田灌溉問題:Benny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a lot of samll squares. Water pipes are placed in these squares. Different square has a different type of pipe.
Time of Update: 2018-12-03
上次學習了havel-hakimi定理判斷一個度數序列是否可圖,http://blog.csdn.net/wangyanphp/article/details/8834608(Havel-Hakimi 定理)由非負整數組成的非增序列s:d1, d2, …, dn(n ≥ 2, d1 ≥ 1)是可圖的,若且唯若序列 s1: d2 – 1, d3 – 1, …, dd1+1 – 1, dd1+2, …, dn是可圖的。序列s1 中有n-1 個非負整數,s
Time of Update: 2018-12-03
什麼是比較排序。 在排序的最終結果中,個元素的次序依賴於它們之間的比較,此為比較排序。插入排序,歸併排序,堆排序,快速排序,這些演算法都是屬於比較排序。比較排序的效能是有下界的,我們通過決策樹模型給出:對於n個元素的決策樹,共有n!個葉結點,設決策樹高度為h,具有l個葉結點,那麼有關係式:n!<=l<=2^h
Time of Update: 2018-12-03
Allocate管理的是記憶體配置。這裡主要考慮的是對於小額區塊的記憶體管理,如果小額區塊直接使用new操作符進行分配,第一會造成記憶體的片段;第二配置時會造成額外負擔;所謂額外負擔就是,每次索取一塊記憶體時,都必須向系統分配一塊空間,以記錄記憶體的大小。所以這裡採用兩級配置器:第一級配置器就是當要求的記憶體足夠大時,直接使用malloc和free配置和釋放記憶體;多大是足夠大?STL中定義當要求得記憶體大於128byte時,就是足夠大了。//mymemory.h#ifndef
Time of Update: 2018-12-03
//myiterator#ifndef _MYITERATOR#define _MYITERATOR//迭代器是一種智能指標//首先利用繼承關係定義五種迭代器類型struct input_iterator_tag{};struct out_put_tag{};struct forward_iterator_tag:public input_iterator_tag{};struct bidirectional_iterator_tag:public forward_iterator_tag{};
Time of Update: 2018-12-03
本篇文章主要介紹的是遞迴式的求解方法,strassen演算法理論價值高於實際價值。 求解遞迴式的方法有三種:代入法。猜測解的形式,然後用數學歸納法證明;遞迴樹法,這個方法簡單易用;主方法:對於形如:T(n)=aT(n/b)+f(n) (a>=1 ,b>1) 樸素矩陣乘法偽碼:SQUARE-MATRIX-MULTIPLY(A,B) n=A.rows let C be a new matrix for i=1 to n for j=1 to n
Time of Update: 2018-12-03
想看更多的解題報告: http://blog.csdn.net/wangjian8006/article/details/7870410
Time of Update: 2018-12-03
12-1-2:二叉搜尋樹:left.key<key<eight.key;最小堆:key<left.key,key<right.key;不能,使用堆排序的話,得O(nlgn)12-1-3:這個已經在第十章做過了,使用棧的話,有點浪費,因為使用棧,parent就用不上了;不使用棧的情況,就是使用parent回溯父結點,對於x,我們已經有了尋找x後繼得程式:TERR-SUCCSSOR,我們從最小節點開始調用TREE-SUCCESSOR即可12-1-4:這個也已經做過了,此處不重
Time of Update: 2018-12-03
行百裡者半九十,此言得之。當看完快速排序之後,我瞭解了它的思想,我也會實現它的代碼,可是,這就是我所需要的quicksort演算法嗎?顯然不是。習題7-1-2問道:如果數組中元素都相同,該怎麼辦? 如果採用虛擬碼直接實現的程式,時間複雜度為n的平方;作者提供了思路,當A[p..r]中的元素相同時,返回的q為(p+r)/2,這樣就能保持最好的效能。習題7-4-5問道:難道一路quicksort遞迴到底,效能最好嗎?能不能改進?作者又提供了思路:當輸入數組已經幾乎有序時,插入排序的速度非常快;在實際
Time of Update: 2018-12-03
想看更多的解題報告: http://blog.csdn.net/wangjian8006/article/details/7870410 轉載請註明出處:http://blog.csdn.net/wangjian8006題目大意:
Time of Update: 2018-12-03
2-3-1:2-3-2:MERGE2(A,p,q,r) n1=q-p+1 n2=r-q let L[1..n1]and R[1...n2] be new arrays for i=1 to n1 L[i]=A[p+i-1] for j=1 to n2 R[j]=A[q+j] i=1 j=1 k=1 while i<=n1 and j<=n2 if L[i]<=R[j] A[k]=L[i]i=i+1 else
Time of Update: 2018-12-03
13-1-1:13-1-2:如果是紅色,不是紅/黑樹狀結構,違反性質4;如果是黑色,不是紅/黑樹狀結構,違反性質5;13-1-3:是紅/黑樹狀結構;這也就說明了,後面的插入操作和刪除操作,使違反性質的節點上移至根結點策略;13-1-4:度:可能是2,此時兩個子結點都是黑色的;可能是3,此時有一個紅色子結點,一個黑色的;可能是4,此時,有兩個紅色子結點;深度就是black-height,因為紅色的都被吸收了;13-1-5:假設最短的一條長度為h1,那麼它的黑高bh1最多為h1;假設最長的一條長度為
Time of Update: 2018-12-03
10-1-2:兩個棧分別從數組的兩端開始,向中間擴充;10-1-5:這個deque的代碼以前的實現過(c++
Time of Update: 2018-12-03
想看更多的解題報告: http://blog.csdn.net/wangjian8006/article/details/7870410 轉載請註明出處:http://blog.csdn.net/wangjian8006題目大意:給出你一個無向圖,然後對其中的點去上色,
Time of Update: 2018-12-03
/*poj 1236題意:有一個有向圖,現在在任意多個節點上發送資料,問使所有節點都能收到資料,需要向多少個節點發送資料 仍然是這個有向圖,問至少需要添加多少條邊才能使得在任意節點發送資料所有節點都能收到資料。思路:很明顯這道題是強連通方面的題目,在強連通中縮點之後的節點的出度和入度都十分重要。 我們現在來考慮出度和入度和這道題目的答案有什麼關係。 入度:如果有一個節點有入度那我們傳送資料的時候肯定可以選擇指向它的那個節點。所以顯然入度為0的點就是第一問的答案
Time of Update: 2018-12-03
9-1-1:假設我們還是成對元素的比較,選取出每對元素的最小值,再進行成對比較,這個結構學名叫做勝者樹;那麼第二小的元素肯定是跟第一小的元素比較中被過濾掉的;假設有n個元素,那麼樹的高度為ceil(lgn),建立這顆“勝者樹”的比較次數是(n-1),尋找第二小元素的比較次數最多是是ceil(lgn)-1所以比較次數是n+ceil(lgn)-2下列實現沒有用鏈表尋找關係,讀者可以自己用鏈表實現:#include<iostream>//此處主要模仿第六章中的堆即可using
Time of Update: 2018-12-03
/*二叉搜尋樹是一棵二叉樹,之所以成為搜尋樹,是因為適用於搜尋,大部分與搜尋有關的演算法, *大都採用這一策略,包括B樹,也可以看做是對二叉搜尋樹的擴充 *二叉搜尋樹滿足: *設x為樹中一個結點,如果y是x左子樹的一個節點,那麼y.key<=x.key *如果y是x右子樹的一個結點,那麼y.key>=x.key *//*二叉搜尋樹中的結點結構: *關鍵字key,衛星資料data *parent--父結點,left-child--左孩子,right-child右孩子
Time of Update: 2018-12-03
先自己寫了一個簡單但是代碼寫的挺差的單鏈表:#include"mymemory.h"#include"myconstruct.h"#include<iostream>//簡單單鏈表template<typename T>struct _slist_node {T data;_slist_node* next;};//既然是簡單鏈表,我們應該使用new分配記憶體,不過,我覺得我們確實應該使用記憶體池template<typename T,typename Alloc=