写一个字符串哈希的代码模板
时间: 2024-05-15 21:15:34 浏览: 16
以下是一个基本的字符串哈希代码模板,使用了MurmurHash3算法:
```python
import hashlib
def murmur3_32(key, seed=0):
"""
MurmurHash3算法的32位版本
"""
c1 = 0xcc9e2d51
c2 = 0x1b873593
r1 = 15
r2 = 13
m = 5
n = 0xe6546b64
hash_value = seed
for i in range(0, len(key), 4):
k = int.from_bytes(key[i:i+4], byteorder='little')
k *= c1
k = (k << r1) | (k >> (32 - r1))
k *= c2
hash_value ^= k
hash_value = ((hash_value << r2) | (hash_value >> (32 - r2))) * m + n
remaining_bytes = len(key) % 4
if remaining_bytes == 3:
hash_value ^= key[-remaining_bytes-1] << 16
hash_value ^= key[-remaining_bytes] << 8
hash_value ^= key[-1]
hash_value *= c1
hash_value ^= hash_value >> 13
hash_value *= c2
hash_value ^= hash_value >> 15
elif remaining_bytes == 2:
hash_value ^= key[-remaining_bytes] << 8
hash_value ^= key[-1]
hash_value *= c1
hash_value ^= hash_value >> 13
hash_value *= c2
hash_value ^= hash_value >> 15
elif remaining_bytes == 1:
hash_value ^= key[-1]
hash_value *= c1
hash_value ^= hash_value >> 13
hash_value *= c2
hash_value ^= hash_value >> 15
hash_value ^= len(key)
hash_value ^= hash_value >> 16
hash_value *= 0x85ebca6b
hash_value ^= hash_value >> 13
hash_value *= 0xc2b2ae35
hash_value ^= hash_value >> 16
return hash_value
class StringHash:
def __init__(self, seed=0):
self.seed = seed
def hash(self, s):
hash_value = murmur3_32(s.encode(), self.seed)
return hash_value
# example usage
string_hash = StringHash(seed=42)
hashed_value = string_hash.hash("hello world")
print(hashed_value)
```
在这个模板中,我们使用了MurmurHash3算法的32位版本来计算字符串的哈希值。这个算法具有良好的散列性能和均匀性,适用于大多数哈希表应用。我们还定义了一个StringHash类,它将字符串转换为哈希值,并把这个哈希值作为其内部状态之一。通过调用hash方法,可以对任意字符串进行哈希计算。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)