PTA 7-17 字串關鍵字的雜湊對映
給定一系列由大寫英文字母組成的字串關鍵字和素數P,用移位法定義的雜湊函式(將關鍵字Key中的最後3個字元對映為整數,每個字元佔5位;再用除留餘數法將整數對映到長度為P的散列表中。例如將字串AZDEG
插入長度為1009的散列表中,我們首先將26個大寫英文字母順序對映到整數0~25;再通過移位將其對映為3;然後根據表長得到,即是該字串的雜湊對映位置。
發生衝突時請用平方探測法解決。
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <string> #include <map> using namespace std; const int maxn = 1e6; bool vis[maxn]; string s; int n, p; map<string, int> m; int main() { scanf("%d %d", &n, &p); memset(vis, false, sizeof(vis)); for (int i = 1; i <= n; i++) { cin >> s; int len = s.size(); int x = 0; if (len == 1) x = (s[0]-'A'); else if (len == 2) x = 32*(s[0]-'A')+(s[1]-'A'); else { for (int j = 3; j >= 1; j--) { int t = len - j; x = x * 32 + s[t] - 'A'; } } x = x % p; if (m[s] || !vis[x]) { m[s] = x; vis[x] = true; cout << x; } else { int y; for (int j = 1; j*j < maxn; j++) { y = (x+j*j) % p; if (!vis[y]) { vis[y] = true; m[s] = y; printf("%d", y); break; } y = (x-j*j+p) % p; if (!vis[y]) { vis[y] = true; m[s] = y; printf("%d", y); break; } } } if (i < n) cout << " "; else printf("\n"); } return 0; }
相關推薦
PTA 7-17 字串關鍵字的雜湊對映
給定一系列由大寫英文字母組成的字串關鍵字和素數P,用移位法定義的雜湊函式(將關鍵字Key中的最後3個字元對映為整數,每個字元佔5位;再用除留餘數法將整數對映到長度為P的散列表中。例如將字串AZDEG
PTA 7-42 整型關鍵字的雜湊對映(手寫雜湊表的線性探測法)
本題考點: 整型雜湊表的線性探測法 給定一系列整型關鍵字和素數P,用除留餘數法定義的雜湊函式將關鍵字對映到長度為P的散列表中。用線性探測法解決衝突。 輸入格式: 輸入第一行首先給出兩個正整數N(≤1000)和P(≥N的最小素數),分別為待插入的關鍵字總數、以及散列表的長度。第二行給出N個整型關鍵字。數字
7-11 整型關鍵字的雜湊對映 (25 分)
給定一系列整型關鍵字和素數P,用除留餘數法定義的雜湊函式將關鍵字對映到長度為P的散列表中。用線性探測法解決衝突。 輸入格式: 輸入第一行首先給出兩個正整數N(≤1000)和P(≥N的最小素數),分別為待插入的關鍵字總數、以及散列表的長度。第二行給出N個整型關鍵字。數字間以空格分隔。 輸出
字串關鍵字的雜湊對映(25 分)
這個題目,資料結構的課本上是有的,當你發生衝突的時候,是可以用平方探測法解決的 這個題目就是需要注意一下,當你需要減的時候,需要防止一下負數取模的 給定一系列由大寫英文字母組成的字串關鍵字和素數P,用移位法定義的雜湊函式(將關鍵字Key中的最後3個字元對映為整數,每個
【LeetCode】 705. 706. 設計雜湊對映\集合
1.題目 705: 不使用任何內建的雜湊表庫設計一個雜湊集合 具體地說,你的設計應該包含以下的功能 add(value):向雜湊集合中插入一個值。 contains(value) :返回雜湊集合中是否存在這個值。 remove(value):將給定值從雜湊集合中刪除。如果
leetcode 706. 設計雜湊對映(python)
不使用任何內建的雜湊表庫設計一個雜湊對映 具體地說,你的設計應該包含以下的功能 put(key, value):向雜湊對映中插入(鍵,值)的數值對。如果鍵對應的值已經存在,更新這個值。 get(key):返回給定的鍵所對應的值,如果對映中不包含這個鍵,返回-1。 remov
Leetcode706.Design HashMap設計雜湊對映
不使用任何內建的雜湊表庫設計一個雜湊對映 具體地說,你的設計應該包含以下的功能 put(key, value):向雜湊對映中插入(鍵,值)的數值對。如果鍵對應的值已經存在,更新這個值。 get(key):返回給定的鍵所對應的值,如果對映中不包含這個鍵,返回-1。 rem
Redis記憶體資料庫命令大全——字串、雜湊
個人原創,簡約實戰無廢話,歡迎大家轉載,不足之處期待您在留言處指出,謝謝! 在window上將redis安裝到服務中,redis-server --service-install redis.windows-service.conf 一 字串型別鍵值操作命令 2 glob
redis 系列9 物件型別(字串,雜湊,列表,集合,有序集合)與資料結構關係
原文: redis 系列9 物件型別(字串,雜湊,列表,集合,有序集合)與資料結構關係 一.概述 在前面章節中,主要了解了 Redis用到的主要資料結構,包括:簡單動態字串、連結串列(雙端連結串列)、字典、跳躍表、 整數集合、壓縮列表(後面再瞭解)。Redis沒有直接使用這些資料結構來實現鍵
Design HashMap 設計雜湊對映
不使用任何內建的雜湊表庫設計一個雜湊對映 具體地說,你的設計應該包含以下的功能 put(key, value):向雜湊對映中插入(鍵,值)的數值對。如果鍵對應的值已經存在,更新這個值。 get(key):返回給定的鍵所對應的值,如果對映中不包含這個鍵,返回-1。 re
985F Isomorphic Strings(字串Hash雜湊)
F. Isomorphic Strings time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard outpu
LeetCode 706.設計雜湊對映(Design HashMap)
不使用任何內建的雜湊表庫設計一個雜湊對映 具體地說,你的設計應該包含以下的功能 put(key, value):向雜湊對映中插入(鍵,值)的數值對。如果鍵對應的值已經存在,更新這個值。 get(key):返回給定的鍵所對應的值,如果對映中不包含這個鍵,返回-1。
java 弱雜湊對映表WeakHashMap原理
弱雜湊對映表的原理其實很好理解,首先我們要知道HashMap的原理。如果我們將一個物件a以及他的引用A作為一個key值關聯某個Value值後put入HashMap中,那麼這個a物件的引用不僅僅有A,而且有一個HashMap中持有的引用,一共兩個引用。WeakHa
LeetCode 706:Design HashMap 實現一個簡單的雜湊對映
題目描述: Design a HashMap without using any built-in hash table libraries. To be specific, your design should include these function
一個字串的雜湊函式
雜湊函式一直對我來說都是比較神祕的東東,其實並不複雜,但是一個想要一個好的雜湊函式不簡單。 這個雜湊函式,這是來自於雲風的部落格,來自於 Lua 的實現,說起他,一個人向中國推薦了 Lua 指令碼,值得佩服。 unsigned long hash(con
雜湊題目練習*****7-17 電話聊天狂人(25 分)
傳送門 給定大量手機使用者通話記錄,找出其中通話次數最多的聊天狂人。 輸入格式: 輸入首先給出正整數N(≤105),為通話記錄條數。隨後N行,每行給出一條通話記錄。簡單起見,這裡只列出撥出
[SCOI2007]壓縮(動態規劃,區間dp,字串雜湊)
[SCOI2007]壓縮 狀態:設\(dp[i][j]\)表示前i個字元,最後一個\(M\)放置在\(j\)位置之後的最短字串長度. 轉移有三類,用刷表法來實現. 第一種是直接往壓縮串後面填字元,這樣就是: \[dp[i+1][j]=min(dp[i+1][j],dp[i][j]+1)\] 另外一種
C++【模板】字串雜湊
介紹:關於字串hash,一句話概括,就是把字串有效的轉化為一個整數 hash[i]=(hash[i-1]*p+idx(s[i]))%mod for example:取p=13, mod=101,求abc對應的整數 hash[0]=1; 表示a對映1。 hash[1]=(hash[0]
51Nod1553 週期串查詢 字串 雜湊 線段樹
原文連結https://www.cnblogs.com/zhouzhendong/p/51Nod1553.html 題目傳送門 - 51Nod1553 題意 有一個串只包含數字字元。串的長度為n,下標從1開始。 有兩種操作方式: 1 l r c (1≤l≤r≤n, c是數字字元),表示將
(集合框架)字串物件的雜湊值
物件的雜湊值,是一個和普通的十進位制值,物件的雜湊值,源自於父類Object String類繼承Object類,重寫了hashCode方法,所以它有了自己算雜湊值的方法 下面關注String類繼承Object類,重寫父類的方法hashCode