From 5343261de36ee89908fac1eb614790254d0f4f14 Mon Sep 17 00:00:00 2001 From: ivanchenkoam Date: Sat, 23 May 2026 16:35:05 +0300 Subject: [PATCH] =?UTF-8?q?[1]=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=B8=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=80=20?= =?UTF-8?q?=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ivanchenkoam/laba1.txt | 92 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/ivanchenkoam/laba1.txt b/ivanchenkoam/laba1.txt index 65e4aa7..0a7132a 100644 --- a/ivanchenkoam/laba1.txt +++ b/ivanchenkoam/laba1.txt @@ -236,4 +236,94 @@ def bst_list_all(root: Optional[Dict]) -> List[Tuple[str, str]]: records.sort(key=lambda x: x[0]) - return records \ No newline at end of file + return records + +def generate_records(n: int) -> List[Tuple[str, str]]: + """Генерация записей""" + records = [(f"User_{i:05d}", f"+7-999-{i:07d}") for i in range(n)] + return records +def measure_insertion(structure_type: str, data: List[Tuple[str, str]], + ht_size: int = 1000) -> float: + """Замер времени вставки""" + start = time.perf_counter() + + if structure_type == "LinkedList": + head = None + for name, phone in data: + head = ll_insert(head, name, phone) + + elif structure_type == "HashTable": + buckets = ht_create(ht_size) + for name, phone in data: + ht_insert(buckets, name, phone) + + elif structure_type == "BST": + root = None + for name, phone in data: + root = bst_insert(root, name, phone) + + end = time.perf_counter() + return end - start + + +def measure_find(structure_type: str, data: List[Tuple[str, str]], + existing_names: List[str], missing_names: List[str], + ht_size: int = 1000) -> Tuple[float, Any]: + """Замер времени поиска (возвращает время и структуру для удаления)""" + # Сначала создаём структуру + if structure_type == "LinkedList": + head = None + for name, phone in data: + head = ll_insert(head, name, phone) + + start = time.perf_counter() + for name in existing_names + missing_names: + ll_find(head, name) + end = time.perf_counter() + return end - start, head + + elif structure_type == "HashTable": + buckets = ht_create(ht_size) + for name, phone in data: + ht_insert(buckets, name, phone) + + start = time.perf_counter() + for name in existing_names + missing_names: + ht_find(buckets, name) + end = time.perf_counter() + return end - start, buckets + + elif structure_type == "BST": + root = None + for name, phone in data: + root = bst_insert(root, name, phone) + + start = time.perf_counter() + for name in existing_names + missing_names: + bst_find(root, name) + end = time.perf_counter() + return end - start, root + + +def measure_delete(structure_type: str, structure: Any, + names_to_delete: List[str]) -> float: + """Замер времени удаления""" + start = time.perf_counter() + + if structure_type == "LinkedList": + head = structure + for name in names_to_delete: + head = ll_delete(head, name) + + elif structure_type == "HashTable": + buckets = structure + for name in names_to_delete: + ht_delete(buckets, name) + + elif structure_type == "BST": + root = structure + for name in names_to_delete: + root = bst_delete(root, name) + + end = time.perf_counter() + return end - start