2026-rff_mp/BolonkinNM/Task 1/docs/report.md
2026-05-23 18:45:47 +03:00

5.5 KiB
Raw Blame History

Отчёт по заданию 1 — структуры данных

Цель работы

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

  • связный список;
  • хеш-таблицу;
  • двоичное дерево поиска.

Также были выполнены измерения времени для операций insert, find, delete и построены графики по результатам эксперимента.

Реализованные структуры

Связный список

Узел хранится как словарь:

{"name": "Имя", "phone": "123", "next": None}

Хеш-таблица

Хранится как список бакетов фиксированной длины, где каждый бакет — голова связного списка или None.

Двоичное дерево поиска

Узел хранится как словарь:

{"name": "Имя", "phone": "123", "left": None, "right": None}

Для BST использованы итеративные операции, чтобы корректно работать и на отсортированных данных.

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

  • Количество записей: N = 10000
  • Режимы данных:
    • случайный порядок;
    • отсортированный порядок.
  • Каждое измерение повторялось 5 раз.
  • В CSV сохранены:
    • все отдельные замеры;
    • среднее время для каждой операции, структуры и режима.

Операции:

  • вставка всех записей;
  • поиск 100 существующих и 10 отсутствующих имён;
  • удаление 50 случайных имён.

Графики

insert

find

delete

Средние результаты

Режим Операция LinkedList HashTable BST Лучший результат
случайный insert 3.949566 0.208964 0.018028 BST
случайный find 0.033693 0.001534 0.000190 BST
случайный delete 0.016076 0.000727 0.000102 BST
отсортированный insert 2.998378 0.208710 4.163651 HashTable
отсортированный find 0.023923 0.001819 0.037987 HashTable
отсортированный delete 0.011258 0.000863 0.019363 HashTable

Анализ результатов

Влияние порядка входных данных на BST

На случайных данных BST работает значительно быстрее, чем на отсортированных. Это связано с тем, что при случайной вставке дерево остаётся ближе к сбалансированному состоянию.

На отсортированных данных дерево вырождается в цепочку, поэтому вставка становится медленной, а поиск и удаление тоже деградируют по времени.

Почему хеш-таблица почти не чувствительна к порядку

Хеш-таблица распределяет элементы по бакетам через хеш-функцию, поэтому сам порядок входа почти не влияет на скорость. Влияние может появляться только из-за коллизий, но в целом поведение остаётся близким к постоянному времени.

Почему связный список всегда медленен при поиске

Поиск в связном списке выполняется последовательным просмотром элементов. Поэтому при большом количестве записей приходится проходить много узлов, и операция остаётся линейной по времени.

Как удаление работает в каждой структуре

  • В связном списке нужно сначала найти нужный узел, затем переназначить ссылку.
  • В хеш-таблице сначала выбирается бакет, затем удаление выполняется внутри короткой цепочки.
  • В BST удаление зависит от числа потомков: если потомок один или ноль, операция простая; если два — нужно найти преемника.

Вывод

Для частых вставок и особенно частого поиска в реальной задаче чаще всего лучше подходит хеш-таблица.

Если важно получать данные в отсортированном виде, удобнее использовать BST.

Связный список подходит для маленьких объёмов данных или очень простых сценариев, но при большом числе записей он проигрывает по скорости поиска.