7-42 整型关键字的散列映射 (25 分)(思路加详解)兄弟们 来呀 写题呀
生活随笔
收集整理的這篇文章主要介紹了
7-42 整型关键字的散列映射 (25 分)(思路加详解)兄弟们 来呀 写题呀
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:題目
給定一系列整型關鍵字和素數P,用除留余數法定義的散列函數H(Key)=Key將關鍵字映射到長度為P的散列表中。用線性探測法解決沖突。
輸入格式:
輸入第一行首先給出兩個正整數N(≤1000)和P(≥N的最小素數),分別為待插入的關鍵字總數、以及散列表的長度。第二行給出N個整型關鍵字。數字間以空格分隔。
輸出格式:
在一行內輸出每個整型關鍵字在散列表中的位置。數字間以空格分隔,但行末尾不得有多余空格。
輸入樣例:
4 5 24 15 61 88輸出樣例:
4 0 1 3二:思路
利用哈希表原理,進行存儲數據,然后處理一個位置沖突問題
三:上碼
#include<bits/stdc++.h> using namespace std;int main(){int N,M;cin >> N >> M;int array[M];for( int i = 0; i < M; i++){array[i] = 10000; //之所以 初始化為這么大 是為了解決 下標為0時,關鍵值也為0,如果 再出現一個余數為0的數,他本來的下標應為1,//array[i] = 0; //但如果我們初始化為0的話,他就會出現0 可以拿下方例子進行驗證}for( int i = 0; i < N; i++){int temp;cin >> temp;int K = 1;int remainder = temp % M;while( array[remainder] != 10000 && array[remainder] != temp ){//如果是相同的元素則直接輸出其在數組中的下標remainder = (temp + K)%M;K++;}K = 1;//為下次沖突做準備array[remainder] = temp;if( i != N - 1)cout << remainder << ' ';elsecout << remainder; } }//4 5 //0 15 61 20四:失敗碼
最近老這樣,這個是我第一次寫的碼,測試數據沒問題,就是超時了
#include<bits/stdc++.h> using namespace std;int main(){int N,M;int flag = 0;cin >> N >> M;vector<int>v1(M);vector<int>v2;for( int i = 0; i < M; i++ ){v1[i] = -1;}for( int i = 0; i < N; i++ ){int temp;cin >> temp;int K = 1;int remainder = temp%M;if( v1[remainder] == -1 )v1[remainder] = temp;else if (v1[remainder] != temp){while( remainder < M ){remainder = (temp + K)%M;K++;}}v1[remainder] = temp;if( i != N -1 ){cout << remainder << ' ';}elsecout << remainder;} }//5 5 //24 15 61 88 15加油BOY!
總結
以上是生活随笔為你收集整理的7-42 整型关键字的散列映射 (25 分)(思路加详解)兄弟们 来呀 写题呀的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 平板只有iPad和其他为什么平板只有ip
- 下一篇: 消息称中国特供版英伟达 H20 AI 芯