📅  最后修改于: 2023-12-03 15:39:56.576000             🧑  作者: Mango
散列函数是一种将输入值映射到离散值域的函数。散列函数通常用于将输入数据存储在数据结构中,例如哈希表中,以便能够高效地执行查找,插入和删除操作。
哈希表是一个支持常数时间插入和查找操作的动态集合。哈希表基于散列函数实现,将元素存储在散列桶中。哈希表的插入和查找操作时间复杂度都是O(1)的,但最坏情况下的性能可能达到O(n),其中n是哈希表中元素的数量。
以下是一个简单的哈希表实现:
class HashTable:
def __init__(self, size):
self.size = size
self.table = [[] for _ in range(size)]
def hash(self, key):
return key % self.size
def insert(self, key, value):
index = self.hash(key)
self.table[index].append((key, value))
def search(self, key):
index = self.hash(key)
for k, v in self.table[index]:
if k == key:
return v
raise KeyError(f"{key} not found")
def delete(self, key):
index = self.hash(key)
for i, (k, v) in enumerate(self.table[index]):
if k == key:
del self.table[index][i]
return
raise KeyError(f"{key} not found")
这是一个简单的Python实现,它使用除留余数法作为散列函数。
除了哈希表之外,还有许多其他的数据结构可以使用散列函数来加速操作。这些数据结构包括散列表,布隆过滤器和一些搜索数据结构,例如前缀树和后缀树。
下面是一个使用散列函数实现的简单的布隆过滤器:
from bitarray import bitarray
import mmh3
class BloomFilter:
def __init__(self, size, num_hashes):
self.size = size
self.num_hashes = num_hashes
self.bit_array = bitarray(size)
self.bit_array.setall(0)
def hash(self, value):
hashes = []
for i in range(self.num_hashes):
hash_value = mmh3.hash(value, i) % self.size
hashes.append(hash_value)
return hashes
def add(self, value):
for hash_value in self.hash(value):
self.bit_array[hash_value] = 1
def contains(self, value):
for hash_value in self.hash(value):
if self.bit_array[hash_value] == 0:
return False
return True
这是一个简单的Python实现,它使用了MurmurHash3算法作为散列函数,并使用了位数组来表示集合。如果您需要快速并行访问大规模数据集合,则布隆过滤器是一个非常有用的数据结构。