線性探測 Hash表的建立 查詢

2021-08-13 15:31:30 字數 1116 閱讀 7490

time limit: 1000ms

memory limit: 65536kb

submit

statistic

discuss

problem description

根據給定的一系列整數關鍵字和素數p,用除留餘數法定義hash函式h(key)=key%p,將關鍵字對映到長度為p的雜湊表中,用線性探測法解決衝突。重複關鍵字放在hash表中的同一位置。

input

連續輸入多組資料,每組輸入資料第一行為兩個正整數n(n <= 1500)和p(p >= n的最小素數),n是關鍵字總數,p是hash表長度,第2行給出n個正整數關鍵字,數字間以空格間隔。

output

輸出每個關鍵字在hash表中的位置,以空格間隔。注意最後乙個數字後面不要有空格。

example input

5 5

21 21 21 21 21

4 524 15 61 88

4 524 39 61 15

5 524 39 61 15 39

example output

1 1 1 1 1

4 0 1 3

4 0 1 2

4 0 1 2 0

#include#include#include#define n 10005

int check[n];

int importdata[n];

int p(int n)

return 1;

}int hashfunction(int key,int n)

void output(int a,int n)

if (a[j]==data[i])

if(!check[j])

}} }

}void inittable(int a,int n){

for(int i=0;i除留餘數法:hash函式 h(key)=key%p p為小於表長的最大質數,此題中為大於表長的最小質數。

雜湊表的填裝因子a

a=表中存在記錄數/表的總長度,表示雜湊表的裝滿程度,a值越小發生衝突的可能性越小,反之衝突的可能性越大。在建立hash表的過程中隨著元素的裝入,發生衝突的概率逐漸增大。

線性探測解決hash衝突

我們來簡單的例子說明什麼是線性探測 假設我們有乙個陣列 假設我們用當前公式計算當前資料在陣列中的下標位置 int i num 11 假設我們有一組資料需要放置在陣列中 那麼他們對應的下標位置應該分別為 資料 1 下標 1 11 1 資料 2 下標 2 11 2 資料 3 下標 3 11 3 資料 1...

POJ 1186 hash 線性探測再雜湊

一直以來我都覺得線性探測再雜湊這個方法一定很低效 結果碰到今天這題之後我驚奇的發現 鍊錶居然被線性探測再雜湊秒殺了 這個hash方法是將大數取模,放到乙個位置上,如果這個位置被占用了,就往後移1格,再被佔再移動知道能 放到某個位置上。詳細見資料結構書 真是太神奇了 懶得寫dfs 直接for的 所以 ...

雜湊查詢(雜湊表建立及平方探測)

編譯處理時,涉及變數及屬性的管理 插入 新變數的定義 查詢 變數的引用 順序查詢 o n 二分查詢 o logn 二叉樹查詢o h 平衡二叉樹 o logn 如何快速查詢?查詢的本質 已知物件找位置 有序的安排物件 全序 順序查詢 半序 二叉樹 直接算出位置 雜湊查詢 雜湊查詢 1.計算位置。2.解...