高階實驗8 2 1 逆雜湊問題 30分

2021-10-09 22:34:38 字數 1297 閱讀 5599

高階實驗8-2.1 逆雜湊問題 (30分)

給定長度為 n 的雜湊表,處理整數最常用的雜湊對映是 h(x)=x%n。如果我們決定用線性探測解決衝突問題,則給定乙個順序輸入的整數序列後,我們可以很容易得到這些整數在雜湊表中的分布。例如我們將 1、2、3 順序插入長度為 3 的雜湊表ht後,將得到ht[0]=3,ht[1]=1,ht[2]=2的結果。

但是現在要求解決的是「逆雜湊問題」,即給定整數在雜湊表中的分布,問這些整數是按什麼順序插入的?

輸入格式:

輸入的第一行是正整數 n(≤1000),為雜湊表的長度。第二行給出了 n 個整數,其間用空格分隔,每個整數在序列中的位置(第乙個數字置為0)即是其在雜湊表中的位置,其中負數表示表中該位置沒有元素。題目保證表中的非負整數是各不相同的。

輸出格式:

按照插入的順序輸出這些整數,其間用空格分隔,行首尾不能有多餘的空格。注意:對應同一種分布結果,插入順序有可能不唯一。例如按照順序 3、2、1 插入長度為 3 的雜湊表,我們會得到跟 1、2、3 順序插入一樣的結果。在此規定:當前的插入有多種選擇時,必須選擇最小的數字,這樣就保證了最終輸出結果的唯一性。

輸入樣例:

11331

1312

3438

272232-

121

輸出樣例:

1

1312

2133

3438

2722

32

#include

#include

#include

using

namespace std;

const

int n=

11000

;const

int inf=

0x3f3f3f3f

;int a[n]

,b[n]

,v1[n]

,v2[n]

,ans[n]

;//v1代表待插入的資料是否用過,v2是雜湊表上的位置是否被用過

intmain()

sort

(b,b+tot)

;for

(i=0

;i)for

(j=0

;j(v2[k]==0

)break

;//雜湊表當前位置沒有被用,待插入的資料不可能順延插入了 }if

(flag)

break;}

for(i=

0;i)return0;

}

D OJ練習 雜湊查詢實驗(閉雜湊 開雜湊)

請設計乙個整型閉雜湊表,雜湊函式為除留餘數法,處理衝突時的探查方法為線性探查法,其中雜湊表的長度 除留餘數法的模和關鍵碼的個數由鍵盤輸入,再根據輸入由鍵盤輸入所有的關鍵碼。分別對三個待查值在雜湊表中進行查詢,如果找到了輸出位置,如果沒找到,輸出 none 並把該待查值插入到雜湊表中,如果雜湊表滿輸出...

Python 高階 標準雜湊機制

雜湊 hashing 技術不僅在絕大多數演算法類書籍中都有詳細介紹,而且在 python 程式當中也非常普及。該技術往往會涉及一些經由某既定物件計算而來的整數值 乍看之下似乎是隨機的 例如,我們可以用這些值來索引陣列元素 當然,需要進行某些調整,以確保其在合法的索引範圍內 在 python 語言中,...

資料結構實驗 雜湊表

time limit 1000ms memory limit 65536k 有疑問?點這裡 在n個數中,找出出現次數最多那個數字,並且輸出出現的次數。如果有多個結果,輸出數字最小的那乙個。單組資料,第一行數字n 1 n 100000 接下來有n個數字,每個數字不超過100000000 出現次數最多的...