<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dutor &#187; Hash</title>
	<atom:link href="http://www.dutor.net/index.php/tag/hash/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dutor.net</link>
	<description>熟读而精思，循序而渐进，厚积而薄发。</description>
	<lastBuildDate>Tue, 17 Jan 2012 14:44:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>常用的几个字符串Hash函数</title>
		<link>http://www.dutor.net/index.php/2009/11/string-hash/</link>
		<comments>http://www.dutor.net/index.php/2009/11/string-hash/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 07:47:11 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[之算法神奇]]></category>
		<category><![CDATA[边走编程]]></category>
		<category><![CDATA[Hash]]></category>
		<category><![CDATA[字符串]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=1670</guid>
		<description><![CDATA[　　对最简单的SDBMHash(char*)做了一个简单的测试。随机生成200个长度为31的字符串，利用SDBM得到一个Hash值，然后用直接取余法插入长度为113的HashSet，为简单起见，只是将HashSet对应的位置进行加一。
<pre lang="cpp" line="1">
// SDBM Hash Function
unsigned int
SDBMHash (char *str)
{
    unsigned int hash = 0;
    while (*str)
      {
	  hash = (*str++) + (hash << 6) + (hash << 16) - hash;
      }
    return (hash &#038; 0x7FFFFFFF);
}
</pre>]]></description>
			<content:encoded><![CDATA[
<div class="wp_codebox"><table><tr id="p16701"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
</pre></td><td class="code" id="p1670code1"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">// RS Hash Function</span>
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span>
RSHash <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> b <span style="color: #000080;">=</span> <span style="color: #0000dd;">378551</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> a <span style="color: #000080;">=</span> <span style="color: #0000dd;">63689</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> hash <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
	  hash <span style="color: #000080;">=</span> hash <span style="color: #000040;">*</span> a <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	  a <span style="color: #000040;">*</span><span style="color: #000080;">=</span> b<span style="color: #008080;">;</span>
      <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// JS Hash Function</span>
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span>
JSHash <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> hash <span style="color: #000080;">=</span> <span style="color: #0000dd;">1315423911</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
	  hash <span style="color: #000040;">^</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>hash <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">5</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000080;">&gt;&gt;</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// P. J. Weinberger Hash Function</span>
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span>
PJWHash <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> BitsInUnignedInt <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">sizeof</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span>
							    <span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> <span style="color: #0000dd;">8</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> ThreeQuarters <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>BitsInUnignedInt <span style="color: #000040;">*</span> <span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> <span style="color: #0000dd;">4</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> OneEighth <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#40;</span>BitsInUnignedInt <span style="color: #000040;">/</span> <span style="color: #0000dd;">8</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> HighBits <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#40;</span><span style="color: #208080;">0xFFFFFFFF</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span>
	<span style="color: #008000;">&#40;</span>BitsInUnignedInt <span style="color: #000040;">-</span> OneEighth<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> hash <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> test <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
	  hash <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000080;">&lt;&lt;</span> OneEighth<span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	  <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>test <span style="color: #000080;">=</span> hash <span style="color: #000040;">&amp;</span> HighBits<span style="color: #008000;">&#41;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
	    <span style="color: #008000;">&#123;</span>
		hash <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>hash <span style="color: #000040;">^</span> <span style="color: #008000;">&#40;</span>test <span style="color: #000080;">&gt;&gt;</span> ThreeQuarters<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span> <span style="color: #008000;">&#40;</span>~HighBits<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	    <span style="color: #008000;">&#125;</span>
      <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// ELF Hash Function</span>
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span>
ELFHash <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> hash <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> x <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
	  hash <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">4</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	  <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>x <span style="color: #000080;">=</span> hash <span style="color: #000040;">&amp;</span> 0xF0000000L<span style="color: #008000;">&#41;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
	    <span style="color: #008000;">&#123;</span>
		hash <span style="color: #000040;">^</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>x <span style="color: #000080;">&gt;&gt;</span> <span style="color: #0000dd;">24</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		hash <span style="color: #000040;">&amp;</span><span style="color: #000080;">=</span> ~x<span style="color: #008080;">;</span>
	    <span style="color: #008000;">&#125;</span>
      <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// BKDR Hash Function</span>
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span>
BKDRHash <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> seed <span style="color: #000080;">=</span> <span style="color: #0000dd;">131</span><span style="color: #008080;">;</span>	<span style="color: #666666;">// 31 131 1313 13131 131313 etc..</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> hash <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
	  hash <span style="color: #000080;">=</span> hash <span style="color: #000040;">*</span> seed <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// SDBM Hash Function</span>
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span>
SDBMHash <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> hash <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
	  hash <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">6</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">16</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span> hash<span style="color: #008080;">;</span>
      <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// DJB Hash Function</span>
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span>
DJBHash <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> hash <span style="color: #000080;">=</span> <span style="color: #0000dd;">5381</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
	  hash <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">5</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// AP Hash Function</span>
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span>
APHash <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>str<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> hash <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> <span style="color: #000040;">*</span>str<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
	  <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>i <span style="color: #000040;">&amp;</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
	    <span style="color: #008000;">&#123;</span>
		hash <span style="color: #000040;">^</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>hash <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">7</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">^</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">^</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000080;">&gt;&gt;</span> <span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	    <span style="color: #008000;">&#125;</span>
	  <span style="color: #0000ff;">else</span>
	    <span style="color: #008000;">&#123;</span>
		hash <span style="color: #000040;">^</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>~<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>hash <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">11</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">^</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>str<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">^</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000080;">&gt;&gt;</span> <span style="color: #0000dd;">5</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	    <span style="color: #008000;">&#125;</span>
      <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>hash <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>　　对最简单的SDBMHash(char*)做了一个简单的测试。随机生成200个长度为31的字符串，利用SDBM得到一个Hash值，然后用直接取余法插入长度为113的HashSet，为简单起见，只是将HashSet对应的位置进行加一。</p>

<div class="wp_codebox"><table><tr id="p16702"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre></td><td class="code" id="p1670code2"><pre class="cpp" style="font-family:monospace;">&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> N <span style="color: #000080;">=</span> <span style="color: #0000dd;">32</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">char</span> str<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> HashSet<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">113</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> RandStr<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> str, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> n<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span> <span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> n <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		str<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'a'</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">%</span> <span style="color: #0000dd;">26</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	str<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">srand</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">time</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> count <span style="color: #000080;">=</span> <span style="color: #0000dd;">200</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> count<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		RandStr<span style="color: #008000;">&#40;</span>str, N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		HashSet<span style="color: #008000;">&#91;</span>SDBMHash<span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span><span style="color:#800080;">113</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">FILE</span><span style="color: #000040;">*</span> out <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;./result.txt&quot;</span>, <span style="color: #FF0000;">&quot;w&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #666666;">//~ FILE* out = stdout;</span>
	<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">113</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>out, <span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, HashSet<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>　　测试效果还是很不错的，相当均匀了已经。<br />
<div class="wp-caption aligncenter" style="width: 650px"><img alt="HashTest Diagram" src="http://www.dutor.net/files/images/HashTest.png" title="HashTest Diagram" width="640" height="480" /><p class="wp-caption-text">HashTest Diagram</p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2009/11/string-hash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

