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
想看更多的解題報告:http://blog.csdn.net/wangjian8006/article/details/7870410
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
想看更多的解題報告: http://blog.csdn.net/wangjian8006/article/details/7870410
Time of Update: 2018-12-03
//myconstruct.h#ifndef _MYCONSTRUCT#define _MYCONSTRUCT#include"myiterator.h"#include<algorithm>using std::copy;using std::fill_n;using std::fill;/**********記憶體處理基本工具**********************///五個全域函數,作用於未初始化的空間//----------------------------------
Time of Update: 2018-12-03
想看更多的解題報告:http://blog.csdn.net/wangjian8006/article/details/7870410
Time of Update: 2018-12-03
營救(Rescue)ZOJ Monthly, October 2003, ZOJ1649題目描述:Angel 被MOLIGPY 抓住了,她被關在監獄裡。監獄可以用一個N×M 的矩陣來描述,1<N, M≤200。監獄由N×M 個方格組成,每個方格中可能為牆壁、道路、警衛、Angel 或Angel 的朋友。Angel 的朋友想去營救Angel。他的任務是接近Angel。約定“接近Angel”的意思是到達Angel被關的位置。如果Angel
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
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
棧和隊列的應用極廣,其思想與圖論中深度優先搜尋和廣度優先搜尋的思想一致。說的簡單點,棧和隊列都是容器,且棧為先進先出,隊列為先進後出;一、棧的實現 其思路是封閉數組的一端,只能從一端添加元素和刪除元素,我們把這一端的頂點位置標示為top;簡單棧(採用自己的記憶體配置方式,也可以使用new分配記憶體):#include"myconstruct.h"#include"mymemory.h"template<typename T,typename Alloc=alloc>class
Time of Update: 2018-12-03
8-1-1:某一葉結點的最小深度,我認為是(n-1),以<1,2,3>為例,若果輸入序列為<1,2,3>,那麼,只進行<1,2><2,3>就得出<1,2,3>,也就是說·當輸入序列為升序排列時,葉結點深度最小,為(n-1);8-1-3:這裡http://blog.csdn.net/mishifangxiangdefeng/article/details/7678859寫的挺好8-1-4:這個題其實就是習題7-4-5或者習題2-1:對於每
Time of Update: 2018-12-03
第i個順序統計量:第i小的元素;對於一個n個元素的數組來說,當n為奇數時,中位元為第i=(n+1)/2個順序統計量;當n為偶數時,中位元為第i=n/2和i=n/2+1個順序統計量;此處只考慮i=(n+1)/2向下取整處的元素,即下中位元。對於最大值和最小值:MINIMUM(A) min=A[1] for i=2 toA.length if min>A[i] min=A[i] return min需要(n-1)次比較才能找出來;對於同時找最大值和最小值:我們並不需要進行(2n-2
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
向量就是動態數組。直接上stl源碼://myvector.h#include"mymemory.h"#include"myiterator.h"#include"myconstruct.h"using std::copy_backward;using std::max;template<class T,class Alloc=alloc>class vector{public:typedef T
Time of Update: 2018-12-03
這篇代碼是寫給自己看的,所以沒什麼注釋,大家可以去看侯捷先生的《STL 源碼剖析》//mydeque.h#include"myconstruct.h"#include"mymemory.h"using std::max;using std::copy_backward;/*deque是雙向開頭的連續線性空間,它動態地以分段連續空間組合而成,這個表面上deque的迭代器 *支援隨機訪問,實則是假象,這裡是以複雜的迭代器構架來維持此假象,我學習stl deque的目的是