[1] 1-st-exercise #2

Open
volkovva wants to merge 15 commits from 1-st-exercise into develop
Showing only changes of commit 77c787c2f4 - Show all commits

View File

@ -1,13 +1,15 @@
import random as rnd import random as rnd
# СВЯЗНЫЙ СПИСОК
def ll_insert(head, name, phone): def ll_insert(head, name, phone):
new_node = {'name': name, 'phone': phone, 'next': None} new_node = {'name': name, 'phone': phone, 'next': None}
if head is None: if head is None:
return new_node return new_node
current = head current = head
while current is not None: while current is not None:
if current['name'] == name: if current['name'] == name:
@ -28,7 +30,6 @@ def ll_find(head, name):
current = current['next'] current = current['next']
return None return None
def ll_delete(head, name): def ll_delete(head, name):
if head is None: if head is None:
return None return None
@ -43,7 +44,6 @@ def ll_delete(head, name):
current = current['next'] current = current['next']
return head return head
def sort_records(lst): def sort_records(lst):
n = len(lst) n = len(lst)
for i in range(n): for i in range(n):
@ -52,7 +52,6 @@ def sort_records(lst):
lst[j], lst[j + 1] = lst[j + 1], lst[j] lst[j], lst[j + 1] = lst[j + 1], lst[j]
return lst return lst
def ll_list_all(head): def ll_list_all(head):
record = [] record = []
current = head current = head
@ -63,8 +62,7 @@ def ll_list_all(head):
return res return res
# 2. ХЕШ-ТАБЛИЦА
def def_hash(name, size): def def_hash(name, size):
@ -74,25 +72,22 @@ def def_hash(name, size):
final_idx = hash_value % size final_idx = hash_value % size
return final_idx return final_idx
def ht_insert(buckets, name, phone): def ht_insert(buckets, name, phone):
size = len(buckets) size = len(buckets)
idx = def_hash(name, size) idx = def_hash(name, size)
ll_insert(buckets[idx], name, phone) buckets[idx] = ll_insert(buckets[idx], name, phone)
return buckets
def ht_find(buckets, name): def ht_find(buckets, name):
size = len(buckets) size = len(buckets)
idx = def_hash(name, size) idx = def_hash(name, size)
return ll_find(buckets[idx], name) return ll_find(buckets[idx], name)
def ht_delete(buckets, name): def ht_delete(buckets, name):
size = len(buckets) size = len(buckets)
idx = def_hash(name, size) idx = def_hash(name, size)
buckets[idx] = ll_delete(buckets[idx], name) buckets[idx] = ll_delete(buckets[idx], name)
return buckets
def ht_list_all(buckets): def ht_list_all(buckets):
res = [] res = []
@ -104,7 +99,7 @@ def ht_list_all(buckets):
return sort_records(res) return sort_records(res)
# ДВОИЧНОЕ ДЕРЕВО ПОИСКА
def bst_insert(root, name, phone): def bst_insert(root, name, phone):
@ -131,7 +126,6 @@ def bst_insert(root, name, phone):
return root return root
def bst_find(root, name): def bst_find(root, name):
current = root current = root
while current is not None: while current is not None:
@ -143,7 +137,6 @@ def bst_find(root, name):
current = current['right'] current = current['right']
return None return None
def bst_delete(root, name): def bst_delete(root, name):
if root is None: if root is None:
return None return None
@ -197,7 +190,6 @@ def bst_delete(root, name):
p_node['right'] = c_node p_node['right'] = c_node
return root return root
def bst_list_all(root): def bst_list_all(root):
record = [] record = []
@ -210,3 +202,29 @@ def bst_list_all(root):
helper(root) helper(root)
return record return record
# ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ
if __name__ == '__main__':
N = 10000
records = []
for i in range(N):
name = f"User_{i:05d}"
phone = f"+7-{rnd.randint(100, 999)}-{rnd.randint(100, 999)}-{rnd.randint(1000, 9999)}"
records.append((name, phone))
records_shuffled = records[:]
rnd.shuffle(records_shuffled)
records_sorted = sorted(records, key=lambda x: x[0])
print(f" Бетта-тест")
print(f"records_shuffled (первые 3): {records_shuffled[:3]}")
print(f"records_sorted (первые 3): {records_sorted[:3]}")