Prefer mutative variant of delete for HashTable
Instead of calling `filter(..)`.
This commit is contained in:
parent
a457a81bbb
commit
a2fa88f561
1 changed files with 16 additions and 3 deletions
|
@ -5,9 +5,12 @@ def compute_hash(x):
|
||||||
|
|
||||||
x[0] * P^0 + x[1] * P^1 + ... x[n-1] * P^(n-1) % M
|
x[0] * P^0 + x[1] * P^1 + ... x[n-1] * P^(n-1) % M
|
||||||
|
|
||||||
P and M are constants.
|
P and M are constants where P represents the next available prime number
|
||||||
|
that's GTE the number of unique characters you'll be hashing. In the case of
|
||||||
|
all lowercase characters, of which there are 26, the next available prime
|
||||||
|
number is 31.
|
||||||
"""
|
"""
|
||||||
p = 31 # small prime number
|
p = 31
|
||||||
m = int(10e9) + 9 # large prime number
|
m = int(10e9) + 9 # large prime number
|
||||||
power = 0
|
power = 0
|
||||||
result = 0
|
result = 0
|
||||||
|
@ -18,6 +21,9 @@ def compute_hash(x):
|
||||||
|
|
||||||
class HashTable(object):
|
class HashTable(object):
|
||||||
def __init__(self, size):
|
def __init__(self, size):
|
||||||
|
"""
|
||||||
|
Create a hash table with `size` buckets.
|
||||||
|
"""
|
||||||
buckets = []
|
buckets = []
|
||||||
for _ in range(size):
|
for _ in range(size):
|
||||||
buckets.append([])
|
buckets.append([])
|
||||||
|
@ -55,5 +61,12 @@ class HashTable(object):
|
||||||
self.xs[h].append((key, val))
|
self.xs[h].append((key, val))
|
||||||
|
|
||||||
def delete(self, key):
|
def delete(self, key):
|
||||||
|
"""
|
||||||
|
Remove entry `key` from the hash table.
|
||||||
|
"""
|
||||||
h = self.compute_hash(key)
|
h = self.compute_hash(key)
|
||||||
self.xs[h] = list(filter(lambda entry: entry[0] != key, self.xs[h]))
|
for i in range(len(self.xs[h])):
|
||||||
|
k, v = self.xs[h][i]
|
||||||
|
if k == key:
|
||||||
|
self.xs[h].remove((k, v))
|
||||||
|
return
|
||||||
|
|
Loading…
Reference in a new issue