📅  最后修改于: 2023-12-03 15:28:44.472000             🧑  作者: Mango
该题为 GATE-CS-2015(套装3)的第65题,题目要求实现一个哈希表,支持插入、查找和删除操作,考查对哈希表数据结构的理解与应用。以下是该题的一些说明:
你需要实现一个哈希表数据结构,并支持以下操作:
(key, value)
对。key
对应的值。key
对应的 (key, value)
对。哈希表应该满足以下要求:
哈希表是一种基于散列表的数据结构,它的核心思想是通过哈希函数将关键字映射到一个位置(即“槽位”)上,将相同位置上的元素组织成链表。常见的哈希函数有:除留余数法、乘法散列法、斐波那契散列法等。
在哈希表中,不同的关键字可能被映射到同一个槽位上,这种情况称为哈希冲突。哈希冲突的处理方式有很多种,其中比较简单的一种方式是链表法:将同一个槽位上的元素组织成链表,每次插入或查找时沿着链表遍历即可。
在实现哈希表时,需要注意以下几点:
(key, value)
对。下面是使用 Python 语言实现哈希表的示例代码,供参考:
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):
h = self._hash(key)
for i, item in enumerate(self.table[h]):
if item[0] == key:
self.table[h][i] = (key, value)
return
self.table[h].append((key, value))
def search(self, key):
h = self._hash(key)
for item in self.table[h]:
if item[0] == key:
return item[1]
return None
def delete(self, key):
h = self._hash(key)
for i, item in enumerate(self.table[h]):
if item[0] == key:
del self.table[h][i]
return
raise KeyError("Key not found")
该代码实现了一个简单的哈希表,其中 _hash
方法使用了除留余数法,冲突处理采用链表法。使用时,可以这样创建一个哈希表实例:
table = HashTable(8) # 哈希表的大小为 2^3 = 8
table.insert(1, "Hello")
table.insert(2, "World")
table.insert(3, "Python")
print(table.search(1)) # 输出 "Hello"
table.delete(2)
print(table.search(2)) # 输出 None
除此之外,还可以考虑一些优化方案,如使用二次探测等方法避免冲突,或使用红黑树等数据结构优化链表的遍历效率。