Python 哈希表模拟
我正在编写一个函数,它模拟正在插入的键列表,顺序为哈希表中给定的顺序。输出应该是哈希表的列表表示(值Python 哈希表模拟,python,python-3.x,hash,hashtable,Python,Python 3.x,Hash,Hashtable,我正在编写一个函数,它模拟正在插入的键列表,顺序为哈希表中给定的顺序。输出应该是哈希表的列表表示(值None用于表示未使用的位置) 例如:list\u of_value=[26,54,94,17,31,77,44,51] 我已经写了一个代码,但不断得到错误和问题,谢谢你的帮助 def hash_probe(size, key,): hash_key = key % len(size) if size[hash_key] != None: size[hash
None
用于表示未使用的位置)
例如:list\u of_value=[26,54,94,17,31,77,44,51]
我已经写了一个代码,但不断得到错误和问题,谢谢你的帮助
def hash_probe(size, key,):
hash_key = key % len(size)
if size[hash_key] != None:
size[hash_key] = key
else:
while size[hash_key] == None:
if hash_key != len(size)- 1:
hash_key += 1
else:
hash_key = 0
size[hash_key] = key
return size
除了一些小的输入错误和错误命名变量外,代码中的主要问题是您试图将每个值都放在已占用的位置。循环
而size[hash\u key]==None:
将搜索占用的单元格,因为当找到size[hash\u key]==None
时,它跳过索引
我重构了您的代码,为您提供了一个想法:
def hash_probe(table, key):
size = len(table)
hash_key = key % size
while table[hash_key] is not None:
hash_key = (hash_key + 1) % size
table[hash_key] = key
return table
list_of_values = [26, 54, 94, 17, 31, 77, 44, 51]
expected = [26, 51, 54, 94, 17, 31, 44, None, None, None, None, None, 77]
actual = [None] * 13
for v in list_of_values:
hash_probe(actual, v)
print(list_of_values)
print(expected)
print(actual)
请注意,这仍然不是一个真正的解决方案,因为当数组变满时,它将进入无限循环。我假设您希望在给定代码的哈希表中添加一个新项,并使用解决冲突。
在这种情况下,它有几个问题:
- 在本部分中-
, 您可能正在旧值上覆盖新值李>如果大小[哈希键]!=无:大小[哈希键]=键
- 在对列表进行第一次添加时,代码将进入 无限循环李>
- 虽然与代码的功能无关,但列表的名称
似乎有点奇怪size
def hash_probe(keys, size):
hash_table = [None] * size
for key in keys:
hash_key = key % size
# If we find an empty position, insert it there
if hash_table[hash_key] is None:
hash_table[hash_key] = key
else:
i = (hash_key + 1) % size
# Find an unused position
count = 0
while count < size and hash_table[i] is not None:
i = (i + 1) % size
count += 1
# If it is an empty position, insert it
if hash_table[i] is None:
hash_table[i] = key
else:
print("No more space in the hash table!!")
return hash_table
keys = [26, 54, 94, 17, 31, 77, 44, 51]
hash_table = hash_probe(keys, 13)
print(hash_table)
def hash_探针(键,大小):
哈希表=[None]*大小
对于键入键:
hash_key=密钥%size
#如果我们找到一个空位置,就把它插入那里
如果哈希表[哈希键]为无:
哈希表[哈希键]=键
其他:
i=(散列键+1)%size
#找到一个未使用的位置
计数=0
而count
请显示代码。当然,我会编辑我的问题它似乎运行正常,但它不会在列表末尾打印任何一个,是的,我正在尝试进行线性探测:)现在只打印出这个[26,54,94,17,31,13,44,51]仍然给出相同的输出:/@deans7这很奇怪!我还在答案的末尾添加了一个演示。它在那里显示正确的输出。