无限 while 循环在哈希 Table - Python 上使用开放寻址实现 Remove 函数
Infinite while loop implementing Remove function using Open Addressing on Hash Table - Python
我正在尝试通过散列 table.
上的线性探测来实现 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:
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):
因为等于 ==
的否定不等于 !=
。我相信它会解决你的问题。
我正在尝试通过散列 table.
上的线性探测来实现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:
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):
因为等于 ==
的否定不等于 !=
。我相信它会解决你的问题。