[12] adding time for LinkedList
This commit is contained in:
parent
f9461cd010
commit
a9d5835d7f
|
|
@ -1,4 +1,5 @@
|
||||||
import random as rnd
|
import random as rnd
|
||||||
|
import time
|
||||||
#############################################################################################
|
#############################################################################################
|
||||||
|
|
||||||
def sort_list(name_list):
|
def sort_list(name_list):
|
||||||
|
|
@ -13,8 +14,10 @@ def hash_key(name):
|
||||||
h_key = sum(ord(ch) for ch in name)
|
h_key = sum(ord(ch) for ch in name)
|
||||||
return h_key
|
return h_key
|
||||||
|
|
||||||
|
def create_name_phone(i):
|
||||||
|
name = f"User_{i:03d}"
|
||||||
|
phone = f"{rnd.randint(100, 999)}-{rnd.randint(100, 999)}"
|
||||||
|
return (name, phone)
|
||||||
###########################################################################################################################
|
###########################################################################################################################
|
||||||
|
|
||||||
def ll_insert(head, name, phone):
|
def ll_insert(head, name, phone):
|
||||||
|
|
@ -74,42 +77,40 @@ def ll_list_all(head):
|
||||||
################################################################################################################################
|
################################################################################################################################
|
||||||
|
|
||||||
|
|
||||||
def LinkedList(head):
|
def LinkedList(head, phone_book):
|
||||||
|
|
||||||
print('======== TESTING LL_INSERT ==========')
|
start_insert = time.perf_counter()
|
||||||
Name = ['Dima', 'Ivan', 'Maxim', 'Alex', 'Olga', 'Lena']
|
for i in range(len(phone_book)):
|
||||||
|
|
||||||
for _ in range(10):
|
head = ll_insert(head, phone_book[i][0], phone_book[i][1])
|
||||||
name = Name[rnd.randint(0, len(Name) - 1)]
|
#print(head)
|
||||||
phone = str(rnd.randint(0,9)) + str(rnd.randint(0,9)) + str(rnd.randint(0,9)) + '-' + \
|
end_insert = time.perf_counter()
|
||||||
str(rnd.randint(0,9)) + str(rnd.randint(0,9)) + str(rnd.randint(0,9))
|
time_insert = end_insert - start_insert
|
||||||
print(name, phone)
|
|
||||||
head = ll_insert(head, name, phone)
|
start_find = time.perf_counter()
|
||||||
print(head)
|
for _ in range(100):
|
||||||
print('-----------------------------------\n')
|
name = create_name_phone(rnd.randint(0, 999))[0]
|
||||||
print('======== END TESTING ================\n\n')
|
#print(name, ":", ll_find(head, name))
|
||||||
|
end_find = time.perf_counter()
|
||||||
|
time_find = end_find - start_find
|
||||||
|
|
||||||
|
|
||||||
print('======== TESTING LL_FIND ==========')
|
start_delete = time.perf_counter()
|
||||||
Name.append('Masha')
|
for i in range(110):
|
||||||
for i in range(len(Name)):
|
if i <= 99: name = f"User_{rnd.randint(0,999):03d}"
|
||||||
name = Name[i]
|
else: name = f"None_{i:03d}"
|
||||||
print(name, ":", ll_find(head, name))
|
|
||||||
print("======== END TESTING =============\n\n")
|
|
||||||
|
|
||||||
print("============ TESTING LL_LIST_ALL AND SORT_LIST =============")
|
|
||||||
print(*sort_list(ll_list_all(head)))
|
|
||||||
print("============ END TESTING ===============\n\n")
|
|
||||||
|
|
||||||
print('========== TESTING LL_DELETE ==========')
|
|
||||||
|
|
||||||
for _ in range(2):
|
|
||||||
name = Name[rnd.randint(0, 4)]
|
|
||||||
head = ll_delete(head, name)
|
head = ll_delete(head, name)
|
||||||
|
end_delete = time.perf_counter()
|
||||||
|
time_delete = end_delete - start_delete
|
||||||
|
|
||||||
print(head)
|
|
||||||
print(name, ":", ll_find(head, name))
|
start_list = time.perf_counter()
|
||||||
print("========= END TESTING ==============\n\n")
|
name_list = sort_list(ll_list_all(head))
|
||||||
|
#print(*name_list)
|
||||||
|
end_list = time.perf_counter()
|
||||||
|
time_list = end_list - start_list
|
||||||
|
|
||||||
|
return (time_insert, time_find, time_delete, time_list)
|
||||||
|
|
||||||
#########################################################################################################
|
#########################################################################################################
|
||||||
|
|
||||||
|
|
@ -248,8 +249,9 @@ def bst_list_all(root, name_list = []):
|
||||||
def bst_delete(root, name):
|
def bst_delete(root, name):
|
||||||
|
|
||||||
running = root
|
running = root
|
||||||
|
old_running = running
|
||||||
|
|
||||||
while running is not None:
|
while old_running is not None:
|
||||||
node = hash_key(running['name'])
|
node = hash_key(running['name'])
|
||||||
sheet = hash_key(name)
|
sheet = hash_key(name)
|
||||||
if name == running['name']:
|
if name == running['name']:
|
||||||
|
|
@ -266,6 +268,10 @@ def bst_delete(root, name):
|
||||||
|
|
||||||
step = ['left', 'right']
|
step = ['left', 'right']
|
||||||
|
|
||||||
|
if running['left'] is None and running['right'] is None:
|
||||||
|
old_running = None
|
||||||
|
return root
|
||||||
|
|
||||||
if running['left'] is None:
|
if running['left'] is None:
|
||||||
old_running[step[flag]] = running['right']
|
old_running[step[flag]] = running['right']
|
||||||
return root
|
return root
|
||||||
|
|
@ -335,9 +341,38 @@ def BinarySearchTree(root):
|
||||||
################################################################################################
|
################################################################################################
|
||||||
def main():
|
def main():
|
||||||
|
|
||||||
LinkedList(None)
|
phone_book = []
|
||||||
HashTable([[] for _ in range(10)])
|
for i in range(1000):
|
||||||
BinarySearchTree(None)
|
phone_book.append(create_name_phone(i))
|
||||||
|
for _ in range(9000):
|
||||||
|
phone_book.append(create_name_phone(rnd.randint(0, 999)))
|
||||||
|
|
||||||
|
phone_book_not_sorted = phone_book.copy()
|
||||||
|
rnd.shuffle(phone_book_not_sorted)
|
||||||
|
|
||||||
|
phone_book_sorted = phone_book.copy()
|
||||||
|
phone_book_sorted = sort_list(phone_book_sorted)
|
||||||
|
replay = 10
|
||||||
|
|
||||||
|
|
||||||
|
Time_ll_not_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0}
|
||||||
|
Time_ll_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0}
|
||||||
|
|
||||||
|
for _ in range(replay):
|
||||||
|
time_ll_not_sorted = LinkedList(None, phone_book_not_sorted)
|
||||||
|
for i, key in enumerate(Time_ll_not_sorted):
|
||||||
|
Time_ll_not_sorted[key] += time_ll_not_sorted[i]/replay
|
||||||
|
print(Time_ll_not_sorted)
|
||||||
|
|
||||||
|
for _ in range(replay):
|
||||||
|
time_ll_sorted = LinkedList(None, phone_book_sorted)
|
||||||
|
for i, key in enumerate(Time_ll_sorted):
|
||||||
|
Time_ll_sorted[key] += time_ll_sorted[i]/replay
|
||||||
|
print(Time_ll_sorted)
|
||||||
|
|
||||||
|
|
||||||
|
#HashTable([[] for _ in range(10)])
|
||||||
|
#BinarySearchTree(None)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user