Event Archive
D'Ar8c9l Dev Brief
Short code briefs, development notes, Rust articles and compact technical explanations.
#Code_Brief — Graphs in Rust

Граф как связь между идеей и кодом
G = (V, E)
Граф G = (V, E) — это способ описать объекты и связи между ними. Вершины V представляют важные для задачи сущности, а рёбра E показывают, как эти сущности связаны друг с другом.
Интуитивно граф можно понимать как карту отношений. Если вершины — это города, то рёбра показывают возможные маршруты. Если вершины — это задачи, то рёбра описывают зависимости. Если вершины — это сигналы или состояния, то рёбра показывают влияние одного элемента на другой.
Когда мы реализуем граф в Rust, мы превращаем эту идею в конкретную структуру данных. Программа должна уметь отвечать на вопросы: можно ли дойти из одной вершины в другую, сколько стоит путь, какие элементы связаны, в каком порядке выполнять действия и как меняется состояние системы.
Поэтому представление графа нужно выбирать под задачу. Для быстрой проверки существования ребра подойдёт структура с прямым доступом. Для частого обхода соседей лучше использовать списки смежности. Для работы с рёбрами как с отдельными объектами удобен плоский список рёбер. Для повторяющихся вычислений могут быть полезны матрицы или CSR-подобные форматы.
Rust помогает сделать эти решения явными. Владение, изменяемость и времена жизни заставляют заранее продумать, кто хранит данные, кто может их менять и как избежать ошибок со ссылками или устаревшими индексами.
Хорошая реализация графа не пытается быть универсальной для всего. Она честно показывает свой сценарий использования через названия типов, методов и выбранную структуру хранения.
Дополнение к прошлому посту про графы на Rust. Думал сделать статью в Telegraph, но быстро отказался от этой идеи, так как визуально это выглядело очень плохо. Потом переключился на PDF-файл, но нашёл решение намного лучше. Оно требует больше усилий, но, думаю, результат всё оправдает. Codex является незаменимым инструментом в моём обучении.
После работы начну делать карточки по матанализу. Может, скину сюда примеры того, как это выглядит. В любом случае продолжу набивать скилл с помощью документации.