博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
魔数常量
阅读量:6677 次
发布时间:2019-06-25

本文共 450 字,大约阅读时间需要 1 分钟。

 

 unsigned long hash_long(unsigned long val, unsigned int bits) 

   { 
        unsigned long hash=val *0x9e370001UL; 
        return hash>>(32-bits); 
   } 
    0x9e370001=2 654 404 609=2^31+2^29-2^25+2^22-2^19-2^16+1. 
    是接近黄金比例的2^32的一个素数。(也称为 “魔数常量”) 

也许你会想常量 0x9e370001(=2654 404 609)究竟是怎么得出来的。这种散列函数是基于表索引乘于一个适当的大数,于是结果溢出,就把留在32位变量中的值作为模数操作的结果。Knuth建议,要得到满意的结果,将2^32做黄金分割,这个大数是最接近黄金分割的素数。

2654 404 609就是接近2^32*(5开方-1)/2的一个素数,这个数可以方便地通过加运算和位移运算得到,因为等于:2^31+2^29-2^25+2^22-2^19-2^16+1.

转载地址:http://wfgxo.baihongyu.com/

你可能感兴趣的文章
Javascript图片轮播
查看>>
java 实现七大基本排序算法
查看>>
Single Number
查看>>
bat批量重命名文件
查看>>
Java使用对象流读取文件的问题
查看>>
Sublime Text 3 安装插件管理 Package Control
查看>>
移动web图片加载完获取img宽高
查看>>
线段树入门
查看>>
AngularJs的UI组件ui-Bootstrap分享(七)——Buttons和Dropdown
查看>>
牛客小白月赛14 -G (筛法)
查看>>
Java内存模型(JMM)
查看>>
守护进程
查看>>
mongodb之 oplog 日志详解
查看>>
Project Euler Problem 32 Pandigital products
查看>>
HDU1205 吃糖果【水题】
查看>>
扩展欧几里得算法与模乘逆元的程序
查看>>
《转》对数组的一些理解
查看>>
js 原型链解密
查看>>
React-Native-Android-Studio整合开发+环境配置+官方实例
查看>>
System.out.println()的含义
查看>>