如何解决使用哈希表上的开放寻址实现删除功能的无限循环 - Python
我正在尝试通过对哈希表的线性探测来实现 remove
函数。
我遇到了问题,当我尝试调用函数 remove 时,它会进入无限循环。
我该如何解决这个问题??
我已经用伪代码编写了函数:
remove(t,k):
z = 0
repeat
x = hash_function (k,z)
if hash_table[x] == k:
hash_table[x] = deleted return x
z = z+1
until hash_table[x] == NIL or z == m
return NIL
这是进入类的代码:
class lin_prob:
def __init__(self,table_size):
self.hash_table = [None]*table_size
self.n_prime = 109169
self.a = random.randint(2,self.prime-1)
self.b = random.randint(2,self.prime-1)
self.n_keys = 0
def remove(self,k):
z = 0
while self.hash_table[x] != None or z < len (hash_table):
x = self.hash_function(k)
if self.hash_table[x] == k:
self.hash_table[x] = "deleted"
return x
else :
z = z+1
return "NIL"
def hash_function(self,k):
return ((self.a*k + self.b) % self.prime_number) % len(self.hash_table)
def len(self):
return self.n_keys
解决方法
如果要否定 until
条件以创建 while
条件,则必须将 or
更改为 and
:
while self.hash_table[x] != None and z < len (hash_table):
...
此外,您的代码无法工作,因为 x
在您的 remove
方法中是未知的。
问题出在你放入while循环中的条件上
while self.hash_table[x] != None and z < len (hash_table):
因为等于 ==
的否定不等于 !=
。我相信它会解决您的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。