forked from sprtokiller/python_hashmaps
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path02_hashmap_chaining.py
More file actions
47 lines (39 loc) · 1.4 KB
/
Copy path02_hashmap_chaining.py
File metadata and controls
47 lines (39 loc) · 1.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import time
import random
class ChainingHashMap:
def __init__(self, size):
self.size = size
self.table = [[] for _ in range(size)]
def hash_function(self, key):
return hash(key) % self.size
def add(self, key, value):
index = self.hash_function(key)
for i, (k, v) in enumerate(self.table[index]):
if k == key:
self.table[index][i] = (key, value)
def find(self, key):
index = self.hash_function(key)
for k, v in self.table[index]:
if k == key:
return v
return None
def measure_time(operation, *args):
start = time.time()
result = operation(*args)
end = time.time()
return result, end - start
if __name__ == "__main__":
hash_map = ChainingHashMap(1000)
data = list(range(1, 100001))
random.shuffle(data)
# Přidávání po dávkách
for i in range(0, len(data), 10000):
batch = data[i:i+10000]
_, duration = measure_time(lambda b: [hash_map.add(key, f"value{key}") for key in b], batch)
print(f"Adding batch {i//10000 + 1}: {duration:.6f} s")
# Hledání po dávkách
random.shuffle(data)
for i in range(0, len(data), 10000):
batch = data[i:i+10000]
_, duration = measure_time(lambda b: [hash_map.find(key) for key in b], batch)
print(f"Finding batch {i//10000 + 1}: {duration:.6f} s")