GESP8 · 数据处理

哈希

把"一个字符串/对象"压成"一个数",从而能快速比较、去重、查表。字符串哈希:h = h*131 + 字符

一、互动演示:字符串哈希怎么算

逐个字符把字符串"卷"成一个数(多项式哈希,底 131)。输入一个短串,点“下一字符”。

二、为什么有用 + STL 偷懒法

typedef unsigned long long ULL;     // 自然溢出当取模,省事
ULL myHash(string s){
    ULL h = 0;
    for (char c : s) h = h * 131 + c;   // 多项式哈希
    return h;
}
// 统计不同字符串个数:哈希后排序去重
sort(a.begin(), a.end());
int cnt = 1; for (int i = 1; i < n; i++) if (a[i] != a[i-1]) cnt++;

// 偷懒神器:直接用 STL
unordered_map<string,int> mp;  mp[s]++;   // 平均 O(1)

哈希冲突:不同串可能算出同一个数。竞赛常用"双哈希"或大质数底降低概率。日常用 unordered_map 即可。