Skip to content

add report Sergej Naryshev - #27

Open
narysh wants to merge 5 commits into
gsvgit:mainfrom
narysh:main
Open

add report Sergej Naryshev#27
narysh wants to merge 5 commits into
gsvgit:mainfrom
narysh:main

Conversation

@narysh

@narysh narysh commented Jun 13, 2026

Copy link
Copy Markdown

No description provided.


В задачах анализа графов и обработки больших разрежённых матриц ключевую роль играет выбор эффективного внутреннего представления данных. Традиционные форматы вроде CSR (Compressed Sparse Row) обеспечивают высокую производительность статических операций, но плохо приспособлены к рекурсивным алгоритмам, характерным для функционального программирования. Альтернативный подход~--- использование деревьев квадрантов (quadtree), которые позволяют единообразно работать с данными на разных уровнях вложенности и естественным образом реализуют разрежённое хранение.

Библиотека QTreeFSharp~--- это реализация разрежённых векторов и матриц на основе квадродеревьев на языке F\#. Она предоставляет базовый набор операций линейной алгебры и графовых алгоритмов в парадигме Graph\-BLAS. В рамках данной работы выполнялось расширение функциональности библиотеки: добавлены операции фильтрации и кванторные проверки, необходимые для реализации более сложных графовых алгоритмов (например, выделение подмножества вершин по условию или проверка свойств графа без полного перебора).

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.

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

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{Целью работы} является доработка репозитория 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.

Точка.

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.

не совсем понял смысл
точка вместо запятой или цель сформулировать кратко?


\section{Особенности реализации}

\subsection{Схема работы с квадродеревьями}

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.

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


\subsection{Фильтрация}

\texttt{filter} принимает структуру данных (вектор или матрицу) и функцию-предикат, после чего строит новую структуру, куда попадают только те элементы, для которых предикат вернул \texttt{true}. Пустые листы (\texttt{Dummy}) игнорируются. Рекурсивный спуск по дереву позволяет обрабатывать только занятые узлы, а конденсация на выходе обеспечивает компактность результата. Это особенно важно для разрежённых данных, где большая часть элементов не удовлетворяет предикату~--- итоговая структура также остаётся разрежённой.

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.

М.... А кто тоакой Dummy?

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.

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


\subsection{Кванторные операции с коротким замыканием}

\texttt{exists} проверяет, встречается ли хотя бы один элемент, удовлетворяющий предикату (\texttt{||} по всем значениям). Если такой элемент найден, дальнейший обход дерева прекращается. \texttt{forall} проверяет, что все элементы удовлетворяют предикату (\texttt{\&\&} по всем значениям)~--- при нахождении первого неподходящего элемента обход также завершается досрочно. Короткое замыкание реализовано на уровне рекурсивного обхода: если левое поддерево уже дало ответ, правое не просматривается. В худшем случае (предикат истинен для всех элементов в exists или ни для одного в forall) выполняется полный обход, что эквивалентно filter.

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.

Почему это не частные случаи какого-нибудь find?

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
Owner

Choose a reason for hiding this comment

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

Для какого-нибудь --- это прям точно find. Для всех --- это отрицание find.


\section{Экспериментальная оценка}

\subsection{Условия проведения замеров}

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{itemize}
\item \textbf{Dense}~--- структуры, целиком заполненные единицами (максимальная нагрузка на квадродерево);

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{tabular}
\end{table}

Сравнение показывает, что разрежённые векторы обрабатываются быстрее плотных в 2.5--3 раза, разрежённые матрицы~--- в 9--12 раз. Это объясняется меньшим числом обходимых узлов квадродерева.

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.

Даладна!!!


Разница между exists и forall находится в пределах погрешности, поскольку при выбранных условиях (предикат верен для всех или ни для одного элемента) короткое замыкание не срабатывает, и оба метода выполняют полный обход. На реальных данных с неравномерным распределением значений эффект от короткого замыкания будет заметнее.

Разрежённое представление даёт существенный выигрыш во времени: для векторов~--- до 3 раз, для матриц~--- до 15 раз. Чем больше размер структуры, тем значимее становится разница, так как квадродерево эффективнее сжимает большие разрежённые данные.

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 Реализованы операции \texttt{filter}, \texttt{exists} и \texttt{forall} для разрежённых векторов и матриц на основе квадродеревьев.
\item В \texttt{exists} и \texttt{forall} внедрено короткое замыкание, позволяющее завершать обход досрочно.
\item Написаны 64 модульных теста для проверки корректности реализованных функций.
\item Проведены бенчмарки, которые подтверждают эффективность разрежённого представления: выигрыш по сравнению с плотным составляет до 3 раз для векторов и до 15 раз для матриц.

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
Owner

Choose a reason for hiding this comment

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

Нет. Я имел ввиду, что у замеров должна быть цель. Должен быть смысл. А с теоретической сложность ю так не работатет без соответствующего математического аппарата.

\toprule
Метод & N=64 & N=256 & N=1024 \\
\midrule
VectorDense & 2.8 & 11.5 & 57.1 \\

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{tabular}
\end{table}

Рост времени \texttt{filter} от N=256 к N=1024 составляет ≈5× для векторов (близко к $O(N)$) и ≈17× для плотной матрицы (близко к $O(N^2)$). Разрежённая матрица растёт медленнее, так как число ненулевых элементов линейно по N, а не квадратично.

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.

Есть \times

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:filters}
\end{figure}

Результаты \texttt{exists} и \texttt{forall} практически совпадают: при выбранных условиях short-circuit не срабатывает (худший случай), поэтому время соответствует $O(N^2)$ на плотных матрицах и $O(N+nnz)$ на разрежённых. В лучшем случае (первый же элемент удовлетворяет \texttt{exists} или не удовлетворяет \texttt{forall}) сложность составит $O(1)$. Выигрыш разрежённого представления (до 3× для векторов, до 15× для матриц) согласуется с отношением числа узлов полного дерева к числу занятых листьев.

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.

А как Вы выяснили, что оно квадрату соответствует?

@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.

А теперь по существу. То, что Вы сделали --- странно. А всё потому, что надо было заранее обсуждать результаты. Видимо, до сентября.

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.

3 participants