Skip to content

add report from Taranukha Leonid - #19

Open
LeoN192 wants to merge 16 commits into
gsvgit:mainfrom
LeoN192:report
Open

add report from Taranukha Leonid#19
LeoN192 wants to merge 16 commits into
gsvgit:mainfrom
LeoN192:report

Conversation

@LeoN192

@LeoN192 LeoN192 commented Jun 12, 2026

Copy link
Copy Markdown

No description provided.

@gsvgit gsvgit left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Подобно чуть позже гляну, но графики лучше готовыми в чем-то типа matplotlib сделать.

{\Large \textbf{Реализация типа \enquote{Множество} на основе АВЛ-дерева на языке F\#}}\\[1.5cm]

\begin{flushright}
\begin{tabular}{rl}

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мне кажется, в шаблоне шапка иначе устроена?

\begin{document}

\begin{center}
{\large САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ}\\[0.3cm]

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Что? Следуйте шаблону.


\section{Постановка задачи}

Данная работа посвящена реализации неизменяемой структуры данных \enquote{Множество} на основе АВЛ-дерева на языке F\#. Проект выполняется в рамках открытого исследовательского сообщества Lamagraph и интегрируется в репозиторий QTreeFSharp --- прототип сетей взаимодействия для анализа данных методами линейной алгебры.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Неразрывные пробелы перед тире.
  2. "прототип сетей взаимодействия для анализа данных методами линейной алгебры" --- вообще нет.


Данная работа посвящена реализации неизменяемой структуры данных \enquote{Множество} на основе АВЛ-дерева на языке F\#. Проект выполняется в рамках открытого исследовательского сообщества Lamagraph и интегрируется в репозиторий QTreeFSharp --- прототип сетей взаимодействия для анализа данных методами линейной алгебры.

Фундаментальные графовые алгоритмы требуют эффективных структур для хранения уникальных элементов и выполнения теоретико-множественных операций.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Они "алгоритмы анализа графов".


Фундаментальные графовые алгоритмы требуют эффективных структур для хранения уникальных элементов и выполнения теоретико-множественных операций.

\textbf{Целью работы является} реализация структуры данных \enquote{Множество} с автоматической балансировкой и оценка ее производительности.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Само множество не балансируется.

Профилирование выполнялось с помощью библиотеки \verb|BenchmarkDotNet| (ОС Ubuntu 24.04.4 LTS, .NET 10.0.7, процессор Intel Core i5-12450H). Размер базового множества $A$ варьировался от $100$ до $100\,000$ элементов. Размер вторичного множества $B$ составлял $100$ и $10\,000$ элементов.

\subsection{Одиночные операции}
Результаты замеров для одиночных операций показывают сложность $O(\log N)$. Увеличение количества узлов на три порядка (со 100 до 100\,000) приводит к росту времени выполнения вставки с 582~нс до 1376~нс. Объем выделяемой памяти изменяется логарифмически от 840 до 2080 байт на операцию.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Результаты практических замеров крайне редко показывают теоретическую оценку.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Доказательство того, что на графике действительно что-то очень похожее на логарифм --- это занятие, требующее аккуратной работы с матстатом.

\item Реализована структура данных АВЛ-Множества на языке F\#.
\item Разработаны алгоритмы теоретико-множественных операций в трех вариантах (последовательный, обход, многопоточный).
\item Написаны модульные и property-based тесты.
\item Проведено профилирование, на основе которого выявлены условия применимости параллельного метода и метода обхода дерева.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Таки профилирование было?

\item Проведено профилирование, на основе которого выявлены условия применимости параллельного метода и метода обхода дерева.
\end{itemize}

Кодовая база и результаты тестов размещены в открытом доступе:

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Точка.


\newpage
\appendix
\section{Приложение: Результаты профилирования}

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Либо это ценно и в остновном тексте, либо нафиг удпалить.

\item Pull Request: \url{https://github.com/Lamagraph/QTreeFSharp/pull/17}
\end{itemize}

\section*{Литература}

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В шаблоне были примеры оформления литературы.


\section{Эксперименты}

Бенчмаркинг выполнялся с помощью библиотеки \verb|BenchmarkDotNet| (ОС Ubuntu 24.04.4 LTS, .NET 10.0.7, процессор Intel Core i5-12450H). Размер базового множества $A$ варьировался от $100$ до $100\,000$ элементов. Размер вторичного множества $B$ составлял $100$, $10\,000$ и $100\,000$ элементов для оценки производительности алгоритмов при различных масштабах данных.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

бенчмаркинг --- жаргон.


Бенчмаркинг выполнялся с помощью библиотеки \verb|BenchmarkDotNet| (ОС Ubuntu 24.04.4 LTS, .NET 10.0.7, процессор Intel Core i5-12450H). Размер базового множества $A$ варьировался от $100$ до $100\,000$ элементов. Размер вторичного множества $B$ составлял $100$, $10\,000$ и $100\,000$ элементов для оценки производительности алгоритмов при различных масштабах данных.

В таблице~\ref{tab:summary} представлены замеры, демонстрирующие крайние случаи алгоритмического поведения.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"крайние случаи алгоритмического поведения" -- чо?

\end{table}

\subsection{Одиночные операции}
Результаты замеров для одиночных операций соотносятся с предполагаемой сложностью $O(\log N)$. Увеличение количества узлов на три порядка (со 100 до 100\,000) приводит к росту времени выполнения вставки с 582~нс до 1376~нс. Объем выделяемой памяти изменяется логарифмически от 840 до 2080 байт на операцию.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нет.

\label{fig:parallel}
\end{figure}

Многопоточная реализация уступает последовательной во всех рассмотренных сценариях. При пересечении множеств $10\,000 \times 100\,000$ последовательный алгоритм выполняется за $15,4$~мс, в то время как параллельный на четырех потоках~--- за $354,3$~мс. Снижение производительности обусловлено накладными расходами пула потоков на планирование множества микрозадач и интенсивной работой сборщика мусора.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Как выяснили, в чём именно проблема с парарллельностью? Может она у Вас просто неправильно сделана.

\label{fig:parallel}
\end{figure}

Многопоточная реализация уступает последовательной во всех рассмотренных сценариях. При пересечении множеств $10\,000 \times 100\,000$ последовательный алгоритм выполняется за $15,4$~мс, в то время как параллельный на четырех потоках~--- за $354,3$~мс. Снижение производительности обусловлено отсутствием порога отсечения\footnote{\textbf{Порог отсечения} --- размер задачи, ниже которого накладные расходы на создание и планирование новых потоков начинают снижать производительность. По достижении этого порога необходимо начать последовательное выполнение.} для \verb|Async.Parallel| в данной реализации. Накладные расходы на планирование тысяч микрозадач и паузы сборщика мусора из-за возросшего потребления памяти (с 18 до 100,2~МБ) многократно увеличивают время выполнения.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Пробел. Тире.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сделано

Добавление & $100 \times \text{---}$ & Sequential & 582 нс & 880 Б & 1.00 (Эталон) \\
Добавление & $100\,000 \times \text{---}$ & Sequential & 1376 нс & 2080 Б & $\approx 2.3\times$ \\
\midrule
Пересечение & $100\,000 \times 100$ & Sequential & 318 мкс & 447 КБ & 1.00 (Эталон) \\

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше всё в одинаковых единицах указывать. Ещё и с одинаковой точностью. Проще анализировать и сравнивать. А то переводи нано в микро и обратоно.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мкс перевел в нс, но мс оставил

\end{table}

\subsection{Одиночные операции}
Анализ результатов замеров показывает логарифмический характер роста времени выполнения базовых операций. Отношение максимальных высот АВЛ-деревьев (возможных) для $N=100\,000$ и $N=100$ составляет $\approx 2,5$ ($\log_2 10^5 / \log_2 10^2$). На практике время выполнения операции добавления выросло с 582~нс до 1376~нс (коэффициент роста $\approx 2,36$), что согласуется с ожидаемым поведением деревьев и их высотами. Объем выделяемой памяти изменяется от 840 до 2080 байт на операцию.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"логарифмический характер" --- почему?

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если что, "$\approx 2,5$" --- не пояснение.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Переделал формулировку

\label{fig:parallel}
\end{figure}

Многопоточная реализация уступает последовательной во всех рассмотренных сценариях. При пересечении множеств $10\,000 \times 100\,000$ последовательный алгоритм выполняется за $15,4$~мс, в то время как параллельный на четырех потоках~--- за $354,3$~мс. Снижение производительности обусловлено отсутствием порога отсечения\footnote{\textbf{Порог отсечения} --- размер задачи, ниже которого накладные расходы на создание и планирование новых потоков начинают снижать производительность. По достижении этого порога необходимо начать последовательное выполнение.} для \verb|Async.Parallel| в данной реализации. Накладные расходы на планирование тысяч микрозадач и паузы сборщика мусора из-за возросшего потребления памяти (с 18 до 100,2~МБ) многократно увеличивают время выполнения.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Так может стоит сделать порог? А то "я сделал фигню, даже знаю, как сделать не фигню, но делать, конечно же, не буду".

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я добавил порог, теперь параллельный стал быстрее
Сейчас буду пушить это в основной репозиторий

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Быстрее не просто в общем, а именно последовательной реализации

Comment thread main.tex Outdated
{Ekaterina_Arzamaszeva/Ekaterina_Arzamaszeva_report.pdf}
\end{document} No newline at end of file
\includepdf[pages=-,
addtotoc={1, section, 1, {Тарануха Леонид Антонович, Реализация типа "Множество" на основе АВЛ-дерева на языке F\#}, taranukha_leonid}]

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это неправильные кавычки.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Исправил

Реализовано три подхода к операциям над множествами.

\begin{enumerate}
\item \textbf{Последовательный (Sequential):} Базовый алгоритм рекурсивного слияния. Использует функции \verb|split| (разделение дерева по ключу) и \verb|join| (слияние). Является эталоном производительности.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ай. Ну откуда тут двоеточие?

\toprule
\textbf{Операция} & \textbf{Размеры ($A \times B$)} & \textbf{Метод} & \textbf{Время} & \textbf{Память} & \textbf{Отношение} \\
\midrule
Добавление & $100 \times \text{---}$ & Sequential & 582 нс & 880 Б & 1.00 (Эталон) \\

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. А с памятью?
  2. Ну зачееем. Во-первых, единицы не надо писать в каждой ячейке. Во-вторых, выберите что-то, что позволит в одном масштабе всё записать. Может секунды с двумя-тремя знаками после запятой. Если проблема, может дело в том, что эксперименты странно поставлены? В чём цель эксперимента.

\label{fig:parallel}
\end{figure}

Введение порога отсечения (granularity threshold) позволило многопоточной реализации продемонстрировать высокую эффективность. Алгоритм прекращает создание асинхронных задач и переключается на последовательное выполнение для поддеревьев с высотой $h < 10$.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А это точно лучшее решение? Может стоило ограничиения привязать к доступным ядрам/потокам?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants