Time33是字符串哈希函数,现在几乎所有流行的HashMap都采用了DJB Hash Function,俗称“Times33”算法。Times33的算法很简单,就是不断的乘33。

c语言版本

#include "stdio.h"

unsigned int time33(char *);
int main(){
char str[3] = "c语言";
int res; res = time33(str);
printf("%d", res);
} /**
* time33算法
*/
unsigned int time33(char *str){
unsigned int hash = 5381;
while(*str){
hash += (hash << 5 ) + (*str++);
}
return (hash & 0x7FFFFFFF);
}

JAVA版本

public String time33(String skey) {
if (skey == null) return null;
int hash = 5381;
for (int i = 0, len = skey.length(); i < len; ++i) {
int cc = skey.charAt(i);
hash += (hash << 5) + cc;
}
hash &= 0x7fffffff;
return String.valueOf(hash);
}

Javascript版本

//哈希time33算法
function time33(str){
for(var i = 0, len = str.length,hash = 5381; i < len; ++i){
hash += (hash << 5) + str.charAt(i).charCodeAt();
};
return hash & 0x7fffffff;
};

PHP版本

<?php
function myHash($str) {
// hash(i) = hash(i-1) * 33 + str[i]
$hash = 5381;
$s = md5($str); //相比其它版本,进行了md5加密
$seed = 5;
$len = 32;//加密后长度32
for ($i = 0; $i < $len; $i++) {
// (hash << 5) + hash 相当于 hash * 33
//$hash = sprintf("%u", $hash * 33) + ord($s{$i});
//$hash = ($hash * 33 + ord($s{$i})) & 0x7FFFFFFF;
$hash = ($hash << $seed) + $hash + ord($s{$i});
} return $hash & 0x7FFFFFFF;
}

为什么初始值是5381?

5381(001 010 100 000 101),据说hash后的分布更好一些。

Magic Constant 5381:
1. odd number
2. prime number
3. deficient number

参考

CSRF防御 - 为程序员服务 http://ju.outofmemory.cn/entry/75798

PHP: 深入了解一致性哈希 - 陈一回的个人页面 - 开源中国社区

http://my.oschina.net/goal/blog/203593?p=1

Time33算法的更多相关文章

  1. Hash散列算法 Time33算法

    hash在开发由频繁使用.今天time33也许最流行的哈希算法. 算法: 对字符串的每一个字符,迭代的乘以33 原型: hash(i) = hash(i-1)*33 + str[i] ; 在使用时.存 ...

  2. hash算法-time33算法

    http://my.oschina.net/freegeek/blog/325531 http://www.cnblogs.com/napoleon_liu/articles/1911571.html ...

  3. 从PHP底层源码去深入理解数组,并用C模拟PHP关联数组(原创)

    PHP是一门入门容易,使用范围广泛的语言,以其灵活性以及web后端开发被很多人熟知,也被很多人戏称“PHP是世界上最好的语言”.本人是一名“忠实”的PHPer,相信用过PHP的程序员都会体会到PHP数 ...

  4. 通用js函数集锦<来源于网络> 【二】

    通用js函数集锦<来源于网络> [二] 1.数组方法集2.cookie方法集3.url方法集4.正则表达式方法集5.字符串方法集6.加密方法集7.日期方法集8.浏览器检测方法集9.json ...

  5. JS方法集

    数组方法集 Angela.array = { //# 数组方法 // index, 返回位置! 不存在则返回 -1: index: function (t, arr) { //# 返回当前值所在数组的 ...

  6. php Hash Table(二) Hash函数

    哈希表最关键的几个方面有: 通过key访问(通过哈希函数计算出key) 映射到数据结构中(哈希表本身的存储结构) 映射的处理(冲突或者碰撞检测和处理函数) 理解PHP的哈希算法 一般来说对于整形索引进 ...

  7. javascript常用知识点集

    javascript常用知识点集 目录结构 一.jquery源码中常见知识点 二.javascript中原型链常见的知识点 三.常用的方法集知识点 一.jquery源码中常见的知识点 1.string ...

  8. PHP7中的数据类型

    PHP中变量名→zval,变量值→zend_value.其变量内存是通过引用计数管理的,在PHP7中引用计数在value结构中. 变量类型: 头文件在PHP源码 /zend/zend_types.h ...

  9. 数据结构之哈希(hash)表

    最近看PHP数组底层结构,用到了哈希表,所以还是老老实实回去看结构,在这里去总结一下. 1.哈希表的定义 这里先说一下哈希(hash)表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过 ...

随机推荐

  1. 大数据通过PHP快速插入MYSQL的方法

    如果您的mysql是通过brew安装的,那么请 vi /usr/local/Cellar/mysql/5.6.23/my.cnf 将 max_allowed_packet = 64M 写入保存并重启m ...

  2. sikuli实战记录

    最近,为了解放运营人力,需要对某国企的系统进行自动化操作.该系统使用的是https,需要加载证书,而且非得用IE才行,firefox无法正常的加载证书.而selenium启动的IE是纯净的,不会加载任 ...

  3. 《UML大战需求分析》阅读笔记6

    流程分析三剑客之总结 顺序图,活动图相类似表示活动,状态机图表示状态.分析特点: 顺序图: 强调角色之间的交互,信息明确: 从上到下,从左到右,按时间顺序: 不适合表达复杂特殊情况(循环分支,条件分支 ...

  4. Smarty缓存的5个知识点

    (1)页面缓存:整个页面全局的缓存 需要4个步骤: ①开启缓存  $smarty->caching = true; ②设置缓存的生命周期  $smarty->cache_lifetime ...

  5. Apache连接PHP后无法启动问题解决思路

    问题:apache之前正常,连接配置完PHP后无法启动,用apache Test Configration测试后报错形式为: Cannot load D:/php/php5apache2_2.dll ...

  6. Object-C内存管理的理解总结

    今天看到了OC的内存管理这块,觉得很亲切. 自己的习惯是尽量自己掌控程序的空间和时间,有点强迫症的感觉.用C和C++做项目的时候,时时刻刻都在操心这new和delete的配对使用和计数,学习stl和b ...

  7. 简单BigDecimal运算精度

    项目中遇到了数值运算,如网上所写的,一般有这几个方法: /** * 提供精确的加法运算. * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ publ ...

  8. vim : 依赖: vim-common (= 2:7.3.429-2ubuntu2.1) 但是

    Ubuntu 12.10 安装vim出错[日期:2013-01-18] 来源:Linux社区 作者:Cubernet [字体:大 中 小] 在Ubuntu 12.10中安装vim时出现了如下提示:正在 ...

  9. 使用SQL语句逐条更新每条记录

    有些时候,我们希望同时更新表中的多条记录,但更新的值不一样. declare @i int declare @j int declare @phone varchar(20) set @j=1 sel ...

  10. Cannot refer to an instance field pageTitle while explicitly invoking a cons

    当下面这样时在第7行会提示:Cannot refer to an instance field pageTitle while explicitly invoking a cons public cl ...