資料結構 筆記

2021-10-23 06:41:40 字數 3310 閱讀 1782

1、順序表的平均比較次數:(n+1)/ 2

解析】在順序表中查詢,最好情況下第乙個元素就是要查詢的元素,則比較次數為 1 ;在最壞情況下,最後乙個元素才是要找的元素,則比較次數為 n 。兩種情況平均即( 1+n ) /2 。

2、順序表的平均查詢長度:(n+1) /2

第乙個數的比較次數為1,第二個數的比較次數為2。。。以此類推第n個數的比較次數為n,所以總的比較次數為1+2+…+n=n(n+1)/2,平均比較次數為(n+1)/2,也即平均查詢長度。

3、在asc演算法team日常開發中,常常面臨一些資料結構的抉擇,令人糾結。目前大家在策劃乙個fbi專案(fast binary indexing),其中用到的詞彙有6200條,詞彙長度在10-15之間,詞彙字元是英文本母,區分大小寫。請在下面幾個資料結構中選擇乙個使檢索速度最快的:

二叉搜尋樹,比較函式開銷:1次運算/每字元

雜湊表,hash演算法開銷:10次運算/每字元

鍊錶,比較函式開銷:1次運算/每字元

答案:trie樹,尋找子節點開銷:1次運算/每字元(正確)。

