\input{preambule.tex} \begin{document} % --- ТИТУЛЬНЫЙ ЛИСТ (упрощенно) --- \begin{titlepage} \centering МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РФ \\ «Национальный исследовательский Нижегородский государственный университет им. Н.И. Лобачевского» \\ \vspace{4cm} \Large ОТЧЕТ К ЛАБОРАТОРНОЙ РАБОТЕ \\ \vspace{1cm} \large «Реализация и экспериментальное сравнение базовых структур данных на примере телефонного справочника» \\ \vspace{4cm} \flushright Выполнил: студент В. В. Пронин \\ Преподаватель: Н. С. Морозов \\ \vfill Нижний Новгород \\ 2024 \end{titlepage} \newpage \tableofcontents \newpage \section{Введение} Эффективность программных систем во многом определяется выбором способов организации данных в оперативной памяти. Задача разработки телефонного справочника является классическим примером, требующим баланса между скоростью вставки новых записей, поиском по ключу и эффективным удалением. В рамках данной работы исследуются три фундаментальные структуры данных, реализованные «с нуля» в процедурной парадигме программирования на языке Python: \begin{itemize} \item \textbf{Связный список (Linked List)} --- динамическая структура, позволяющая оценить базовые механизмы управления указателями и демонстрирующая линейную сложность операций $O(n)$. \item \textbf{Хеш-таблица (Hash Table)} --- ассоциативный массив, использующий хеширование для обеспечения прямого доступа к данным. Реализация позволяет изучить методы разрешения коллизий и преимущества константной сложности $O(1)$. \item \textbf{Двоичное дерево поиска (BST)} --- иерархическая структура, обеспечивающая логарифмическую скорость доступа $O(\log n)$ и поддерживающая упорядоченность данных «из коробки». \end{itemize} \textbf{Цель работы:} Изучить внутренние алгоритмы работы перечисленных структур, реализовать их без использования встроенных высокоуровневых контейнеров и экспериментально подтвердить теоретические оценки временной сложности на случайных и отсортированных наборах данных. \section{Реализация структур данных} \subsection{Связный список} % Здесь опишите логику ll_insert, ll_find и ll_delete \subsection{Хеш-таблица} % Опишите хеш-функцию и метод цепочек \subsection{Двоичное дерево поиска} % Опишите рекурсивные алгоритмы и проблему деградации \section{Методика эксперимента} Замеры производились для наборов данных объемом $N=500, 1000, 2000, 5000, 10000$ элементов. Использовались два сценария: перемешанные (\textit{shuffled}) и отсортированные по алфавиту (\textit{sorted}) записи. Каждая операция выполнялась 5 раз с последующим вычислением среднего арифметического значения с помощью функции \texttt{time.perf\_counter()}. \section{Результаты и анализ} Было проведено 5 опытов. \subsection{Связный список} \section{Заключение} % Ответ на вопрос о выборе структуры в реальной жизни \end{document}