diff --git a/01_pole.py b/01_pole.py index 0ef2919..06a23b7 100644 --- a/01_pole.py +++ b/01_pole.py @@ -8,12 +8,13 @@ def measure_time(operation, *args): return result, end - start def add_elements(array, elements): - # TODO: Přidat všechny prvky z "elements" do pole "array" - pass + array.extend(elements) def find_elements(array, elements): - # TODO: Najít všechny prvky z "elements" v poli "array" - pass + results = [] + for el in elements: + results.append(el in array) + return results if __name__ == "__main__": array = [] diff --git a/02_hashmap_chaining.py b/02_hashmap_chaining.py index fa3eba3..7878b43 100644 --- a/02_hashmap_chaining.py +++ b/02_hashmap_chaining.py @@ -7,17 +7,21 @@ def __init__(self, size): self.table = [[] for _ in range(size)] def hash_function(self, key): - # TODO: Implementovat hashovací funkci - pass + return hash(key) % self.size def add(self, key, value): - # TODO: Přidat prvek s klíčem "key" a hodnotou "value" do hashmapy - pass + 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): - # TODO: Najít prvek s klíčem "key" v hashmapě a vrátit jeho hodnotu - pass - + 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) diff --git a/03_hashmap_open_addressing.py b/03_hashmap_open_addressing.py index 95d0a4f..e194913 100644 --- a/03_hashmap_open_addressing.py +++ b/03_hashmap_open_addressing.py @@ -7,16 +7,29 @@ def __init__(self, size): self.table = [None] * size def hash_function(self, key): - # TODO: Implementovat hashovací funkci - pass + return hash(key) % self.size def add(self, key, value): - # TODO: Přidat prvek s klíčem "key" a hodnotou "value" do hashmapy - pass + index = self.hash_function(key) + for _ in range(self.size): + if self.table[index] is None or self.table[index]: + self.table[index] = (key, value) + return + elif self.table[index][0] == key: + self.table[index] = (key, value) + return + index = (index + 1) % self.size def find(self, key): - # TODO: Najít prvek s klíčem "key" v hashmapě a vrátit jeho hodnotu - pass + index = self.hash_function(key) + for _ in range(self.size): + if self.table[index] is None: + return None + if self.table[index] and self.table[index][0] == key: + return self.table[index][1] + index = (index + 1) % self.size + + return None def measure_time(operation, *args): start = time.time() diff --git a/04_built_in_hashmap.py b/04_built_in_hashmap.py index 2fd4f10..2f7fd6b 100644 --- a/04_built_in_hashmap.py +++ b/04_built_in_hashmap.py @@ -8,12 +8,11 @@ def measure_time(operation, *args): return result, end - start def add_elements(hash_map, keys, values): - # TODO: Přidat všechny klíče a hodnoty do hashmapy - pass + for key, value in zip(keys, values): + hash_map[key] = value def find_elements(hash_map, keys): - # TODO: Najít všechny klíče v hashmapě - pass + return {key: hash_map.get(key) for key in keys} if __name__ == "__main__": hash_map = {}