20172306 2018-2019《Java程式設計與資料結構課堂測試補充報告》
阿新 • • 發佈:2018-10-31
學號 2017-2018-2 《程式設計與資料結構》課堂測試補充報告
課程:《程式設計與資料結構》
班級: 1723
姓名: 劉辰
學號:20172306
實驗教師:王志強
必修/選修: 必修
1.測試內容
- 三種演算法查詢練習
- 給定關鍵字序列11,78,10,1,3, 2,4,21,試分別用線性查詢、折半查詢、雜湊查詢(用線性探查法和鏈地址法)來實現查詢。試畫出它們的對應儲存形式(順序查詢的順序表,二分查詢的判定樹,兩種雜湊查詢的散列表),並求出每一種查詢的成功平均查詢長度。其中,雜湊函式H(K) = K % 11。
- 測試過程及結果
- 線性查詢:這個比較簡單,就是從表頭開始,一次又一次的將陣列中的元素與目標元素進行比較,然後找到元素。
解題:不用排序,一個一個找
- 折半查詢:首先一定要將陣列中的數字進行排序,然後從中間開始查詢,然後看大於還是小於中間值,然後在相應的一側再次進行中間查詢。
解題:中間開始找
- 雜湊查詢
- 線性探查法:在儲存地址和放的東西之間建立一個確定的對應關係;不通過比較,一次存取就能得到所查元素。
解題:利用 K%11
首先將聯絡表示出來,然後對應上
然後在1時,發現和78有衝突,所以就取下一個,下一個為空,所以放進去
之後就繼續放
最後的21是有衝突的,往後就到0處的索引,然後繼續尋找空閒處,
ASL為 (1 + 1 + 2 + 1 + 3 + 2 + 8 + 1 )/8 = 2.375
- 鏈地址法:用連結串列進行查詢,在衝突時,形成一個連結串列,鏈在後面。
ASL為ASL= (1 x 6 + 2 x 2)/8 = 1.25
其他(感悟、思考等)
在測試過程中,在雜湊查詢用線性探查法中,我做錯了,將21放錯了位置,經過老師講解之後才知道錯誤之處,是自己之前就沒理解那個地方。