若干经典的字符串哈希函数

暴雪公司关于字符串匹配的hash算法 暴雪公司有个经典的字符串的hash公式       先提一个简单的问题,假如有一个庞大的字符串数组,然后给你一个单独的字符串,让你从这个数组中查找是否有这个字符串并找到它,你会怎么做? 有一个方法最简单,老老实实从头查到尾,一个一个比较,直到找到为止,我想只要学过程序设计的人都能把这样一个程序作出来,但要是有程序员把这样的程序交给用户,我只能用无语来评价,或许它真的能工作,但...也只能如此了。 阅读详情

//  RS Hash Function
 unsigned  int  RSHash( char   * str)
  {
        unsigned  int  b  =   378551 ;
        unsigned  int  a  =   63689 ;
        unsigned  int  hash  =   0 ;

         while  ( * str)
          {
                hash  =  hash  *  a  +  ( * str ++ );
                a  *=  b;
        }
 
         return  (hash  &   0x7FFFFFFF );
}
 
 //  JS Hash Function
 unsigned  int  JSHash( char   * str)
  {
        unsigned  int  hash  =   1315423911 ;

         while  ( * str)
          {
                hash  ^=  ((hash  <<   5 )  +  ( * str ++ )  +  (hash  >>   2 ));
        }
 
         return  (hash  &   0x7FFFFFFF );
}
 
 //  P. J. Weinberger Hash Function
 unsigned  int  PJWHash( char   * str)
  {
        unsigned  int  BitsInUnignedInt  =  (unsigned  int )( sizeof (unsigned  int )  *
 8 );
        unsigned  int  ThreeQuarters     =  (unsigned  int )((BitsInUnignedInt   *   3 )
  /   4 );
        unsigned  int  OneEighth         =  (unsigned  int )(BitsInUnignedInt  /   8 );

        unsigned  int  HighBits          =  (unsigned  int )( 0xFFFFFFFF )  <<  (BitsInU
nignedInt  -  OneEighth);
        unsigned  int  hash              =   0 ;
        unsigned  int  test              =   0 ;

         while  ( * str)
          {
                hash  =  (hash  <<  OneEighth)  +  ( * str ++ );
                 if  ((test  =  hash  &  HighBits)  !=   0 )
                  {
                        hash  =  ((hash  ^  (test  >>  ThreeQuarters))  &  ( ~ HighBits)
);
                }
        }
 
         return  (hash  &   0x7FFFFFFF );
}
 
 //  ELF Hash Function
 unsigned  int  ELFHash( char   * str)
  {
        unsigned  int  hash  =   0 ;
        unsigned  int  x     =   0 ;

         while  ( * str)
          {
                hash  =  (hash  <<   4 )  +  ( * str ++ );
                 if  ((x  =  hash  &   0xF0000000L )  !=   0 )
                  {
                        hash  ^=  (x  >>   24 );
                        hash  &=   ~ x;
                }
        }
 
         return  (hash  &   0x7FFFFFFF );
}
 
 //  BKDR Hash Function
 unsigned  int  BKDRHash( char   * str)
  {
        unsigned  int  seed  =   131 ;  //  31 131 1313 13131 131313 etc..
         unsigned  int  hash  =   0 ;

         while  ( * str)
          {
                hash  =  hash  *  seed  +  ( * str ++ );
        }
 
         return  (hash  &   0x7FFFFFFF );
}
 
 //  SDBM Hash Function
 unsigned  int  SDBMHash( char   * str)
  {
        unsigned  int  hash  =   0 ;

         while  ( * str)
          {
                hash  =  ( * str ++ )  +  (hash  <<   6 )  +  (hash  <<   16 )  -  hash;
        }
 
         return  (hash  &   0x7FFFFFFF );
}
 
 //  DJB Hash Function
 unsigned  int  DJBHash( char   * str)
  {
        unsigned  int  hash  =   5381 ;

         while  ( * str)
          {
                hash  +=  (hash  <<   5 )  +  ( * str ++ );
        }
 
         return  (hash  &   0x7FFFFFFF );
}
 
 //  AP Hash Function
 unsigned  int  APHash( char   * str)
  {
        unsigned  int  hash  =   0 ;
         int  i;

         for  (i = 0 ;  * str; i ++ )
          {
                 if  ((i  &   1 )  ==   0 )
                  {
                        hash  ^=  ((hash  <<   7 )  ^  ( * str ++ )  ^  (hash  >>   3 ));
                }
                 else
                   {
                        hash  ^=  ( ~ ((hash  <<   11 )  ^  ( * str ++ )  ^  (hash  >>   5 )));
                }
        }
 
         return  (hash  &   0x7FFFFFFF );
}
 比较经典的字符串hash就这些了吧,"ELF Hash Function" <-这个比较常用..

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/jeven2005/archive/2007/03/19/1533523.aspx

CPU设计实战:Loongarch版 lab6--20条指令单周期CPU 这个debug卡我时间最长的就是通用寄存器的写使能信号,当时一直没找到,甚至把golden—trace生成了一遍又一遍,对照test,检查了各种,卡了很长时间,我都以为是我之前哪一步搞错了,或者环境什么的,但是一步步做下来并没有,并且“机器永远是对的”让我终于查到了错。debug到一半才想起来写个博客,就不写过程了,下个lab再写过程。下面是两个模块的代码,运行已通过仿真验证。其他的bug就还好,如果认真跟着。就能马上找出来,,上面的每一句话都很重要。走,按逻辑检查并且查。 阅读详情

相关推荐

从零开始掌握OBD-II:汽车诊断开发的核心技术与实战解析

本文深入解析OBD-II汽车诊断系统的核心技术,包括ECU通信协议、故障码解析及诊断工具开发实战。通过详细的协议分析和代码示例,帮助开发者快速掌握汽车诊断开发技能,实现从零到精通的进阶。特别适合从事汽车电子开发和OBD检测的技术人员参考学习。

weixin_42528780的博客 438

几个比较著名的哈希算法

class GeneralHashFunctionLibrary{   public long RSHash(String str)   {      int b     = 378551;      int a     = 63689;      long hash = 0;      for(int i = 0; i       {         hash = hash * a +

nieguizhi的专栏 916

基于IMX429-IMX430-IMX432-IMX437系列传感器的SLVS-MIPI桥接方案设计与实现

本文详细介绍了针对索尼IMX429、IMX430、IMX432及IMX437系列传感器的SLVS-MIPI桥接方案设计与实现。针对工业视觉、车载摄像头等应用中主流SoC仅支持MIPI接口的痛点,提出基于FPGA(如Lattice Crosslink-NX)的透传桥接方案,将传感器输出的SLVS信号无损转换为MIPI CSI-2信号,确保数据完整性与低延迟,并探讨了硬件选型、逻辑设计及多传感器兼容性等关键问题。

weixin_29230901的博客 461

经典编程之字符串篇

标准strcpy函数功能:复制字符串参数:目的字符串指针,源字符串指针(输入参数)返回:目的字符串指针char * strcpy( char *strDest, const char *strSrc )  //将源字符串加const,表明其为输入参数{ assert( (strDest != NULL) && (strSrc != NULL) ); //对源地址和目的地址加非0断言

浩瀚星空,法力无边;其大无外,其小无内。 1149

从零开始玩转机械臂:用Matlab+Robotics Toolbox实现四自由度机械臂运动仿真

本文详细介绍了如何利用Matlab及其Robotics Toolbox工具箱,从零开始构建并仿真一个四自由度机械臂。通过D-H参数建模、正向运动学验证、交互式操控以及轨迹规划等实践步骤,帮助初学者在虚拟环境中直观理解机器人运动学核心概念,为后续硬件实现奠定坚实基础。

weixin_29055699的博客 324

Mac新手必看:用Homebrew安装wget的保姆级教程,附常见报错一键修复

本文为Mac新手提供使用Homebrew安装wget的详细教程,涵盖从Homebrew安装到wget基础使用的全流程,并附常见报错一键修复方案。通过本指南,用户可轻松掌握命令行下载工具wget的安装与使用技巧,解决Mac环境下资源下载的各种问题。

weixin_30635053的博客 366

浅谈算法和数据结构: 十一 哈希表

在前面的系列文章中,依次介绍了基于无序列表的顺序查找,基于有序数组的二分查找,平衡查找树,以及红黑树,下图是他们在平均以及最差情况下的时间复杂度: 可以看到在时间复杂度上,红黑树在平均情况下插入,查找以及删除上都达到了lgN的时间复杂度。 那么有没有查找效率更高的数据结构呢,答案就是本文接下来要介绍了散列表,也叫哈希表(Hash Table) 什么是哈希表 哈希表就是一种以 键-值(k...

weixin_34234823的博客 1660

英飞凌TC3xx--深度手撕HSM安全启动(三)--TC3xx HSM系统架构

TC3xx的HSM内核是一颗32位的ARM Cortex M3,主频可达100MHz,支持对称算法AES128、非对称算法PKC(Public Key Crypto) ECC256、Hash SHA2,以及TRNG(真随机数生成)。

认真搞搞汽车MCU 5742

mysql 字符串的hash函数_若干经典的字符串哈希函数

2经典字符串Hash函数介绍作者阅读过大量经典软件原代码,下面分别介绍几个经典软件中出现的字符串Hash函数。2.1PHP中出现的字符串Hash函数static unsigned long hashpjw(char *arKey, unsigned int nKeyLength){unsigned long h = 0, g;char *arEnd=arKey+nKeyLength;while (...

weixin_39898550的博客 472

openHarmony之AI Engine:万字讲解如何在应用、开发板上接入AI大模型调用

本文章介绍如何在 OpenHarmony 开发板上集成和部署各类 AI 大模型,实现终端直接聊天功能,并为语音助手、智能机器人等应用提供 AI 接口支持。

m0_67505153的博客 619

ximalaya 新xm-sign逆向思路

本文主要介绍目标网站新xm-sign值的逆向思路。仅代表个人理解,如有其他建议可在评论区沟通。声明仅仅记录一下自己的学习方法,不作为其他参考、更不作为商业用途。如有侵犯请联系本人删除。

weixin_66580433的博客 2017

若干经典的字符串哈希函数(转)

// RS Hash Functionunsigned int RSHash( char * str){    unsigned int b = 378551 ;    unsigned int a = 63689 ;    unsigned int hash = 0 ;    while ( * str)    {        hash = hash * a + ( * str ++ );  

我的程序世界 1213

电路中的DGND、GROUND、GROUND_REF的区别,VREF、VCC、VDD、VEE和VSS的区别?

DGND是数字地,是数字电路部分的公共基准端,用于连接数字电路的接地。

XU157303764的博客 2338
上一篇: C语言中的运算符 详细说明
下一篇: 哈希函数
pstrunner
博客等级 码龄19年 50粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值