zoukankan      html  css  js  c++  java
  • 线性探测再散列

     https://blog.csdn.net/qq_19446965/article/details/102290770

    哈希表又称散列表。哈希表存储的基本思想是:以数据表中的每个记录的关键字 k为自变量,通过一种函数H(k)计算出函数值。把这个值解释为一块连续存储空间(即数组空间)的单元地址(即下标),将该记录存储到这个单元中。在此称该函数H为哈希函数或散列函数。按这种方法建立的表称为哈希表或散列表。

    处理冲突的方法:

    开放寻址法:Hi=(H(key) + di) MOD m, i=1,2,…, k(k<=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列,可有下列三种取法:

    1.di=1,2,3,…, m-1,称线性探测再散列;

    2.di=1^2, -1^2, 2^2,-2^2, 3^2, …, ±(k)^2,(k<=m/2)称二次探测再散列;

    3.di=伪随机数序列,称伪随机探测再散列。

    再散列法:Hi=RHi(key), i=1,2,…,k. RHi均是不同的散列函数,即在同义词产生地址冲突时计算另一个散列函数地址,直到冲突不再发生,这种方法不易产生“聚集”,但增加了计算时间;

    链地址法(拉链法):将所有关键字为同义词的记录存储在同一线性链表中;

    设哈希表长为14,哈希函数是H(key)=key%11,表中已有数据的关键字为15,38,61,84共四个,现要将关键字为49的结点加到表中,用二次探测再散列法解决冲突,则放入的位置是( ) 【南京理工大学 2001 一、15 (1.5分)】

    A.8 B.3 C.5 D.9
    答案为A,为什么我计算出来是D呢?
    我的计算步骤如下:
    15,38,61,84用哈希函数H(key)=key%11计算后得地址:4,5,6,7
    49计算后为5,发生冲突.
    用二次探测再散列法解决冲突:
    1:(key+1^2)%11=(49+1)%11=6,仍然发生冲突.
    2:(key-1^2)%11=(49-1)%11=4,仍然发生冲突.
    3:(key+2^2)%11=(49+4)%11=9,不再发生冲突.
    得出结果为D

  • 相关阅读:
    ntp
    mknod
    timeout/timelimit
    Eclipse 包变成文件夹
    Eclipse 包变成文件夹
    Java生成随机字符串和随即生成10以内的字符串
    Java生成随机字符串和随即生成10以内的字符串
    插入排序
    插入排序
    Java 中基本类型和包装类之间的转换
  • 原文地址:https://www.cnblogs.com/rnanprince/p/11629527.html
Copyright © 2011-2022 走看看