- 浏览: 309301 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (272)
- java (42)
- c (49)
- 算法 (29)
- 汇编语言 (3)
- 字符集 (3)
- error (3)
- 搜索引擎 (2)
- 互联网 (18)
- linux (12)
- 网络 (20)
- VMWare (1)
- 面试 (7)
- c++ (55)
- 设计模式 (3)
- db (9)
- office (2)
- FS (1)
- rest (3)
- Ajax (2)
- Spring (2)
- Hibernate (3)
- matlab (1)
- load balancing (8)
- 分布式计算 (2)
- 易语言 (1)
- apache tomcat (1)
- 测试 (1)
- 数据结构 (5)
- 数学 (13)
- 服务器 (9)
- 读后感 (4)
- 好书介绍 (1)
- script (3)
- wordpress (2)
- delphi (21)
- pascal (8)
- xml (3)
- 趣味 (1)
- PHP (3)
- python (13)
- DLL (4)
- openGL (8)
- windows (2)
- QT (28)
- django (7)
- jquery (1)
- 数据挖掘 (7)
- nginx (1)
- js (1)
- mac (1)
- hadoop (3)
- 项目管理 (1)
- 推荐系统 (1)
- html (1)
最新评论
-
晴天1234:
related remove:attention.ibus和u ...
UBUNTU的默认root密码是多少,修改root密码 -
美丽的小岛:
美丽的小岛 写道如上配置好就得了。提示没有OpenGl.dll ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
如上配置好就得了。提示没有OpenGl.dll之类的,再增加入 ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
主要是理清哪两个对象之间的关系,是信号与所有槽的关系或者是槽与 ...
QT之DisConnect -
美丽的小岛:
LPCTSTR类型:L表示long指针 这是为了兼容Windo ...
QString与各种字符串之间的转化
/** * Hash算法大全<br> * 推荐使用FNV1算法 * @algorithm None * @author Goodzzp 2006-11-20 * @lastEdit Goodzzp 2006-11-20 * @editDetail Create */ public class HashAlgorithms { /** * 加法hash * @param key 字符串 * @param prime 一个质数 * @return hash结果 */ public static int additiveHash(String key, int prime) { int hash, i; for (hash = key.length(), i = 0; i < key.length(); i++) hash += key.charAt(i); return (hash % prime); } /** * 旋转hash * @param key 输入字符串 * @param prime 质数 * @return hash值 */ public static int rotatingHash(String key, int prime) { int hash, i; for (hash=key.length(), i=0; i<key.length(); ++i) hash = (hash<<4)^(hash>>28)^key.charAt(i); return (hash % prime); // return (hash ^ (hash>>10) ^ (hash>>20)); } // 替代: // 使用:hash = (hash ^ (hash>>10) ^ (hash>>20)) & mask; // 替代:hash %= prime; /** * MASK值,随便找一个值,最好是质数 */ static int M_MASK = 0x8765fed1; /** * 一次一个hash * @param key 输入字符串 * @return 输出hash值 */ public static int oneByOneHash(String key) { int hash, i; for (hash=0, i=0; i<key.length(); ++i) { hash += key.charAt(i); hash += (hash << 10); hash ^= (hash >> 6); } hash += (hash << 3); hash ^= (hash >> 11); hash += (hash << 15); // return (hash & M_MASK); return hash; } /** * Bernstein's hash * @param key 输入字节数组 * @param level 初始hash常量 * @return 结果hash */ public static int bernstein(String key) { int hash = 0; int i; for (i=0; i<key.length(); ++i) hash = 33*hash + key.charAt(i); return hash; } // //// Pearson's Hash // char pearson(char[]key, ub4 len, char tab[256]) // { // char hash; // ub4 i; // for (hash=len, i=0; i<len; ++i) // hash=tab[hash^key[i]]; // return (hash); // } //// CRC Hashing,计算crc,具体代码见其他 // ub4 crc(char *key, ub4 len, ub4 mask, ub4 tab[256]) // { // ub4 hash, i; // for (hash=len, i=0; i<len; ++i) // hash = (hash >> 8) ^ tab[(hash & 0xff) ^ key[i]]; // return (hash & mask); // } /** * Universal Hashing */ public static int universal(char[]key, int mask, int[] tab) { int hash = key.length, i, len = key.length; for (i=0; i<(len<<3); i+=8) { char k = key[i>>3]; if ((k&0x01) == 0) hash ^= tab[i+0]; if ((k&0x02) == 0) hash ^= tab[i+1]; if ((k&0x04) == 0) hash ^= tab[i+2]; if ((k&0x08) == 0) hash ^= tab[i+3]; if ((k&0x10) == 0) hash ^= tab[i+4]; if ((k&0x20) == 0) hash ^= tab[i+5]; if ((k&0x40) == 0) hash ^= tab[i+6]; if ((k&0x80) == 0) hash ^= tab[i+7]; } return (hash & mask); } /** * Zobrist Hashing */ public static int zobrist( char[] key,int mask, int[][] tab) { int hash, i; for (hash=key.length, i=0; i<key.length; ++i) hash ^= tab[i][key[i]]; return (hash & mask); } // LOOKUP3 // 见Bob Jenkins(3).c文件 // 32位FNV算法 static int M_SHIFT = 0; /** * 32位的FNV算法 * @param data 数组 * @return int值 */ public static int FNVHash(byte[] data) { int hash = (int)2166136261L; for(byte b : data) hash = (hash * 16777619) ^ b; if (M_SHIFT == 0) return hash; return (hash ^ (hash >> M_SHIFT)) & M_MASK; } /** * 改进的32位FNV算法1 * @param data 数组 * @return int值 */ public static int FNVHash1(byte[] data) { final int p = 16777619; int hash = (int)2166136261L; for(byte b:data) hash = (hash ^ b) * p; hash += hash << 13; hash ^= hash >> 7; hash += hash << 3; hash ^= hash >> 17; hash += hash << 5; return hash; } /** * 改进的32位FNV算法1 * @param data 字符串 * @return int值 */ public static int FNVHash1(String data) { final int p = 16777619; int hash = (int)2166136261L; for(int i=0;i<data.length();i++) hash = (hash ^ data.charAt(i)) * p; hash += hash << 13; hash ^= hash >> 7; hash += hash << 3; hash ^= hash >> 17; hash += hash << 5; return hash; } /** * Thomas Wang的算法,整数hash */ public static int intHash(int key) { key += ~(key << 15); key ^= (key >>> 10); key += (key << 3); key ^= (key >>> 6); key += ~(key << 11); key ^= (key >>> 16); return key; } /** * RS算法hash * @param str 字符串 */ public static int RSHash(String str) { int b = 378551; int a = 63689; int hash = 0; for(int i = 0; i < str.length(); i++) { hash = hash * a + str.charAt(i); a = a * b; } return (hash & 0x7FFFFFFF); } /* End Of RS Hash Function */ /** * JS算法 */ public static int JSHash(String str) { int hash = 1315423911; for(int i = 0; i < str.length(); i++) { hash ^= ((hash << 5) + str.charAt(i) + (hash >> 2)); } return (hash & 0x7FFFFFFF); } /* End Of JS Hash Function */ /** * PJW算法 */ public static int PJWHash(String str) { int BitsInUnsignedInt = 32; int ThreeQuarters = (BitsInUnsignedInt * 3) / 4; int OneEighth = BitsInUnsignedInt / 8; int HighBits = 0xFFFFFFFF << (BitsInUnsignedInt - OneEighth); int hash = 0; int test = 0; for(int i = 0; i < str.length();i++) { hash = (hash << OneEighth) + str.charAt(i); if((test = hash & HighBits) != 0) { hash = (( hash ^ (test >> ThreeQuarters)) & (~HighBits)); } } return (hash & 0x7FFFFFFF); } /* End Of P. J. Weinberger Hash Function */ /** * ELF算法 */ public static int ELFHash(String str) { int hash = 0; int x = 0; for(int i = 0; i < str.length(); i++) { hash = (hash << 4) + str.charAt(i); if((x = (int)(hash & 0xF0000000L)) != 0) { hash ^= (x >> 24); hash &= ~x; } } return (hash & 0x7FFFFFFF); } /* End Of ELF Hash Function */ /** * BKDR算法 */ public static int BKDRHash(String str) { int seed = 131; // 31 131 1313 13131 131313 etc.. int hash = 0; for(int i = 0; i < str.length(); i++) { hash = (hash * seed) + str.charAt(i); } return (hash & 0x7FFFFFFF); } /* End Of BKDR Hash Function */ /** * SDBM算法 */ public static int SDBMHash(String str) { int hash = 0; for(int i = 0; i < str.length(); i++) { hash = str.charAt(i) + (hash << 6) + (hash << 16) - hash; } return (hash & 0x7FFFFFFF); } /* End Of SDBM Hash Function */ /** * DJB算法 */ public static int DJBHash(String str) { int hash = 5381; for(int i = 0; i < str.length(); i++) { hash = ((hash << 5) + hash) + str.charAt(i); } return (hash & 0x7FFFFFFF); } /* End Of DJB Hash Function */ /** * DEK算法 */ public static int DEKHash(String str) { int hash = str.length(); for(int i = 0; i < str.length(); i++) { hash = ((hash << 5) ^ (hash >> 27)) ^ str.charAt(i); } return (hash & 0x7FFFFFFF); } /* End Of DEK Hash Function */ /** * AP算法 */ public static int APHash(String str) { int hash = 0; for(int i = 0; i < str.length(); i++) { hash ^= ((i & 1) == 0) ? ( (hash << 7) ^ str.charAt(i) ^ (hash >> 3)) : (~((hash << 11) ^ str.charAt(i) ^ (hash >> 5))); } // return (hash & 0x7FFFFFFF); return hash; } /* End Of AP Hash Function */ /** * JAVA自己带的算法 */ public static int java(String str) { int h = 0; int off = 0; int len = str.length(); for (int i = 0; i < len; i++) { h = 31 * h + str.charAt(off++); } return h; } /** * 混合hash算法,输出64位的值 */ public static long mixHash(String str) { long hash = str.hashCode(); hash <<= 32; hash |= FNVHash1(str); return hash; } }
来源:
http://hi.baidu.com/algorithms/blog/item/79caabee879ece2a2cf53440.html
发表评论
-
vs2008【断点无效】解决方法
2015-04-13 10:05 792有时候,我们在用vs2008调试的时候,会出现断点无效。如下 ... -
C++对象使用错误之复制构造函数与赋值
2015-03-31 14:21 497先来一段会出错的代码: #pragma once ... -
c++多线程编程
2015-03-25 23:50 1000http://blog.csdn.net/hitwengq ... -
《Windows核心编程》---图形用户界面之窗口<转>
2015-03-16 09:20 759图形用户界面之---窗口: 主函数一般是: /**** ... -
Qt源码学习(从Win32到Qt)
2015-03-15 23:03 2047本文以一个Win32的helloworld程序开篇, · ... -
C++模板之特化与偏特化详解
2015-01-07 14:44 837转自:http://www.jb51.net/a ... -
c++中的typename与class<转>
2015-01-07 08:51 831在泛型编程的形参表中,关键字typename和class具有 ... -
traits:Traits技术初探
2015-01-06 12:49 804概述:traits是一种特性萃取技术,它在Generic ... -
POD型别
2015-01-06 12:37 771POD全称Plain Old Data。通俗的讲,一个类或结 ... -
c++核心基础知识(内存管理)
2015-01-04 22:22 708内存管理是C++最令人切 ... -
RAII惯用法:C++资源管理的利器
2015-01-04 22:15 525RAII是指C++语言中的一个惯用法(idiom),它是“ ... -
内存分配器<转>
2015-01-04 22:07 1391题记:内存管理一直 ... -
operator new在C++中的各种写法
2015-01-04 19:27 1212http://blog.sina.com.cn/s/blo ... -
可变参数va_list
2014-12-26 17:45 8851.要在函数中使用参数,首先要包含头文件<stdarg ... -
char* 做map 的KEY的思考
2014-12-26 08:19 712很明显的道理,不要简单从字面上的东西去理解,虽然char* ... -
Apriori算法
2014-12-15 12:56 669http://blog.csdn.net/lizhengn ... -
map注意的两个问题
2014-12-11 14:21 644代码1 void main() { ... -
关于C++ const 的全面总结<转>
2014-11-14 12:56 763C++中的const关键字的用法非常灵活,而使用const ... -
OpenGL超级宝典(第五版)环境配置【转】
2014-10-27 13:59 1497OpenGL超级宝典(第五版)环境配置 Vs2008+wi ... -
C++DLL编程详解
2014-10-08 19:44 1658DLL(Dynamic Link Library)的 ...
相关推荐
原书附带光盘文件<br>第2章<br> 02/ 基于Ajax的留言板示例<br>第3章<br> 03/3.1.3.html JavaScript在Ajax中的作用范例<br> 03/3.4.6.html 加入注释,实现九九乘法表<br> 03/3.4.11.html 使用逻辑表达式...
本程序主要是BloomFilter算法的简化实现<br>因为C#非安全代码无法直接分配内存块,使用了int型数组代替,暂时为了简单没有使用位运算,比位运算消耗内存多16倍。<br>算法原理:<br>其首先申请一块大内存,并把内存中...
MurmurHash3通用hash bashed查找函数实现 关于 是一种非加密哈希函数,适用于一般的基于哈希的查找。 此实现实现了 MurmurHash 的第 3 版。 安装 : $ clib install jwerle/murmurhash.c 来源: $ git clone git@...
- **消息认证码(MAC)**是使用带密钥的Hash函数实现的,它结合了Hash函数的安全特性和密钥的安全性,以确保只有合法接收方才能验证消息的完整性。 2. **数字签名** - 在数字签名过程中,首先使用密码学Hash函数...
- `<hash_map>`、`<hash_set>`、`<slist>`:这些是基于哈希表实现的映射、集合和单向链表,尽管不在C++标准中,但是是常见的非标准扩展。 文档中还提到,C++标准库由51个必需的头文件组成,且该实现还额外包含了三...
UTHASH 是一个开源的 C 语言库,提供了一种简单且高效的哈希表实现,用于在 C 代码中快速查找和管理数据结构。这个库的主要功能是提供一个宏定义的集合,可以方便地将结构体转化为哈希表,进而进行添加、删除、查找...
### Hash函数研究综述 #### 引言 Hash函数作为一种重要的密码学组件,在现代信息安全领域扮演着关键角色。它可以用于数字签名方案、验证信息来源的真实性和完整性等方面,并且能够将任意长度的消息压缩到固定长度...
<br><br> Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了“字节串”而不是“字符串”这个词,是因为这种变换只与字节的值有关,与字符集或编码...
<br><br> Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了“字节串”而不是“字符串”这个词,是因为这种变换只与字节的值有关,与字符集或编码...
MD5(Message-Digest Algorithm 5)和SHA-1(Secure Hash Algorithm 1)是两种广泛使用的哈希函数,它们在信息安全领域扮演着至关重要的角色。哈希函数是一种将任意长度的数据转换为固定长度输出的函数,这个输出...
散列(Hash)在STL中通过`<unordered_set>`和`<unordered_map>`实现。它们提供快速的查找操作,基于哈希函数。例如,创建一个存储整数的无序集合: ```cpp #include <unordered_set> std::unordered_set<int> int...
Hash函数集合,包含主流的hash函数: nginx_hash算法,OpenSSL_hash算法,RSHash,JSHash,PJWHash,ELFHash,BKDRHash,DJBHash,DEKHash,APHash等等!
接下来,为了让`<iframe>`在内容加载完成后能够自动调整高度,可以在`<iframe>`标签上添加`onload`事件,该事件会在`<iframe>`的内容加载完毕后触发,从而执行相应的函数来调整`<iframe>`的高度。 ```html <iframe ...
Link<T> *Find_hash(T key, int &icmp, int ntype = 0) { icmp = 0; if (first == 0) { icmp++; if (ntype) return first = new Link<T>(key); else return NULL; } else { Link<T> *ptr = first, *p; ...
<property name="mapFile">partition-hash-int.txt</property> <property name="type">0</property> <property name="defaultNode">0</property> </function> ``` 其中,`columns`指定了分片的表字段,`...
$html .= "</head><body><br><br><br><br>"; $html .= "<table cellspacing='0' cellpadding='0' border='1' width='450' align='center'>"; $html .= "<tr><td bgcolor='#ffffff'>"; $html .= "<table border='...
根据给定的文件信息,我们可以总结出以下关于 Hash 函数在 C 语言中的实现与应用的知识点: ### 1. Hash 函数的概念 哈希函数(Hash Function)是一种将任意长度的消息映射到固定长度的消息摘要的一种算法。这种...
</p><p>“来源HASH验证”功能升级,防护更强。</p><p>来源地址新增严格模式验证,更严谨,防护外部提交更严格。</p><p>TAGS功能升级,更完善。</p><p>各系统模型新增记录信息审核人功能,对查看责任人和绩效考核更...
**正文** 在信息技术领域,哈希(Hash)函数与数字签名是两个至关重要的概念,它们在...在实验四的“Hash函数”文档中,会详细阐述这些理论知识,并可能包含具体的操作步骤和示例,以帮助学生加深理解并实践这些概念。