• 构造哈希表之二次探测法——线性探测:key1:hash(key)+0 key2:hash(key)+1 key3:hash(key)+2 二次探测:key1:hash(key)+0 key2:hash(key)+1^2 key3:hash(key)+2^2 开链法:+链表


    HashTable-散列表/哈希表

    是根据关键字(key)而直接访问在内存存储位置的数据结构。

    它通过一个关键值的函数将所需的数据映射到表中的位置来访问数据,这个映射函数叫做散列(哈希)函数,存放记录的数组叫做散列表。

    构造哈希表的几种方法
    1.直接定址法(取关键字的某个线性函数为哈希地址)
    2.除留余数法(取关键值被某个不大于散列表长m的数p除后的所得的余数为散列地址)
    3.平方取中法
    4.折叠法
    5.随机数法
    6.数学分析法
    常用方法是直接定址法和除留余数法

    哈希冲突/哈希碰撞
    不同的Key值经过哈希函数Hash(Key)处理以后可能产生相同的值哈希地址,我们称这种情况为哈希冲突。任意的散列函数都不能避免产生冲突。

    处理哈希碰撞的方法
    若key1,key2,key3产生哈希冲突(key1,key2,key3值不相同,映射的哈希地址同为key),用以下方法确定它们的地址

    1.闭散列法
    1)线性探测
    若当前key与原来key产生相同的哈希地址,则当前key存在该地址之后没有存任何元素的地址中
    key1:hash(key)+0
    key2:hash(key)+1
    key3:hash(key)+2
    例如:

    2)二次探测
    若当前key与原来key产生相同的哈希地址,则当前key存在该地址后偏移量为(1,2,3...)的二次方地址处
    key1:hash(key)+0
    key2:hash(key)+1^2
    key3:hash(key)+2^2
    例如:


    2.开链法(哈希桶)
    哈希表中保存包含每个key值的节点,每个节点有一个_next的指针,指向产生哈希冲突的key的节点
    例如:

    具体实现方式请看下一篇博客,博客链接:http://blog.csdn.net/xyzbaihaiping/article/details/51610944

  • 相关阅读:
    Unique constraint on single String column with GreenDao2
    Unique constraint on single String column with GreenDao
    将String转换成InputStream
    TypeError: unsupported operand type(s) for +: 'float' and 'str'
    Could not find private key file: AuthKey_NCD8233CS5.p8
    【Winows10】添加桌面小工具(在桌面显示时钟,日历)
    【Windows10】禁用开机启动项
    SQL如何查询出某一列中不同值出现的次数?
    使用 管理项目依赖
    Warning: Python 3.6 was not found on your system…
  • 原文地址:https://www.cnblogs.com/bonelee/p/12566282.html
Copyright © 2020-2023  润新知