Pylance fixes
This commit is contained in:
parent
7026ad395d
commit
94bc3b8524
|
|
@ -37,7 +37,7 @@ def bst_find(root: dict|None, name: str) -> str|None:
|
||||||
if node != None:
|
if node != None:
|
||||||
return node['phone']
|
return node['phone']
|
||||||
|
|
||||||
def find_node_to_delete(root: dict, name: str) -> dict|None:
|
def find_node_to_delete(root: dict|None, name: str) -> dict|None:
|
||||||
"""Поиск в ширину."""
|
"""Поиск в ширину."""
|
||||||
while root != None:
|
while root != None:
|
||||||
if root['name'] == name:
|
if root['name'] == name:
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ def hash_fun(name: str, size: int) -> int:
|
||||||
n -= 1
|
n -= 1
|
||||||
return int(hashSum) % size
|
return int(hashSum) % size
|
||||||
|
|
||||||
def ht_insert(buckets: list, name: str, phone: str, blen:int = 50) -> list:
|
def ht_insert(buckets: list|None, name: str, phone: str, blen:int = 50) -> list:
|
||||||
"""Возвращает новый массив бакетов
|
"""Возвращает новый массив бакетов
|
||||||
Вычисляет индекс, вызывает ll_insert для соответствующего бакета.
|
Вычисляет индекс, вызывает ll_insert для соответствующего бакета.
|
||||||
Функция не меняет размер массива бакетов автоматически!"""
|
Функция не меняет размер массива бакетов автоматически!"""
|
||||||
|
|
@ -43,8 +43,8 @@ def ht_delete(buckets: list, name: str) -> list:
|
||||||
buckets[index] = ll_delete(buckets[index], name)
|
buckets[index] = ll_delete(buckets[index], name)
|
||||||
return buckets
|
return buckets
|
||||||
|
|
||||||
def ht_find(buckets: list, name: str) -> str:
|
def ht_find(buckets: list|None, name: str) -> str|None:
|
||||||
if buckets == []:
|
if buckets == [] or buckets == None:
|
||||||
raise ValueError("Длинна buckets должна быть больше 0")
|
raise ValueError("Длинна buckets должна быть больше 0")
|
||||||
|
|
||||||
size = len(buckets)
|
size = len(buckets)
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ def ll_find(head : dict|None, name: str) -> str|None:
|
||||||
currentNode = currentNode['next']
|
currentNode = currentNode['next']
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def ll_delete(head : dict|None, name: str) -> dict:
|
def ll_delete(head : dict|None, name: str) -> dict|None:
|
||||||
"""Удаляет узел, возвращает новую голову."""
|
"""Удаляет узел, возвращает новую голову."""
|
||||||
if head == None:
|
if head == None:
|
||||||
return None
|
return None
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,14 @@ names_pool = (
|
||||||
"Добрыня"
|
"Добрыня"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
_non_existent_names = [
|
||||||
|
"Ноль", "Целковый", "Полушка", "Четвертушка", "Осьмушка",
|
||||||
|
"Пудовичок", "Медячок", "Серебрячок", "Золотничок", "Девятичок"
|
||||||
|
]
|
||||||
|
assert set(names_pool).isdisjoint(set(_non_existent_names)), \
|
||||||
|
"В списке несуществующих имён существуют существующие имена сущностей"
|
||||||
|
names_pool_to_find = random.choices(names_pool, k=100) + _non_existent_names
|
||||||
|
|
||||||
def generate_phone(phone_len=11) -> str:
|
def generate_phone(phone_len=11) -> str:
|
||||||
# 88005553535
|
# 88005553535
|
||||||
return str(random.randint(10**phone_len, 10**(phone_len+1)-1))
|
return str(random.randint(10**phone_len, 10**(phone_len+1)-1))
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,36 @@
|
||||||
import time
|
import time
|
||||||
from typing import Callable, Any
|
from typing import Callable, Any
|
||||||
|
from task1.util.randomNames import names_pool_to_find
|
||||||
|
|
||||||
def _concrete_insert_tester(func: Callable[[Any, str, str], Any], records: list) -> float:
|
def test(records: list,
|
||||||
"""Исследует время работы функции вставки"""
|
insert_func: Callable[[Any, str, str], Any],
|
||||||
aboba = None
|
find_func: Callable[[Any, str], Any],
|
||||||
|
delete_func: Callable[[Any, str], Any]) -> dict:
|
||||||
|
data = None
|
||||||
|
|
||||||
|
# Вставка всех записей
|
||||||
start = time.perf_counter()
|
start = time.perf_counter()
|
||||||
for item in records:
|
for item in records:
|
||||||
aboba = func(aboba, name=item[0], phone=item[1])
|
data = insert_func(data, item[0], item[1])
|
||||||
end = time.perf_counter()
|
end = time.perf_counter()
|
||||||
|
insert_time = end - start
|
||||||
|
|
||||||
elapsed = end - start
|
# Поиск 110 случайных записей
|
||||||
return elapsed
|
start = time.perf_counter()
|
||||||
|
for name in names_pool_to_find:
|
||||||
|
find_func(data, name)
|
||||||
|
end = time.perf_counter()
|
||||||
|
find_time = end - start
|
||||||
|
|
||||||
def insert_tester(func_to_test: Callable[[Any, str, str], Any], records_shuffled, records_sorted) -> dict:
|
# Удаление 50 случайных записей
|
||||||
"""Возвращает словарь с временем сортировки в обоих режимах"""
|
start = time.perf_counter()
|
||||||
shuffled = _concrete_insert_tester(func_to_test, records_shuffled)
|
for name in names_pool_to_find:
|
||||||
sorted = _concrete_insert_tester(func_to_test, records_sorted)
|
data = delete_func(data, name)
|
||||||
|
end = time.perf_counter()
|
||||||
return {"Function": func_to_test.__name__,
|
delete_time = end - start
|
||||||
"shuffled": shuffled,
|
|
||||||
"sorted": sorted
|
return {
|
||||||
}
|
"insert_time" : insert_time ,
|
||||||
|
"find_time" : find_time ,
|
||||||
|
"delete_time": delete_time
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user