2026-rff_mp_ViniuchukAN/vinichukan/docs/report_task1.md

2.6 KiB
Raw Blame History

Отчёт по заданию 1

Структуры данных: LinkedList, HashTable, BST

Ветка: Task1(vinichukan)


1. Цель работы

Реализовать три структуры данных «с нуля» в процедурной парадигме:

  • связный список
  • хеш‑таблица
  • двоичное дерево поиска (BST)

и экспериментально сравнить их производительность на операциях:

  • insert
  • find
  • delete
  • list_all

2. Реализованные структуры данных

Код расположен в папке src/:

  • linked_list.py
  • hash_table.py
  • bst.py
  • benchmark.py

Все структуры реализованы вручную, без использования классов.


3. Методика эксперимента

3.1. Генерация данных

Создано N = 10 000 записей вида:

Подготовлены два набора:

  • records_shuffled — случайный порядок
  • records_sorted — отсортированные по имени

3.2. Замеры времени

Использовался time.perf_counter().

Для каждой структуры и каждого режима измерялись:

  • время вставки всех элементов
  • время поиска 110 элементов
  • время удаления 50 элементов

Каждый эксперимент повторён 5 раз, результаты усреднены.


4. Результаты экспериментов

Structure Mode Operation Time (sec)
LinkedList shuffled insert 3.3624
HashTable shuffled insert 0.2036
BST shuffled insert 0.0205
LinkedList sorted insert 2.8639
HashTable sorted insert 0.1816
BST sorted insert 5.2378

5. График сравнения

import matplotlib.pyplot as plt

structures = ["LinkedList", "HashTable", "BST"]
shuffled = [3.3624, 0.2036, 0.0205]
sorted_data = [2.8639, 0.1816, 5.2378]

plt.figure(figsize=(10,6))
plt.bar([s + " (shuffled)" for s in structures], shuffled, label="shuffled")
plt.bar([s + " (sorted)" for s in structures], sorted_data, label="sorted")

plt.ylabel("Time (seconds)")
plt.title("Insert Performance Comparison")
plt.xticks(rotation=45)
plt.legend()
plt.tight_layout()
plt.show()