forked from UNN/2026-rff_mp
[13] adding time for HashTable() and fixing BinarySearchTree()
This commit is contained in:
parent
a9d5835d7f
commit
bd4d6d48a0
|
|
@ -90,7 +90,8 @@ def LinkedList(head, phone_book):
|
||||||
start_find = time.perf_counter()
|
start_find = time.perf_counter()
|
||||||
for _ in range(100):
|
for _ in range(100):
|
||||||
name = create_name_phone(rnd.randint(0, 999))[0]
|
name = create_name_phone(rnd.randint(0, 999))[0]
|
||||||
#print(name, ":", ll_find(head, name))
|
phone = ll_find(head, name)
|
||||||
|
#print(name, ":", phone)
|
||||||
end_find = time.perf_counter()
|
end_find = time.perf_counter()
|
||||||
time_find = end_find - start_find
|
time_find = end_find - start_find
|
||||||
|
|
||||||
|
|
@ -153,47 +154,43 @@ def ht_delete(buckest, name):
|
||||||
|
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
|
|
||||||
def HashTable(buckest):
|
def HashTable(buckest, phone_book):
|
||||||
|
|
||||||
print('=========== TESTING HT_INSERT =============')
|
|
||||||
Name = ['Dima', 'Alex', 'Ivan', 'Maxim', 'Olga', 'Lena']
|
|
||||||
|
|
||||||
for _ in range(10):
|
start_insert = time.perf_counter()
|
||||||
name = Name[rnd.randint(0, len(Name) - 1)]
|
for i in range(len(phone_book)):
|
||||||
phone = str(rnd.randint(0,9)) + str(rnd.randint(0,9)) + str(rnd.randint(0,9)) + '-' + \
|
|
||||||
str(rnd.randint(0,9)) + str(rnd.randint(0,9)) + str(rnd.randint(0,9))
|
|
||||||
|
|
||||||
print(name, phone)
|
buckest = ht_insert(buckest, phone_book[i][0], phone_book[i][1])
|
||||||
buckest = ht_insert(buckest, name, phone)
|
#print(buckest)
|
||||||
print(buckest)
|
end_insert = time.perf_counter()
|
||||||
print('-----------------------------------------------------\n')
|
time_insert = end_insert - start_insert
|
||||||
|
|
||||||
|
|
||||||
|
start_find = time.perf_counter()
|
||||||
|
for _ in range(100):
|
||||||
|
name = create_name_phone(rnd.randint(0, 999))[0]
|
||||||
|
phone = ht_find(buckest, name)
|
||||||
|
#print(name, ":", phone)
|
||||||
|
end_find = time.perf_counter()
|
||||||
|
time_find = end_find - start_find
|
||||||
|
|
||||||
print('============= END TESTING =====================\n\n')
|
|
||||||
|
|
||||||
|
|
||||||
print('============== TESTING HT_FIND =====================')
|
|
||||||
|
|
||||||
Name.append('Masha')
|
|
||||||
for i in range(len(Name)):
|
|
||||||
name = Name[i]
|
|
||||||
print(name, ":", ht_find(buckest, name))
|
|
||||||
print("======== END TESTING =============\n\n")
|
|
||||||
|
|
||||||
print("================ TESTING TH_LIST_ALL ====================")
|
|
||||||
|
|
||||||
print(*ht_list_all(buckest))
|
|
||||||
print("========= END TESTING ==============\n\n")
|
|
||||||
|
|
||||||
|
|
||||||
print('========== TESTING HT_DELETE ==========')
|
|
||||||
|
|
||||||
for _ in range(2):
|
start_delete = time.perf_counter()
|
||||||
name = Name[rnd.randint(0, len(Name) - 1)]
|
for i in range(110):
|
||||||
|
if i <= 99: name = f"User_{rnd.randint(0,999):03d}"
|
||||||
|
else: name = f"None_{i:03d}"
|
||||||
buckest = ht_delete(buckest, name)
|
buckest = ht_delete(buckest, name)
|
||||||
|
end_delete = time.perf_counter()
|
||||||
print(buckest)
|
time_delete = end_delete - start_delete
|
||||||
print(name, ":", ht_find(buckest, name))
|
|
||||||
print("========= END TESTING ==============\n\n")
|
|
||||||
|
start_list = time.perf_counter()
|
||||||
|
name_list = sort_list(ht_list_all(buckest))
|
||||||
|
#print(*name_list)
|
||||||
|
end_list = time.perf_counter()
|
||||||
|
time_list = end_list - start_list
|
||||||
|
|
||||||
|
return (time_insert, time_find, time_delete, time_list)
|
||||||
|
|
||||||
#################################################################################################
|
#################################################################################################
|
||||||
|
|
||||||
|
|
@ -248,49 +245,31 @@ def bst_list_all(root, name_list = []):
|
||||||
|
|
||||||
def bst_delete(root, name):
|
def bst_delete(root, name):
|
||||||
|
|
||||||
running = root
|
if root is None:
|
||||||
old_running = running
|
return None
|
||||||
|
if hash_key(name) < hash_key(root['name']):
|
||||||
|
root['left'] = bst_delete(root['left'], name)
|
||||||
|
elif hash_key(name) > hash_key(root['name']):
|
||||||
|
root['right'] = bst_delete(root['right'], name)
|
||||||
|
else:
|
||||||
|
|
||||||
|
if root['left'] is None and root['right'] is None:
|
||||||
|
return None
|
||||||
|
|
||||||
while old_running is not None:
|
if root['left'] is None:
|
||||||
node = hash_key(running['name'])
|
return root['right']
|
||||||
sheet = hash_key(name)
|
if root['right'] is None:
|
||||||
if name == running['name']:
|
return root['left']
|
||||||
|
|
||||||
|
min_node = root['right']
|
||||||
|
while min_node['left'] is not None:
|
||||||
|
min_node = min_node['left']
|
||||||
|
|
||||||
break
|
root['name'] = min_node['name']
|
||||||
elif node < sheet:
|
root['phone'] = min_node['phone']
|
||||||
old_running = running
|
|
||||||
flag = 1
|
root['right'] = bst_delete(root['right'], min_node['name'])
|
||||||
running = running['right']
|
|
||||||
else:
|
|
||||||
old_running = running
|
|
||||||
flag = 0
|
|
||||||
running = running['left']
|
|
||||||
|
|
||||||
step = ['left', 'right']
|
|
||||||
|
|
||||||
if running['left'] is None and running['right'] is None:
|
|
||||||
old_running = None
|
|
||||||
return root
|
|
||||||
|
|
||||||
if running['left'] is None:
|
|
||||||
old_running[step[flag]] = running['right']
|
|
||||||
return root
|
|
||||||
|
|
||||||
if running['right'] is None:
|
|
||||||
old_running[step[flag]] = running['left']
|
|
||||||
return root
|
|
||||||
|
|
||||||
node_delete = running
|
|
||||||
old_running = running
|
|
||||||
running = running['right']
|
|
||||||
while running['left'] is not None:
|
|
||||||
old_running = running
|
|
||||||
running = running['left']
|
|
||||||
|
|
||||||
node_delete['name'] = running['name']
|
|
||||||
node_delete['phone'] = running['phone']
|
|
||||||
old_running['left'] = None
|
|
||||||
|
|
||||||
return root
|
return root
|
||||||
|
|
||||||
#################################################################################################
|
#################################################################################################
|
||||||
|
|
@ -352,26 +331,59 @@ def main():
|
||||||
|
|
||||||
phone_book_sorted = phone_book.copy()
|
phone_book_sorted = phone_book.copy()
|
||||||
phone_book_sorted = sort_list(phone_book_sorted)
|
phone_book_sorted = sort_list(phone_book_sorted)
|
||||||
replay = 10
|
replay = 5
|
||||||
|
|
||||||
|
|
||||||
Time_ll_not_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0}
|
Time_ll_not_sorted = []
|
||||||
Time_ll_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0}
|
Time_ll_sorted = []
|
||||||
|
|
||||||
|
Time_average_ll_not_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0}
|
||||||
|
Time_average_ll_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0}
|
||||||
|
|
||||||
for _ in range(replay):
|
for _ in range(replay):
|
||||||
time_ll_not_sorted = LinkedList(None, phone_book_not_sorted)
|
time_ll_not_sorted = LinkedList(None, phone_book_not_sorted)
|
||||||
for i, key in enumerate(Time_ll_not_sorted):
|
Time_ll_not_sorted.append({'insert': time_ll_not_sorted[0], 'find': time_ll_not_sorted[1], 'delete': time_ll_not_sorted[2], 'list': time_ll_not_sorted[3]})
|
||||||
Time_ll_not_sorted[key] += time_ll_not_sorted[i]/replay
|
for i, key in enumerate(Time_average_ll_not_sorted):
|
||||||
print(Time_ll_not_sorted)
|
Time_average_ll_not_sorted[key] += time_ll_not_sorted[i]/replay
|
||||||
|
for i in range(replay):
|
||||||
|
print(Time_ll_not_sorted[i])
|
||||||
|
print("Average:", Time_average_ll_not_sorted, "\n\n")
|
||||||
|
|
||||||
for _ in range(replay):
|
for _ in range(replay):
|
||||||
time_ll_sorted = LinkedList(None, phone_book_sorted)
|
time_ll_sorted = LinkedList(None, phone_book_sorted)
|
||||||
for i, key in enumerate(Time_ll_sorted):
|
Time_ll_sorted.append({'insert': time_ll_sorted[0], 'find': time_ll_sorted[1], 'delete': time_ll_sorted[2], 'list': time_ll_sorted[3]})
|
||||||
Time_ll_sorted[key] += time_ll_sorted[i]/replay
|
for i, key in enumerate(Time_average_ll_sorted):
|
||||||
print(Time_ll_sorted)
|
Time_average_ll_sorted[key] += time_ll_sorted[i]/replay
|
||||||
|
for i in range(replay):
|
||||||
|
print(Time_ll_not_sorted[i])
|
||||||
|
print("Average:", Time_average_ll_sorted, "\n\n")
|
||||||
|
|
||||||
|
|
||||||
#HashTable([[] for _ in range(10)])
|
|
||||||
|
Time_ht_not_sorted = []
|
||||||
|
Time_ht_sorted = []
|
||||||
|
|
||||||
|
Time_average_ht_not_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0}
|
||||||
|
Time_average_ht_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0}
|
||||||
|
|
||||||
|
for _ in range(replay):
|
||||||
|
time_ht_not_sorted = HashTable([[] for _ in range(100)], phone_book_not_sorted)
|
||||||
|
Time_ht_not_sorted.append({'insert': time_ht_not_sorted[0], 'find': time_ht_not_sorted[1], 'delete': time_ht_not_sorted[2], 'list': time_ht_not_sorted[3]})
|
||||||
|
for i, key in enumerate(Time_average_ht_not_sorted):
|
||||||
|
Time_average_ht_not_sorted[key] += time_ht_not_sorted[i]/replay
|
||||||
|
for i in range(replay):
|
||||||
|
print(Time_ht_not_sorted[i])
|
||||||
|
print(f"Average: {Time_average_ht_not_sorted}\n\n")
|
||||||
|
|
||||||
|
for _ in range(replay):
|
||||||
|
time_ht_sorted = HashTable([[] for _ in range(100)], phone_book_sorted)
|
||||||
|
Time_ht_sorted.append({'insert': time_ht_sorted[0], 'find': time_ht_sorted[1], 'delete': time_ht_sorted[2], 'list': time_ht_sorted[3]})
|
||||||
|
for i, key in enumerate(Time_average_ht_sorted):
|
||||||
|
Time_average_ht_sorted[key] += time_ht_sorted[i]/replay
|
||||||
|
for i in range(replay):
|
||||||
|
print(Time_ht_sorted[i])
|
||||||
|
print(f"Average: {Time_average_ht_sorted}\n\n")
|
||||||
|
|
||||||
#BinarySearchTree(None)
|
#BinarySearchTree(None)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user