Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > сериализация дерева


Автор: mrgloom 18.7.2011, 17:08
как производить сериализацию дерева? (quadtree)

Автор: boostcoder 18.7.2011, 17:34
каждый нод по отдельности и скармливать http://www.boost.org/doc/libs/1_47_0/libs/serialization/doc/index.html.

Автор: mrgloom 18.7.2011, 17:38
буст не охота подрубать.

я так понял надо делать как то обход дерева просто и записывать на диск.


Автор: borisbn 18.7.2011, 17:43
Цитата(mrgloom @  18.7.2011,  17:38 Найти цитируемый пост)
я так понял надо делать как то обход дерева просто и записывать на диск.

ну, в общем - правильно. mrgloom, а в чём проблема-то ?

Автор: bsa 18.7.2011, 17:46
Цитата(mrgloom @  18.7.2011,  17:38 Найти цитируемый пост)
я так понял надо делать как то обход дерева просто и записывать на диск.

вроде того. только еще бы следовало сохранить связи. Я бы сохранял каждый узел так: <данные> <количество подузлов> <подузел1> ... <подузелN> ....

Автор: borisbn 18.7.2011, 18:12
и ещё один момент - если позволяет объём и скорость (объём небольшой - килобайты, скорость не важна - делается один раз при выходе из программы), то стОит сохранять в текстовом виде - пока отлаживаешься гораздо удобнее контролировать. Чтение будет чуть более муторное, но на это, думаю, стОит пойти.

Автор: null56 23.7.2011, 02:59
буквально недавно такую задачу решал, сделал так
http://www.cs.usfca.edu/~brooks/S04classes/cs245/lectures/lecture11.pdf

Автор: spyswamp 25.7.2011, 10:47
Это же классический алгоритм обхода дерева (погугли, смотря какое у тебя там дерево в итоге получается). Туда прогнал - сохранилось, обратно - восстановилось.

Добавлено через 36 секунд
Упс, вроде, выше на него ссылка. smile Никак не привыкну к графике форума, половину текста глаз не улавливает. :(

Автор: baldina 25.7.2011, 11:43
если дерево полное, его можно хранить в массиве аналогично полному двоичному дереву:
потомки i-го узла имеют индексы 4i, 4i+1, 4i+2, 4i+3
родитель i-го узла имеет индекс i/4 (целая часть)

Добавлено через 10 минут и 42 секунды
Цитата(bsa @  18.7.2011,  17:46 Найти цитируемый пост)
вроде того. только еще бы следовало сохранить связи. Я бы сохранял каждый узел так: <данные> <количество подузлов> <подузел1> ... <подузелN> .... 

если дерево единообразно сохраняется, то и восстанавливается однозначно. если узел может иметь разное число потомков, разумно использовать маркеры, как у null56.

Добавлено через 12 минут и 44 секунды
Цитата(mrgloom @  18.7.2011,  17:38 Найти цитируемый пост)
как то обход дерева

если связи хранятся неявно, то в глубину

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)