解析:註解:又稱單詞查詢樹,trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串(但不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是:利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。

4、下面關於查詢演算法的論述中哪個不是正確的?

順序查詢需要查詢表為有序表

折半查詢需要查詢表為有序表

查詢錶可分為靜態查詢表和動態查詢表

動態查詢表的特點是表結構本身在查詢過程中動態生成的

5、查詢效率最高的二叉排序樹是:

二叉查詢樹的查詢速度取決於樹的深度,相同結點數深度最小的是平衡二叉樹。

6、順序查詢法適用於儲存結構為順序或鏈結儲存的線性表。()

儲存結構:

順序儲存

鏈式儲存

索引儲存

雜湊(或雜湊)儲存

順序儲存的線性表不但邏輯上連續,物理上也連續,可以使用順序查詢法。

鏈式儲存的線性表雖然物理上不一定連續,但邏輯上連續(通過額外的指標表示邏輯相鄰關係),也可以使用順序查詢法。

7、假設順序表中包含5個關鍵字,它們的查詢概率分別為,為了使查詢成功時的平均查詢長度達到最小,則順序表中資料元素的出現順序是( )

順序表查詢長度與順序表遍歷長度有關,概率越大,其在順序表中所佔長度越長,概率越大 應放在前面

8、設雜湊表的長度為10,雜湊函式h(n)=n mod 7,初始關鍵字序列為 (33,24,8,17,21,10),用鏈位址法作為解決衝突的方法,平均查詢長度是 1.5

33/7=5, 查詢33需要1次;

24/7=3,查詢24需要1次;

8/7=1,查詢8需要1次;

17/7=3,查詢17需要2次;

21/7=0,查詢21需要1次;

10/7=3,查詢10需要3次;

asl=每個關鍵字查詢的次數之和/關鍵字的個數=(1+1+1+2+3+1)/6=1.5

9、為提高雜湊(hash)表的查詢效率,可以採取的正確措施是(23)。

ⅰ.增大裝填(載)因子

ⅱ.設計衝突(碰撞)少的雜湊函式

ⅲ.處理衝突(碰撞)時避免產生聚集(堆積)現象

解析:雜湊因子,又叫裝填(裝載)因子,用來描述雜湊表的密集程度。

a = 元素個數 / 雜湊表長度

a 越大,產生衝突的概率就越大,a越小,空間浪費就大,雜湊因子一般控制在0.7~0.8左右。

並不是越大越好,也不是越小越好。如果僅僅是單一為了提高查詢效率,雜湊因子越小,查詢效率越高。

10、順序查詢就是從頭到尾乙個乙個比較,表中內容是否有序無所謂,反正都會瀏覽一遍直到找到為之。

11、折半查詢與二元查詢樹的時間效能在最壞的情況下是相同的(錯誤)

解析:折半查詢最壞的情況下查詢log(n)+1次,而二叉查詢樹最壞的情況是查詢n次。

12、kmp演算法下,長為n的字串中匹配長度為m的子串的複雜度為()

kmp演算法完成的任務是:給定兩個字串o和f,長度分別為n和 m,判斷f是否在o**現,如果出現則返回出現的位置。常規方法是遍歷o的每乙個位置,然後從該位置開始和f進行匹配,但是這種方法的複雜度是 o(nm)。kmp演算法通過乙個o(m)的預處理,使匹配的複雜度降為o(n+m)。

13、使用kmp演算法在文字串s中找模式串p是一種常見的方法。假設s=p=,亦即將s對自己進行匹配,匹配過程中正確的next陣列是____。

嚴版資料結構求 next 的公式:

我們主要觀察第二項,存在兩種情況:

( 1 )集合為空,若集合為空,則屬於公式中的第一或第三種情況(其他情況), j=1 的時候, next[1]=0 ,當 j>1 的時候, next[j]=1 。

( 2 )集合不為空,則我們要取的 k ,是集合中 k 的最大值。

先以嚴老師書上的例子:

求模式串 abaabcac 的 next 陣列

當 j=1 時, next[1]=0 ,直接是公式的第一種情況

當 j=2 時,因為第二種情況要保證集合不為空且 1當 j=3 時, k 要小於 j ,所以,我們要在模式串找長度小於 j 的前面全部串的字首與字尾相同時的最大長度,也就是在模式串中找到前兩位 ab ,來找他們最長的字首與字尾及長度,可以發現,他們沒有相同的字首與字尾,因此,長度為 0 ,而 k 等於長度加 1 ,所以 next[3]=1

當 j=4 時,在 aba 中找字首與字尾的相同時的最大長度,可以求出最大長度max為 1 ,所以 next[4]=2

當 j=5 時,在 abaa 中找,max為 1 ,所以 next[5]=2

當 j=6 時,在 abaab 中找,max為 2 ,所以 next[6]=3

當 j=7 時,在 abaabc 中找,max為 0 ,所以 next[7]=1

當 j=8 時,在 abaabca 中找,max為 1 ,所以 next[8]=2

以模式串為 xyxyyxxyx 為例,求 next

當 j=1 , next[1]=0

當 j=2 , next[2]=1

當 j=3 ,在 xy 中找字首與字尾,最大長度 max 為 0 , next[3]=1

當 j=4 ,在 xyx 中找, max 為 1 , next[4]=2

當 j=5 ,在 xyxy 中找, max 為 2 , next[5]=3

當 j=6 ,在 xyxyy 中找, max 為 0 , next[6]=1

當 j=7 ,在 xyxyyx 中找, max 為 1 , next[7]=2

當 j=8 ,在 xyxyyxx 中找, max 為 1 , next[8]=2

當 j=9 ,在 xyxyyxxy 中找, max 為 2 , next[9]=3

資料結構筆記

程式效率與組織方式有關 圖書館擺書 二分查詢 程式效率與操作有關 迴圈和遞迴 遞迴雖簡單不過耗費大量空間 程式效率與演算法有關 多項式求和 秦九韶要比普通演算法快乙個數量級 測試兩種演算法的 include include include define max 101 define maxl 1e7...

資料結構筆記

一 鄰接矩陣 鄰接矩陣儲存使用2個陣列儲存圖的資訊 1個以為陣列儲存頂點,乙個二維陣列儲存邊的資訊 1 二維陣列中的對角線為0,以為不存在頂點到自身的邊 2 要知道某個點的出度,就是頂點vi在第i行的元素之和,入度就是該頂點所在列的元素之和 3 頂點vi的所有鄰接點就是吧矩陣中第i行元素掃瞄一遍 4...

資料結構筆記

二叉樹的遍歷操作 二叉樹的遍歷是指從根結點出發,按照某種次序 訪問二叉樹中的所有結點,使得每個結點被訪問一 次且僅被訪問一次。抽象操作,可以是對結點進行的各種 處理,這裡簡化為輸出結點的資料。前序遍歷 中序遍歷 後序遍歷 層序遍歷 查詢的基本概念 靜態查詢適用於 查詢集合一經生成,便只對其進行 查詢...