среда, 12 октября 2016 г.

Quatro: формат линейного представления графа

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

Связи хранятся в виде одного файла.
Файл содержит двоичные числа одинаковой разрядности.
Первое число - единица и одновременно является идентификатором первого узла. Это обстоятельство позволяет легко определить разрядность остальных чисел.
Файл не может содержать болше чисел, чем значение самого большого из них.
Признак идентификатора узла - нечётное число равное своему порядковому номеру в файле.
Признак связи - нечётное число отличное от своего порядкового номера в файле. Это число равно одному из имеющихся в файле идентификаторов узлов.
В узле без связей сразу после идентификатора записан ноль.
В узле со связями сразу после идентификатора следует число с порядковым номером связи в файле.
В последней связи узла сразу после идентификатора другого узла записан ноль.
В прочих связях узла после идентификатора другого узла записан порядковый номер следующей связи.
На месте удалённой связи записываются два числа со значением ноль. Предыдущая связь переключается на следующую за удалённой.


Значения хранятся в отдельных файлах. В качестве имени файла берётся идентификатор соответствующего узла.

Идентификатор узла определяется по хэшу значения.

Новые узлы и связи записываются в конец файла.  Добавление связи состоит из нескольких этапов:
1) последняя связь проверяется на возможность записи (ноль - в качастве ссылки на следующую связь)
2) связь блокируется (единица - в качастве ссылки на следующую связь)
3) в конец файла дописывается связь с другим узлом (и ноль - в качастве ссылки на следующую связь)
4) в последнюю связь записывается вместо единицы порядковый номер добавленной ссылки, после чего добавленная ссылка считается последней





Комментариев нет:

Отправить комментарий