`
plussai
  • 浏览: 88323 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

斐波那契散列

阅读更多

      斐波那契散列法其实是一种特殊的乘法散列,先来看乘法散列.根据算法导论第2版中的定义,构造乘法散列函数包含两个步骤。第一步,用关键字k乘上常数A(0<A<1),并抽取出kA的小数部分。然后,用m乘以这个值,再结果的低。总之,散列函数为h(k)=[m(kA mod 1)]

      一般来说,m取值为2^p,而A的取值为形如s/2^w的分数(w为计算机的字长,int32,long long 64),那么简化之后h(k)=s*k的低w位中的高p位。

      为了得到更好的随即性, knuth认为A去黄金分割数是一个比较理想的值,因此A=0.6180339887....。这就是传说中的斐波那契散列了

      举一个例子,k=123456,m=2^14,w=32,那么,h(k)=(A*2^32*k mod 2^32)/2^14=67.为了计算的简便通常去A*2^w为斐波那契数。w=32  fib(w)=2654435769.............

     演示代码:

 

const unsigned fibonacci=2654435769;
unsigned getHashCode(unsigned n)
{
	unsigned a=(n*fibonacci)>>18;
	return a;	
}

 

值得注意的是代码中n*fibonacci是unsigned型,字长为32,因此计算之后自动取了底32位。

分享到:
评论

相关推荐

    Fibonacci(斐波那契)数列的JAVA解法

    Fibonacci(斐波那契)数列的JAVA解法,包含了斐波那契数列常见问题的一些算法。

    java实现斐波那契数列的3种方法

    主要介绍了java实现斐波那契数列的3种方法,有需要的朋友可以参考一下

    斐波那契

    斐波那契

    Java 面经手册·小傅哥.pdf

    当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、斐波那契(Fibonacci)散列法还有黄金分割点的使用等等。 适合人群 1. 具备一定编程基础,工作1-3年的研发...

    Java 面经手册.docx

    当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、斐波那契(Fibonacci)散列法还有黄金分割点的使用等等。 适合人群 1. 具备一定编程基础,工作1-3年的研发...

    Java 面经手册·小傅哥正版零积分免费下载

    书中内容强调了代码是对数学逻辑的具体实现,包括扰动函数、负载因子、拉链寻址、开放寻址、斐波那契(Fibonacci)散列法等数学知识。编码只是在确定了研发设计后的具体实现,而设计的部分包括数据结构、算法逻辑...

    数据结构之树结构调研资料.pptx

    数据结构,树结构调研,包括查找树之平衡树、堆之斐波那契堆、散列之哈希树、空间数据划分树(Spatial data partitioning tree)之R树的数据结构和性质特点,插入删除等操作

    OpenSAL1.1

    包含算法导论中数据结构:一般堆、二项堆、斐波那契堆、红黑树、通用散列(采用全域散列和完全散列技术)、不相交集合;包含算法导论中的算法:15个常用图论算法、20多个常用代数方面的算法、若干其他算法。包含自己...

    【超全!】图解Java数据结构和算法(共195集)【资料+视频+课件+代码+笔记】

    稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫...斐波那契查找、散列、哈希表、二叉树、二叉树与数组转换、二叉排序树(BST)、AVL树、线索二叉树、赫夫曼树、赫夫曼编码、多路查找树(B树B+树和...

    OpenSAL1.0

    数据结构:一般堆、二项堆、斐波那契堆、红黑树、通用散列(采用全域散列和完全散列技术)、不相交集合、任意维数组、高维对称数组。 图论算法(兼容有向图,无向图):广度和深度优先遍历、确定图是否存在回路、...

    C++开源算法库OpenSAL1.1(Open Standardized Algorithm Library) ——静态链接库

    数据结构:一般堆、二项堆、斐波那契堆、红黑树、通用散列(采用全域散列和完全散列技术)、不相交集合、任意维数组、高维对称数组。 图论算法(兼容有向图,无向图):广度和深度优先遍历、确定图是否存在回路、...

    C++开源算法库OpenSAL1.1(Open Standardized Algorithm Library)——动态链接库

    数据结构:一般堆、二项堆、斐波那契堆、红黑树、通用散列(采用全域散列和完全散列技术)、不相交集合、任意维数组、高维对称数组。 图论算法(兼容有向图,无向图):广度和深度优先遍历、确定图是否存在回路、...

    OpenSAL1.1算法导论开源算法库

    OpenSAL1.1 包含了算法导论中所有数据结构和算法以及其他内容,本资源为该算法库的静态链接库 内容如下(*号表示1.1版本新增内容): 数据结构:一般堆、二项堆、斐波那契堆、红黑树、通用散列(采用全域散列和完全...

    Java数据结构与算法-笔记-代码-课件-资料

    稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、...斐波那契查找、散列、哈希表、二叉树、二叉树与数组转换、二叉排序树(BST)等...

    数据结构与算法分析_Java_语言描述

    4.5.2 展开 4.6 树的遍历 4.7 B树 小结 练习 参考文献 第5章 散列 5.1 一般想法 5.2 散列函数 5.3 分离链接法 5.4 开放定址法 5.4.1 线性探测法 5.4.2 平方探测法 5.4.3 双散列法 5.5 再散列 5.6 可...

    数据结构与算法分析第二版 ---C语言描述(附加答案)

    树总结练习参考文献第5章 散列5.1 一般想法5.2 散列函数5.3 分离链接法5.4 开放定址法5.4.1 线性探测法5.4.2 平方探测法5.4.3 双散列5.5 再散列5.6 可扩散列总结练习参考文献第6章 优先队列(堆)6.1 模型6.2 一些...

    数据结构与算法分析Java语言描述(第二版)

    散列5.1 一般想法5.2 散列函数5.3 分离链接法5.4 不用链表的散列表5.4.1 线性探测法5.4.2 平方探测法5.4.3 双散列5.5 再散列5.6 标准库中的散列表5.7 可扩散列小结练习参考文献第6章 优先队列(堆)6.1 模型6.2 ...

    数据结构与算法分析-Java语言描述(第2版)_2_2

    小结 练习 参考文献第5章 散列 5.1 一般想法 5.2 散列函数 5.3 分离链接法 5.4 不用链表的散列表 5.4.1 线性探测法 5.4.2 平方探测法 5.4.3 双散列 5.5 再散列 5.6 标准库中的散列表 5.7 可...

    数据结构与算法分析-Java语言描述(第2版)_1_2

    小结 练习 参考文献第5章 散列 5.1 一般想法 5.2 散列函数 5.3 分离链接法 5.4 不用链表的散列表 5.4.1 线性探测法 5.4.2 平方探测法 5.4.3 双散列 5.5 再散列 5.6 标准库中的散列表 5.7 可...

Global site tag (gtag.js) - Google Analytics