zoukankan      html  css  js  c++  java
  • Hash表

    1.哈希表最重要的作用是实现O(1)效率的查找,首先有一个哈希函数确定元素在表中的位置;其次是解决冲突,其实现主要有两种:

    (1)链地址法:数组+链表 
    (2)探测法(开放地址法,线性、二次):哈希函数为 H[i](x)= (hash(x)+f(i)) mod TableSize 。H[i](x)为表中位置, f(i)为解决冲突的函数   f(0)=0,线性探测f(i)=i。
    2.链地址哈希表装填因子一般接近1。链地址法当装载因子超过0.5时,性能急速下降,此时可以考虑扩展哈希表。其他还有布谷鸟散列和跳房子散列。
    3.通用散列函数:Ha,b(x)=((ax+b) mod p) mod M 其中p为素数,M为表大小,0 <a,b<=p-1。
    4.散列表不能直接找出最小、最大元素,跟排序相关的数据最好用二叉查找树(输入数据可能有序的时候一般不用,效率很差),不需要有序或者对输入数据有序存有怀疑可以选用哈希表。
    5.对于任何带有实际名字而非数字的节点的图论问题优先考虑哈希表。
    6.String类型的哈希值为各个字符的ASCII码值乘以37后累加而成,因为String对象是常量,所以进行再散列时我们可以避免昂贵的重复计算哈希函数,这个技巧叫做闪存散列代码。
    三年程序员,专注语音文本分析、大数据挖掘、预训练模型及知识图谱相关技术的探索
  • 相关阅读:
    nyoj 题目19 擅长排列的小明
    nyoj 题目20 吝啬的国度
    nyoj 题目17 单调递增最长子序列
    nyoj 题目14 会场安排问题
    nyoj 题目12 喷水装置(二)
    nyoj 题目7 街区最短路径问题
    nyoj 8 一种排序
    nyoj 题目6 喷水装置
    nyoj 题目5 Binary String Matching
    nyoj 1282 部分和问题
  • 原文地址:https://www.cnblogs.com/jetHu/p/8503808.html
Copyright © 2011-2022 走看看