第6章 散列查找 —— 6.1 散列函数的构造方法

来源:互联网 发布:如何查看linux系统版本 编辑:程序博客网 时间:2024/05/21 17:41

散列查找的基本概念

  • 散列(Hashing)是一种重要的查找方法。“存储位置=h(key)”。在查找某数据对象时,由函数h对给定值key计算出地址,将key与该地址单元中数据对象关键字进行比较,确定查找是否成功。因此,散列法又称为“关键字-地址转换法”。
  • 散列方法中使用的计算函数称为散列函数(也称哈希函数),按这个思想构造的表称为散列表,所以它也是一种存储方法。

散列函数——位移映射

int Hash(const char * Key, int TableSize){    unsigned int H = 0;/* 散列函数值,初始化为0 */    while(* Key != '0')/* 位移映射 */        H = (H << 5) +* Key++;    return H % TableSize;}

分析:

  1. 该函数遇到的主要问题是,当n太大时(例如关键词是一段邮寄地址所组成的字符串),前面若干位字符可能被左移出界,而起作用的只有最后几位字符。
  2. 一种解决办法是不使用整个字符串,而是从中选择若干位有代表性的字符进行映射,比如字符串长度大于12的时候,仅选取奇数位置上的字符来实现散列函数。