第七章的知識總結:
作業:判斷題:
1.在雜湊表中,所謂同義詞就是具有相同雜湊位址的兩個元素。(2分) t f
2.在度量搜尋引擎的結果集的相關度時,召回率很低意味著大多數相關的文件沒有被找到。(2分)t f
3.在度量搜尋引擎的結果集的相關度時,準確率很低意味著找出的大部分文件是無關的。(2分)t f
召回率(recall rate,也叫查全率
)是檢索出的相關文件數和文件庫中所有的相關文件數的比率,衡量的是檢索系統的查全率
;精度是檢索出的相關文件數與檢索出的文件總數的比率,衡量的是檢索系統
的查準率
。(關於準確率和召回率:
選擇題:
選擇題沒有太多挖坑的地方,主要是一些重要的、容易混淆的概念
1.在下列查詢的方法中,平均查詢長度與結點個數無關的查詢方法是: (2分)
順序查詢
二分法
利用雜湊(雜湊)表
利用二叉搜尋樹
2.(neuds)對線性表進行二分查詢時,要求線性表必須( ) (2分)
以順序方式儲存
以順序方式儲存,且結點按關鍵字值有序排列
以鏈結方式儲存
以鏈結方式儲存,且結點按關鍵字值有序排列
3.若查詢每個元素的概率相等,則在長度為n的順序表上查詢任一元素的平均查詢長度為()。 (2分)
n
n/2
(n+1)/2
(n-1)/2
原因:第乙個元素只用比較一次就可以找到,最後乙個要比較n次,所以平均查詢長度為(n+1)/2.
4.(neuds)當採用分塊查詢時,資料的組織方式為( )。(2分)
資料必須有序
資料不必有序
資料分成若干塊,每塊內資料不必有序,但塊間必須有序
資料分成若干塊,每塊內資料必須有序,但塊間不必有序
5.__是hash查詢的衝突處理方法: (2分)
求餘法
平方取中法
二分法
開放位址法
這些都是平常不太容易注意到的點,這些選擇題幫我們很好地幫我們總結了一下易混淆的知識點。
3.程式設計題
這一道主要就是考察運用雜湊演算法的能力。一定要注意表長是否是素數,不是的話要找出合適的素數。找素數的兩種方法:
第一種方法:
1這種方法會比較難理解,但是判斷表長和找素數是在乙個函式裡完成的,看起來會整潔很多int nextprime(int n) //
求素數 2
9else p = n+1
; 10
while (1
) 11
17if(i*i > p) break;18
else p += 2;19
}20return
p;21 }
第二種方法:
1這種方法簡單易懂,和上學期學習的判斷素數的方法很像,推薦同學們使用bool prime(int a)//
返回值為布林型別,判斷素數 210
int get_prime(int
a)11
16return
a;17 }
我的**最開始有三個測試點報錯,後來改了很久,才發現是一些很小但很容易錯的地方
第乙個:
1第二個:int hash (int key, intp)2
12}13return -1
;14 }
1正確的**:int hash (int key, intp)2
12}13return -1
;14 }
1第三個,不要想著直接用char作為hash函式的返回值,因為char型別只有八位且 『0』 + 10 != 『10』,所以將返回型別設為int,輸出時按返回值的情況分別進行輸出。int hash (int key, intp)2
12}13return -1
;14 }
該題的完整**:
1 #include 2 #include3實踐1的程式設計題看起來不是特別難,但是一定要注意幾種情況:using
namespace
std;45
int hashtable[11000], a[11000];6
7int nextprime(int n) //
求素數 8
15else p = n+1
; 16
while (1
) 17
23if(i*i > p) break;24
else p += 2;25
}26return
p;27}28
29int hash (int key, int
p)3040}
41return -1;42
}4344int
main()
4554
intp;
55 p = hash(a[0
], t);
56if(p<0) cout << "-"
;57else cout <
58for(int i=1; i)
5964
return0;
65 }
1.當要找的數小於全部數的時候,輸出0,而不是-1;
2.當要找的數大於全部數的時候,可以不用進行比較,直接返回-1就好了;
**如下:
1 #include 2第七章對寫**很有幫助,查詢也是大部分**裡需要用到的演算法,感覺學好了查詢,用對查詢的方法,對提高**的時間複雜度很有幫助。using
namespace
std;
34 typedef struct
5elemtype;
89 typedef struct
10sstable;
1415
void init(sstable &st, int
n)16
2021
int search_bin(sstable st, int
key)
2235
return
low;36}
37}3839
intmain()
4053
54 cin >>x;
5556
if(search_bin(st, x)!=-1) cout << search_bin(st, x) <
57else cout << "-1"
<
5859
delete
st.r; //申請了空間一定要記得釋放哦
6061
return0;
62 }
希望下一章打**的時候可以細心一些,多注意一些小的細節。
資料結構第七章小結
1 typedef struct 和struct 的區別 struct studen1 stu1 typedef struct student2 stu2 student1是結構體的名字,stu1是乙個變數,相當於struct student1 stu1 而stu2是乙個變數的型別,相當於struc...
資料結構第七章
平衡二叉樹 基本思想 在構造二叉排序樹的過程中,每插入乙個 結點時,首先檢查是否因插入而破壞了樹的平衡性,若是,則找出最小不平衡子樹,在保持二叉排序樹特 性的前提下,調整最小不平衡子樹中各結點之間的鏈 接關係,進行相應的旋轉,使之成為新的平衡子樹 平衡二叉樹 或者是一棵空的二叉排序樹,或者是具 有下...
第七章學習小結
第七章的內容是查詢。查詢可以分為3種。分別是線性表查詢 樹表查詢 雜湊表查詢。1 線性表查詢 線性表查詢主要介紹了順序查詢和折半查詢這兩種方法。1 順序查詢區別於上學期學的方法,設定了哨兵,採用從後往前開始查詢的方法,將時間複雜度縮短了一倍。asl n 1 2 2 折半查詢,其實也叫二分查詢,原理是...