У меня есть направленный ациклический граф с узлами, которые представляют собой списки записей, которые соединяются с записями в других узлах. Вроде этого:
entry ]
entry--| ] node 1
entry | ]
----- |
entry<-| ] node 2
entry | ]
----- |
entry | ] node 3
entry--| ]
Порядок записей в узле фиксирован. Записи хранятся в массиве с абсолютными индексами записей, на которые они ссылаются. Для каждой записи может быть не более 1 ссылки, и каждый узел имеет как минимум 1 ссылку. (другими словами, это высокосвязный граф). Граф содержит примерно 100 000 записей, сгруппированных в 40 000 узлов.
Что мне нужно сделать, так это минимизировать максимальное расстояние между записями, переупорядочив узлы, чтобы я мог использовать относительные индексы для ссылок и сжимать базовую структуру данных.
Поскольку целью является сжатие и производительность, неприемлемы решения, добавляющие внешние данные (таблицы переходов, специальные элементы перехода в список). Мне очень нужен алгоритм переупорядочивания узлов, минимизирующий максимальное расстояние между записями. Какие-нибудь мысли?