客觀題:
1、已知無向圖 G 如下所示,使用克魯斯卡爾(Kruskal)算法求圖 G 的最小生成樹,加入到最小生成樹中的邊依次是:
A、(b,f), (b,d), (a,e), (c,e), (b,e)
B、(b,f), (b,d), (b,e), (a,e), (c,e)
C、(a,e), (b,e), (c,e), (b,d), (b,f)
D、(a,e), (c,e), (b,e), (b,f), (b,d)
2、圖的深度優先遍歷類似於二叉樹的先序遍歷
3、我們用一個有向圖來表示航空公司所有航班的航線。下列哪種算法最適合解決找給定兩城市間最經濟的飛行路線問題Dijkstra算法
4、圖的廣度優先遍歷類似於二叉樹的層次遍歷
5、已知一個圖的鄰接矩陣如下,則從頂點V1出發按深度優先搜索法進行遍歷,可能得到的一種頂點序列為:
6、如果G是一個有28條邊的非連通無向圖,那么該圖頂點個數最少為多少?9;
7、使用迪傑斯特拉(Dijkstra)算法求下圖中從頂點1到其他各頂點的最短路徑,依次得到的各最短路徑的目標頂點是:
8、已知二叉樹的前序遍歷序列為 ABDCEFG,中序遍歷序列為 DBCAFEG,則后序遍歷序列為DCBFGEA;
9、在對N個元素進行排序時,基於比較的算法中,其“最壞時間復雜度”中最好的是O(NlogN);
10、將{5, 2, 7, 3, 4, 1, 6}依次插入初始為空的二叉搜索樹。則該樹的后序遍歷結果是1、4、3、2、6、7、5;
11、對一組數據{ 2,12,16,88,5,10 }進行排序,若前三趟排序結果如下: 第一趟排序結果:2,12,16,5,10,88 第二趟排序結果:2,12,5,10,16,88 第三趟排序結果:2,5,10,12,16,88 則采用的排序方法可能是冒泡排序;
12、就排序算法所用的輔助空間而言,堆排序、快速排序、歸並排序的關系是堆排序<快速排序<歸並排序;
13、有組記錄的排序碼為{46,79,56,38,40,84 },采用快速排序(以位於最左位置的對象為基准而)得到的第一次划分結果為40、38、46、56、79、84;
14、對於序列{ 49,38,65,97,76,13,27,50 },按由小到大進行排序,下面哪一個是初始步長為4的希爾排序法第一趟的結果?49、13、27、50、76、38、65、97;
15、給出關鍵字序列{ 431, 56, 57, 46, 28, 7, 331, 33, 24, 63 },下面哪個選擇是按次位優先(LSD)鏈式基數排序進行了一趟分配和收集的結果?——>431——>331->33->63->24->56->46->57->7->28;
解析:次位優先就是按照個、十、百……的順序進行排序,第一趟排序只看個位;
16、排序方法中,從未排序序列中依次取出元素與已排序序列中的元素進行比較,將其放入已排序序列的正確位置的方法稱為插入排序;
17、對N個元素采用簡單選擇排序,比較次數和移動次數分別為O(N^2)、O(N);
18、平均查找長度與結點個數無關的查找方法是:利用哈希(散列)表;
19、設散列表的地址區間為[0,16],散列函數為H(Key)=Key%17。采用線性探測法處理沖突,並將關鍵字序列{ 26,25,72,38,8,18,59 }依次存儲到散列表中。元素59存放在散列表中的地址是:11;
解析:26%17=9;
25%17=8;
72%17=4;
38%17=4(沖突+1放在5);
8%17=8(沖突+1仍沖突,再+1放在10);
18%17=1;
59%17=8(沖突三次+1+1+1放在11);
20、假定有K個關鍵字互為同義詞,若用線性探測法把這K個關鍵字存入散列表中,至少要進行多少次探測?K(K+1)/2;
解析:已開放地址法為例:
由於K個關鍵字互為同義詞,可假設K個關鍵字均為1,則有K個1.
1+2+3+4+……+K=K(1+K)/2.
21、將元素序列{18,23,11,20,2,7,27,33,42,15}按順序插入一個初始為空的、大小為11的散列表中。散列函數為:H(Key)=Key%11,采用線性探測法處理沖突。問:當第一次發現有沖突時,散列表的裝填因子大約是多少?0.45;
解析:18%11=7;
23%11=1;
11%11=0;
20%11=9;
2%11=2;
7%11=7(第一次發現沖突是第六個數字)
裝填因子=5/11=0.45;
22、給定散列表大小為17,散列函數為H(Key)=Key%17。采用平方探測法處理沖突:hi(k)=(H(k)±i2)%17將關鍵字序列{ 6, 22, 7, 26, 9, 23 }依次插入到散列表中。那么元素23存放在散列表中的位置是:2;
解析:6%17=6;
22%17=5;
7%17=7;
26%17=9;
9%17=9(沖突一次+1^2放在10);
23%17=6(發生沖突-1^2放在5,又發生沖突+2^2放在10,又發生沖突-2^2放在2,不沖突);
23、在散列表中,所謂同義詞就是:具有相同散列地址得兩個元素;
24、將 {5, 2, 7, 3, 4, 1, 6} 逐個按順序插入到初始為空的最小堆(小根堆)中。則該樹的前序遍歷結果為:1、3、5、4、2、7、6;
解析:
25、已知二叉樹的先序遍歷序列為ABCDEFGH,中序遍歷序列為CBEDFAGH,則該二叉樹形態中,父節點的右子節點為:G;
解析:
26、已知8個數據元素為(34,76,45,18,26,54,92,65),按照依次插入結點的方法生成一棵二叉搜索樹后,最后兩層上的結點總數為:2;
27、將下列數(88, 70, 61, 96, 120, 90)按順序插入初始為空的AVL中,所形成的AVL樹的前序遍歷結果是:88、70、61、96、90、120;
解析:
28、在下列所示的平衡二叉樹中,插入關鍵字48后得到一棵新平衡二叉樹。在新平衡二叉樹中,關鍵字37所在結點的左、右子結點中保存的關鍵字分別是:24和53
解析:
29、如果AVL樹的深度為5(空樹的深度定義為−1),則此樹最少有多少個結點?20;
30、將 26, 13, 44, 51, 98, 37, 66, 73 順序插入一棵初始為空的AVL樹。下列句子中哪句是錯的?
A、44 是根結點
31、具有65個結點的完全二叉樹其深度為(根的深度為1):7;
32、將數字 {10, 12, 1, 14, 6, 5, 8, 15, 3, 9, 7, 4, 11, 13, 2} 逐一插入一個初始為空的最小堆(小頂堆),得到的堆序列為:1、3、2、6、7、5、4、15、14、12、9、10、11、13、8;
33、設最小堆(小根堆)的層序遍歷結果為{1, 3, 2, 5, 4, 7, 6}。用線性時間復雜度的算法將該堆調整為最大堆(大根堆),則該樹的中序遍歷結果為:3、5、4、7、2、6、1;
34、設一段文本中包含字符{a, b, c, d, e},其出現頻率相應為{3, 2, 5, 1, 1}。經哈夫曼編碼后,文本所占字節數為:25;
35、給定有權無向圖的鄰接矩陣如下,其最小生成樹的總權重是:14;
36、下圖為一個AOV網,其可能的拓撲有序序列為:
A、ACBDEF
B、ABCEFD
C、ABCDFE
D、ABCEDF
37、在AOE網中,什么是關鍵路徑?D、從第一個事件到最后一個事件的最長路徑
38、給定有向圖的鄰接矩陣如下:頂點2(編號從0開始)的出度和入度分別是:0和2;
39、下圖所示的 AOE 網表示一項包含 8 個活動的工程。活動 d 的最早開始時間和最遲開始時間分別是:12和14;
解析:活動d的最早完成時間即其所在弧的出發頂點2的最早,將2與8+4=12進行比較,選擇較大的值12便是活動dde最早開始時間;
最遲開始時間需要倒推,活動6的最遲開始時間是27(8+10+9=27、8+4+6+9=27),推出活動4的最遲開始時間為8+4+7=21,活動5的最遲開始時間為18(3+6=9、8+10=18、27-9=18),活動2的最遲開始時間就是活動4的最遲開始時間-7=14.
40、給出如下圖所示的具有 7 個結點的網 G,采用Prim算法,從4號結點開始,給出該網的最小生成樹。下列哪個選項給出了正確的樹結點收集順序?
A、4501362
B、4526301
C、4561023
D、4563201
41、給定有向圖如下。下列哪個選項不是對應的拓撲序列?
A、abedfc
B、aedbfc
C、aedfbc
D、abdfce
43、下面代碼段的時間復雜度是O(log3n)
i=1;
while( i<=n )
i=i*3;
44、數組A[1..5,1..6]每個元素占5個單元,將其按行優先次序存儲在起始地址為1000的連續的內存單元中,則元素A[5,5]的地址為:1140;
45、若某表最常用的操作是在最后一個結點之后插入一個結點或刪除最后一個結點。則采用哪種存儲方式最節省運算時間?
46、有六個元素以6、5、4、3、2、1的順序進棧,問哪個不是合法的出棧序列?B、3 4 6 5 2 1
47、表達式a*(b+c)-d的后綴表達式是:A、a b c + * d -
48、如果循環隊列用大小為m的數組表示,且用隊頭指針front和隊列元素個數size代替一般循環隊列中的front和rear指針來表示隊列的范圍,那么這樣的循環隊列可以容納的元素個數最多為:B、m
49、如果循環隊列用大小為m的數組表示,隊頭位置為front、隊列元素個數為size,那么隊尾元素位置rear為:
50、若已知一隊列用單向鏈表表示,該單向鏈表的當前狀態(含3個對象)是:1->2->3,其中x->y表示x的下一節點是y。此時,如果將對象4入隊,然后隊列頭的對象出隊,則單向鏈表的狀態是:B、2->3->4
51、若用大小為6的數組來實現循環隊列,且當前front和rear的值分別為0和4。當從隊列中刪除兩個元素,再加入兩個元素后,front和rear的值分別為多少?2和0;
52、若棧采用順序存儲方式存儲,現兩棧共享空間V[m]:top[i]代表第i(i=1或2)個棧的棧頂;棧1的底在V[0],棧2的底在V[m-1],則棧滿的條件是:D、top[1]+1==top[2]
53、對於一非空的循環單鏈表,h和p分別指向鏈表的頭、尾結點,則有:A、p->next == h
54、在雙向鏈表存儲結構中,刪除p所指的結點,相應語句為:
C、p->prior->next=p->next;p->next->prior=p->prior;
55、給定一個堆棧的入棧序列為{ 1, 2, ⋯, n },出棧序列為{ p1, p2, ⋯, pn }。如果p2=n,則存在多少種不同的出棧序列?B、n-1
56、采用多項式的非零項鏈式存儲表示法,如果兩個多項式的非零項分別為N1和N2個,最高項指數分別為M1和M2,則實現兩個多項式相乘的時間復雜度是:A、
57、由分別帶權為9、2、5、7的四個葉子結點構成一棵哈夫曼樹,該樹的帶權路徑長度為:44;
58、若一棵二叉樹的前序遍歷序列是{ 4, 2, 1, 3, 6, 5, 7 },中序遍歷序列是{ 1, 2, 3, 4, 5, 6, 7 },則下列哪句是錯的?
A、這是一棵完全二叉樹 B、所有的奇數都在葉子結點上
59、已知字符集{ a, b, c, d, e, f, g, h }。若各字符的哈夫曼編碼依次是 0100, 10, 0000, 0101, 001, 011, 11, 0001,則編碼序列 0100011001001011110101 的譯碼結果是:D、afeefgd
60、一棵二叉樹中,雙分支結點數為15,單分支結點數為30,則葉子結點數為()個。16;
61、設最小堆(小根堆)的層序遍歷結果為{5, 18, 15, 28, 22, 42, 40}。用線性時間復雜度的算法將該堆調整為最大堆(大根堆),則該樹的中序遍歷結果為:B、18, 28, 22, 42, 15, 40, 5
1、Kruskal 算法是維護一個森林,每一步把兩棵樹合並成一棵。√
2、若圖G有環,則G不存在拓撲排序序列。√
3、用鄰接矩陣法存儲圖,占用的存儲空間數只與圖中結點個數有關,而與邊數無關。√
4、在任一有向圖中,所有頂點的入度之和等於所有頂點的出度之和。√
5、如果無向圖G必須進行兩次廣度優先搜索才能訪問其所有頂點,則G一定有2個連通分量。√
6、在一個有權無向圖中,若b到a的最短路徑距離是12,且c到b之間存在一條權為2的邊,則c到a的最短路徑距離一定不小於10。√
7、Prim 算法是維護一個森林,每一步把兩棵樹合並成一棵。×
8、在具有N個結點的單鏈表中,訪問結點和增加結點的時間復雜度分別對應為O(1)和O(N)。×
9、如果從有向圖 G 的每一點均能通過深度優先搜索遍歷到所有其它頂點,該圖一定不存在拓撲序列。√
10、僅基於比較的算法能得到的最好的“最壞時間復雜度”是O(NlogN)。√
11、存在一棵總共有2016個結點的二叉樹,其中有16個結點只有一個孩子。×
12、若一個結點是某二叉樹的中序遍歷序列的最后一個結點,則它必是該樹的前序遍歷序列中的最后一個結點。×
13、某二叉樹的后序和中序遍歷序列正好一樣,則該二叉樹中的任何結點一定都無左孩子。×
14、若A和B都是一棵二叉樹的葉子結點,則存在這樣的二叉樹,其前序遍歷序列為...A...B...,而中序遍歷序列為...B...A...。×
15、要從50個鍵值中找出最大的3個值,選擇排序比堆排序快。√
16、對N個記錄進行快速排序,在最壞的情況下,其時間復雜度是O(NlogN)。×
17、希爾排序是穩定的算法。×
18、任何二叉搜索樹中同一層的結點從左到右是有序的(從小到大)。√
19、對N個不同的數據采用冒泡排序進行從大到小的排序,當元素基本有序時交換元素次數肯定最多。×
20、在一棵二叉搜索樹上查找63,序列39、101、25、80、70、59、63是一種可能的查找時的結點值比較序列。×
21、在散列表中,所謂同義詞就是被不同散列函數映射到同一地址的兩個元素。×
22、在一棵由包含4、5、6等等一系列整數結點構成的二叉搜索樹中,如果結點4和6在樹的同一層,那么可以斷定結點5一定是結點4和6的父親結點。×
23、將M個元素存入用長度為S的數組表示的散列表,則該表的裝填因子為M/S。√
24、對AVL樹中的任一結點,其左子樹的高度一定比其右子樹的高度要高。×
25、即使把2個元素散列到有100個單元的表中,仍然有可能發生沖突。√
26、如果由結點{ 1, 2, 3, 4 }組成的AVL樹的深度是3(根結點的深度是1),則結點2或者結點3一定有兩個子結點。√
27、若用平方探測法解決沖突,則插入新元素時,若散列表容量為質數,插入就一定可以成功。×
28、將一棵完全二叉樹存於數組中(根結點的下標為1)。則下標為23和24的兩個結點是兄弟。×
29、任何最小堆中從根結點到任一葉結點路徑上的所有結點是有序的(從小到大)。√
30、對N(≥2)個權值均不相同的字符構造哈夫曼樹,則樹中任一非葉結點的權值一定不小於下一層任一結點的權值。√
31、哈夫曼編碼是一種最優的前綴碼。對一個給定的字符集及其字符頻率,其哈夫曼編碼不一定是唯一的,但是每個字符的哈夫曼碼的長度一定是唯一的。×
32、無向連通圖至少有一個頂點的度為1。×
33、算法分析的兩個主要方面是時間復雜度和空間復雜度的分析。√
34、算法可以沒有輸入,但是必須有輸出。√
35、和具有相同的增長速度。√
36、 是 的。√
37、 和 具有相同的增長速度。×
38、對於順序存儲的長度為N的線性表,訪問結點和增加結點的時間復雜度分別對應為O(1)和O(N)。√
39、若某線性表最常用的操作是存取任一指定序號的元素和在最后進行插入和刪除運算,則利用順序表存儲最節省時間。√
40、將N個數據按照從小到大順序組織存放在一個單向鏈表中。如果采用二分查找,那么查找的平均時間復雜度是O(logN)。×
41、通過對堆棧S操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)。輸出的序列為:123。×
42、若一個棧的輸入序列為1,2,3,…,N,輸出序列的第一個元素是i,則第j個輸出元素是j−i−1。×
43、所謂“循環隊列”是指用單向循環鏈表或者循環數組表示的隊列。×
44、在用數組表示的循環隊列中,front值一定小於等於rear值。×
45、對於順序存儲的長度為N的線性表,刪除第一個元素和插入最后一個元素的時間復雜度分別對應為O(1)和O(N)。×
46、若一個棧的輸入序列為{1, 2, 3, 4, 5},則不可能得到{3, 4, 1, 2, 5}這樣的出棧序列。√
47、若用鏈表來表示一個線性表,則表中元素的地址一定是連續的。×