数据结构与算法分析-C++描述 第5章 哈希

1.散列

以执行插入,删除和查找的数据结构,但是不能求最值,也不能排序。
键:查找的标准。
设表的大小为size(),则索引从0变化到size()-1。
散列函数:将每个键映射到唯一一个0-size()-1中的数的函数。
冲突:两个键散列到同一个值。
好的散列:保证表的大小为素数,,这样键的分布比较均匀。
对于键是字符串的散列:
将字符串的ASCII码求和,再对size()取模。当表很大而键的字符数很小时,键主要集中于散列表的前半部分。
散列不一定把key全用上,假设键至少有3个字符, ,这种方法叫进制哈希。
,将key映射成一个多项式。

int hash(const string & key, int tablesize) {
    int hashval = 0;
    for (int i = 0; i < key.size(); i++)
        hashval = 37 * hashval + key[i];
    hashval %= tablesize;
    if (hashval < 0)hashval += tablesize;//溢出
    return hashval;
}

2.解决冲突的方法

先欠着,详见洛谷例题。

你可能感兴趣的:(数据结构与算法分析-C++描述 第5章 哈希)