1. 程式人生 > >演算法與資料結構-刷題

演算法與資料結構-刷題

1設有n個關鍵字具有相同的Hash函式值,則用線性探測法把這n個關鍵字對映到HASH表中需要做()次線性探測。

解答:線性探測是出現衝突後開始向後探測一個位置,所以從第二個關鍵字對映時要做1次探測,第三個關鍵字時要做2次探測...

存放第一個元素時,不需做線性探測;

1+2+3+...+n-1 = (n-1)n/2

2.若進棧序列為1,2,3.4假定進棧和出棧可以穿插進行,則可能的出棧序列是()

A 2,4,1,3  B3,1,4,2  C3,4,1,2   D1,2,3,4

原則:先入後出

驗證A:1入棧,2入棧,2出棧,3入棧,4入棧,4出棧,此時沒有元素入棧,再次出棧的元素為3,1。所以A錯誤,正確的順序是:2431。

驗證B:1入棧,2入棧,3入棧,3出棧,此時棧中的元素自底向上為1,2,如果要1出棧,則必須先2出棧。

驗證C:1入棧,2入棧,3入棧,3出棧,4入棧,4出棧,此時棧中的元素自底向上為1,2,如果要1出棧,則必須先2出棧。

驗證D:1入棧,1出棧,2入棧,2出棧,3入棧,3出棧,4入棧,4出棧。正確。

3.演算法的執行時間及加、減、乘、除、轉移、存、取等基本運算。要想準確地計算總運算時間是不可行的()正確

 統計運算時間這個問題是個悖論。理由如下

我們不知道基本運算時間。

我們統計基本運算時間需要對應的計時程式。

計時程式本身也是由基本運算組成。

在不知道基本運算時間的情況下我們也就不知道計時程式的執行時間。
從而導致其記錄的運算時間不可靠。

4在所有排序方法中,關鍵字比較的次數與記錄的初始排列次序無關的是(D)

A希爾排序 B氣泡排序 c插入排序 D選擇排序

概念:選擇排序(Selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。 (百度的)

從以上概念可以看出來,不管初始順序是什麼,比較的次數都是不變的

5.設有5000個無序的元素,希望用最快的速度排出其中前50個最大的元素,最好選用哪種排序方法?

解析:
堆排序演算法中,陣列最大的元素位於堆頂處,在輸出堆項的最大值之後,使得剩餘n-1個元素的序列又建成一個堆,則得到n個元素中的次大值。如此反覆執行50次,便能得到前50個最大的元素。和其他的相比堆排序只執行了50次,其他的在最壞的情況下都要遍歷,所以為堆排序

6.若用一個大小為6的陣列來實現迴圈佇列,隊尾指標是rear、隊頭是front。當前rear和front的值分別為0和3,當從佇列中刪除一個元素,再加入兩個元素後,rear和front的值分別為                2,4

7.排序趟數與序列的原始狀態有關的排序方法是()排序法

總排序趟數與初始狀態無關的有:(除了快速排序和優化的冒泡,其他都是)

演算法複雜度與初始狀態無關的有:堆排序歸併排序選擇排序基數排序

元素總比較次數與初始狀態無關的有:選擇排序基數排序

元素總移動次數與初始狀態無關的有:歸併排序基數排序