日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

整型关键字的平方探测法散列 (25 分)【详细解析】

發布時間:2024/2/28 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 整型关键字的平方探测法散列 (25 分)【详细解析】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

立志用最少的代碼做最高效的表達


本題的任務很簡單:將給定的無重復正整數序列插入一個散列表,輸出每個輸入的數字在表中的位置。所用的散列函數是 H(key)=key%TSize,其中 TSize 是散列表的表長。要求用平方探測法(只增不減,即H(Key)+i^2)解決沖突。

注意散列表的表長最好是個素數。如果輸入給定的表長不是素數,你必須將表長重新定義為大于給定表長的最小素數。

輸入格式:
首先第一行給出兩個正整數 MSize(≤10^4)和N(≤MSize),分別對應輸入的表長和輸入數字的個數。隨后第二行給出 N 個不重復的正整數,數字間以空格分隔。

輸出格式:
在一行中按照輸入的順序給出每個數字在散列表中的位置(下標從 0 開始)。如果某個數字無法插入,就在其位置上輸出 -。輸出間以 1 個空格分隔,行首尾不得有多余空格。

輸入樣例:
4 4
10 6 4 15

輸出樣例:
0 1 4 -


Hash平方探測法模板

注意:
何種情況下某值無法插入到序列中?
答:如果序列長度為7,則循環到7*7及以后,就會形成周期循環, 因此循環次數小于序列長度即可。

舉例:x=1,n=7時, x+0?0x+0*0x+0?0等價于x+7?7x+7*7x+7?7x+1?1x+1*1x+1?1等價于x+8?8)x+8*8)x+8?8

證明:參考取余性質,有: (x+8*8)%7=(x+(1+7)*(1+7))%7=(x+(1+7+7+49))%7=(x+1)%7+7%7+7%7+49%7=(x+1)%7


#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <map> using namespace std; int is(int n) {if(n == 1)return 0;if(n == 2 || n == 3)return 1;if(n % 6 != 1 && n % 6 != 5)return 0;for(int i = 5;i * i <= n;i += 6) if(n % i == 0 || n % (i + 2) == 0)return 0;return 1; } int main() {int m,n;int s,p,v[10007] = {0};scanf("%d %d",&m,&n);while(!is(m))m ++;for(int i = 0;i < n;i ++) {p = -1;scanf("%d",&s);for(int j = 0;j < m;j ++) {if(!v[(s + j * j) % m]) {v[(s + j * j) % m] = 1;p = (s + j * j) % m;break;}}if(i)putchar(' ');if(p == -1)printf("-");else printf("%d",p);} }

弱小和無知不是生存的障礙,傲慢才是。???????——《三體》

總結

以上是生活随笔為你收集整理的整型关键字的平方探测法散列 (25 分)【详细解析】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。