Time of Update: 2018-12-03
在網上看到一個非常熱的文章,裡面是這樣的一個問題:#include <iostream>using namespace std;class Base{ public: int m_base; virtual void f() { cout << "Base::f" << endl; } virtual void g() { cout << "Base::g" << endl; }};class Derive :
Time of Update: 2018-12-03
2-3-4樹是一種階為4的B樹。它是一種自平衡的資料結構,可以在O(lgn)的時間內尋找、插入和刪除,這裡的n是樹中元素的數目。2-3-4樹和紅/黑樹狀結構是等價的,也就是每個紅/黑樹狀結構都可以轉化為一顆2-3-4樹,每個選擇操作也和2-3-4樹中的分裂操作對應。 2-3-4樹是這樣一種資料結構,滿足如下性質: 1) 每個節點每個節點有1、2或3個key,分別稱為2-node,3-node,4-node。 2)
Time of Update: 2018-12-03
在包含n個元素的無序集合中,尋找第i個順序統計量的時間複雜度為O(n)。通過建立一種特定的結構,可以使得任意的順序統計量都可以在O(lgn)的時間內找到。這就是下面會提到的基於紅/黑樹狀結構的順序統計樹。 相比於基礎的資料結構,順序統計樹增加了一個域size[x]。這個域包含以x為根的子樹的節點數(包含x本身)。size域滿足等式: size[x] = size[left[x]] + size[
Time of Update: 2018-12-03
在實際的軟體編程中,經常會遇到資源的爭用,比如下面的例子:class Counter{ private: int value; public: Counter(int c) { value = c; } int GetAndIncrement() { int temp = value; //進入危險區 value = temp +1;
Time of Update: 2018-12-03
在多核快速發展的現在,利用多線程技術提高CPU裝置的利用率已經成為一種趨勢。然而多核電腦體系架構和單核有了很大的變化,在多線程編程中會碰到一些意想不到的問題,比如多核中非常典型的false sharing問題。下文會非常詳細的揭示false sharing產生的根源,以及何如避免來提高程式的效能。
Time of Update: 2018-12-03
/*直到目前,這題後台資料都是錯的*/#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>const int inf = 99999999;const int maxn = 999999;int dp[maxn],a[maxn],b[maxn],d[maxn],dd[maxn],same[maxn];int n;using namespace std;int
Time of Update: 2018-12-03
#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#define LL __int64using namespace std;LL gcd(LL a,LL b){ return b==0?a:gcd(b,a%b);}LL lcm(LL a,LL b){ return a/gcd(a,b)*b;}LL solve(LL n,LL a,LL b){
Time of Update: 2018-12-03
#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#define min(a,b) (a)>(b)?(b):(a)#define max(a,b) (a)>(b)?(a):(b)#define inf 99999999using namespace std;int cnt;int source,N;int sink,ans;int c[101*10
Time of Update: 2018-12-03
6-2 對d叉堆的分析 d叉堆有與二元堆積很類似,但(一個可能的例外是)其中的每個非葉結點有d個子女,而不是2個。 a)如何在一個數組中表示一個d叉堆? b)含n個元素的的叉堆的高度是多少? c)給出d叉最大堆的EXTRACT-MAX的一個有效實現,並用d和n表示出它的已耗用時間。 d)給出d叉堆的INSERT的一個有效實現,並用d和n表示出它的已耗用時間。 e)給出INCREASE-KEY(A, i,
Time of Update: 2018-12-03
xv6檔案系統由inode組成,每個inode是單個未命名的檔案。整個磁碟讀寫的最小單元為block (xv6為512位元組),其中整個磁碟分布如 第0個block為啟動區,第1個block為超級塊 (也是根目錄所在的塊),接下來是連續分布的dinode,最後是連續分布的BPB(塊位元影像)假設塊大小為BSIZE, 則1. 每個塊包含的dinode結構體的數量為: IPB = BSIZE/sizeof(dinode)。等價於第i個dinode所在的block為IBLOCK(i) = i/IPB+
Time of Update: 2018-12-03
這真的是太囧了,我差點就這樣了,明明就是一道模板題,可怎麼改都錯,交了十幾二十次還是WA……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
Time of Update: 2018-12-03
Hough變換就是對於圖象中某些符合參數模型的主導特徵,如直線、圓、橢圓等,可以通過對其參數進行聚類的方法,抽取相應的特徵。 例如,直線在極座標系下具有如下的參數方程形式:
Time of Update: 2018-12-03
7-4 快速排序中的堆棧深度 7.1節中的QUICKSORT演算法包含有兩個對自身遞迴調用。在調用PARTITION後,左邊的子數組和右邊的子數組分別被遞迴排序。QUICKSORT中第二次遞迴調用並不是必須的;可以用迭代控制結構來代替它。這種技術稱作尾遞迴,對多數的編譯器都加以了採用。考慮下面合格快速排序的版本,它類比了尾遞迴:QUICKSORT'(A, p, r)1 while p < r2 do ▸ Partition and sort left
Time of Update: 2018-12-03
二叉樹一個重要的資料結構,如何方便直觀的顯示一棵樹對於學習非常重要。 現設計了如下演算法: 編寫函數displaytree(二叉樹的根指標,資料值寬度,螢幕的寬度)輸出樹的直觀。輸出的二叉樹是垂直列印的,同層的節點在同一行上。問題描述:假設資料寬度datawidth=2,而螢幕寬度screenwidth為64=2^6,假設節點的輸出位置用(層號,須列印的空格數)來界定。第0層:根在(0,32)處輸出;第1層:因為根節點縮排了32個空格,所以下一層的位移量(offset)為32/2 =
Time of Update: 2018-12-03
本人曾有一個大小為1G的紐曼隨身碟,在一年前不幸中毒,格式化之後就只剩8M了,然後再也無法正常格式化。雖然只有8M,但總覺得扔了可惜,於是乎,就一直束之高閣。昨天突然心血來潮,決定再試一試,純粹是死馬當活馬醫,想不到最後竟然被我弄好了,太有成就感了!其中曲折,聽我慢慢道來。 只有8M的隨身碟既然無法採用正常的方式格式化,那隻好使用低階格式化了,即使用量產的方式進行格式化。基本步驟如下1.下載了一個ChipGenius軟體檢測了隨身碟的晶片類型,發現是芯邦出品的CBM2091
Time of Update: 2018-12-03
角點是同時在多個方向上變化的點,相對於邊緣,更加具有獨特性。角點檢測普遍應用在很多場合,如指紋檢測中的指紋特徵提取,稀疏光StreamCompute。 Harris corner角點的基本思想是通過一個小視窗來觀察,因此很容易識別出角點來。因為在這些方向上,想任意方向移動視窗都會在視窗的亮度分布上給出很大的變化。映像中的點可以分為三類:“flat”,“edge”,“corner”,Harris 演算法就是要提取出“corner”。 下面使用2D的灰階映像來給出Harris
Time of Update: 2018-12-03
9-1 已排序的i個最大數 給定一個含n個元素的集合,我們希望能用一個基於比較的演算法來找出按順序排列的i個最大元素。請找出能實現下列每一種方法的、具有最佳的漸進最壞已耗用時間的演算法,並分析各種方法的已耗用時間(用n和i表示)。 a)對於輸入數排序,並列出i個最大的數。 b)對輸入數建立一個優先順序隊列,並調用EXTRACT-MAX過程i次。 c)利用一個順序統計量演算法來找到第i個最大元素,然後劃分輸入數組,再對i個最大數排序。 分析與解答:
Time of Update: 2018-12-03
9.3-8 設X[1..n] 和 Y[1..n]為兩個數組,每個都包含n個已排好序的數。給出一個求數組X和Y中所有2n個元素的中位元的O(lgn)時間的演算法分析與解答: 若中位元位於X中,不妨設為X[k],即在X中有k個元素小於等於中位元,n-k個元素大於等於中位元。由於X[k]為合并後的2n個元素的中位元,則在Y中有n-k個元素小於等於中位元,k個元素大於等於中位元,即 Y[n-k] ≤ X[K] ≤
Time of Update: 2018-12-03
10.3-4 我們常常希望一個雙鏈表中的所有元素在儲存空間中能夠緊湊地排列在一起,例如使用多重數組表示中的前m個下標位置(在一個分頁的虛擬電腦環境中情況就是這樣)。假設鏈表以外沒有指向鏈表元素的指標,請說明應如何?過程ALLOCATE-OBJECT和FREE-OBJECT,才能使這種表示比較緊湊。(提示:使用棧的數組實現。) 分析與解答: 假設鏈表中已有y個元素,並且已經緊湊排列。令top = y +1,表示下一個將要分配的指標位置 在分配空間時很簡單:
Time of Update: 2018-12-03
10.3-5 設L是一長度為m的雙鏈表,儲存在長度為n的數組key、next和prev中。假設這些數組由維護雙鏈自由表F的兩個過程ALLOCATE-OBJECT和FREE-OBJECT來操縱。進一步假設在數組的n個元素中,有m個在表L和自由表F,移動L中的元素,使他們佔有數組中的1, 2, ..., m位置,同時調節自由表F使之保持正確,並佔有數組位置m+1, m+2, ..., n。所給出的已耗用時間應該是Θ(m),且只能使用固定量的額外空間。請仔細論證你所給出的過程的正確性。 分析與解答: