zoukankan      html  css  js  c++  java
  • 各种字符串hash

    unsigned int SDBMHash(char *str){
     	unsigned int hash = 0; 
     	while (*str) { 
     	// equivalent to:
     	 	hash = 65599*hash + (*str++);
     	 	 hash = (*str++) + (hash << 6) + (hash << 16) - hash; 
     	  } 
        return (hash & 0x7FFFFFFF);
        } 
    // 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) << (BitsInUnignedInt - 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);
    } 
    // 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);
    }


  • 相关阅读:
    AppServ设置虚拟主机 及域名连接
    PHPCMS v9 实现首页,列表页,内容页调用点击量方法
    phpcms v9 后台首页 去掉团队信息等版权
    phpcms v9 在当前栏目下获取父栏目与当前栏目的名称与连接
    不是技术牛人,如何拿到国内IT巨头的Offer
    解决phpcms V9缩略图模糊的方法
    apache、nginx、iis 全球分布
    获取屏幕宽度、浏览器宽度、网页高度,宽度信息
    21个适合扁平化设计的创意超链接效果
    javascript模拟鼠标双击事件
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3072138.html
Copyright © 2011-2022 走看看