Time33算法

简介:

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


目录
相关文章
|
存储 Linux 网络安全
如何使用iptables在Linux中进行流量转发?
如何使用iptables在Linux中进行流量转发?
2091 0
如何使用iptables在Linux中进行流量转发?
|
6月前
|
安全 Java API
Java 17 + 特性与现代开发技术实操应用详解
本指南聚焦Java 17+最新技术,涵盖模块化开发、Record类、模式匹配、文本块、Stream API增强、虚拟线程等核心特性,结合Spring Boot 3与Micronaut框架实战。通过实操案例解析现代Java开发技术栈,包括高性能并发编程、GraalVM原生编译及开发工具链配置。同时梳理面试高频考点,助力掌握Java新特性和实际应用,适合学习与项目实践。代码示例丰富,附带完整资源下载链接。
468 0
|
10月前
|
缓存 网络协议 Java
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
324 0
|
存储 缓存 网络安全
Git(1) 常见问题及解决办法_详细版
Git(1) 常见问题及解决办法_详细版
1890 2
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
资源调度 分布式计算 Hadoop
什么是YARN?
【8月更文挑战第13天】
1425 3
|
存储 缓存 Java
|
关系型数据库 MySQL
MySQL毫秒数自动四舍五入了解一下
最近在项目中看到一个问题,就是某个时间通过代码赋值毫秒数,然后再入库MySQL,查询MySQL发现竟然时间的日期变了,究竟是什么原因导致的?让我们来一探究竟。
MySQL毫秒数自动四舍五入了解一下
|
算法 Java
Java中常用hash算法总结
Java中常用hash算法总结
263 0
|
缓存 安全 Ubuntu
基于Alpine构建轻量级带有cURL功能的Docker镜像
基于Alpine构建轻量级带有cURL功能的Docker镜像
基于Alpine构建轻量级带有cURL功能的Docker镜像