LINUX.ORG.RU

Как в файле хранить дерево?


0

0
есть дерево каждому узлу которого поставлено в соответсвие некоторое число.

порядок количества узлов ожидается более милиарда.

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

★★★★★
Если дерево бинарное - то можно в виде кучи. Максимальное время доступа - logN по основанию 2, где N - количество элементов.
naryl ★★★★★
()
Если операций доступа много и они частые то все равно придется все дерево в память грузануть, так что в принципе все равно как оно в файле будет, а если операций немного и нечастые то тогда тоже нет смысла огород городить :)
imp ★★
()
Ответ на: комментарий от imp
>Если операций доступа много и они частые то все равно придется все дерево в память грузануть, так что в принципе все равно как оно в файле будет,

все нереально. миллиард интов это четыре гига озу только на значчения а надо еще и обвязку:(

cvv ★★★★★
() автор топика
Ответ на: комментарий от imp
Как хорошо, что СУБД разрабатывают не такие, как ты.
anonymous
()
Ответ на: комментарий от cvv
Представь себе, без разницы. Не-бинарное на бинарное отображается элементарно.
anonymous
()
Дерево для поиска используется или для других целей? Нужно ли сохранять структуру этого дерева один-в-один? Нужна ли быстрая загрузка _всего_ дерева в память или быстрое выполнение определенных операций? Конкретнее задачу поставь.
satanic-mechanic
()
Ответ на: комментарий от satanic-mechanic
Насчет третьего вопроса после повторного прочтения все прояснилось. Остальные вопросы в силе.
satanic-mechanic
()
Ответ на: комментарий от tailgunner
tailgunner, это подойдет только если дерево нужно именно для поиска и структуру исходного дерева (если таковое вообще есть в исходной задаче, чего по постановке не понятно) сохранять не нужно.
satanic-mechanic
()
Ответ на: комментарий от satanic-mechanic
Без точной формулировки это лучший совет, на который я способен :) Если нужно сохранять структуру исходного дерева, то ХЗ... нужна полная формулировка задачи. Может, там нужна хеш-функция и mmap-окно.
tailgunner ★★★★★
()
Ответ на: комментарий от satanic-mechanic
>Дерево для поиска используется или для других целей?

1. для поиска
2. добавление новых узлов и ветвей между поисками тож должно быть быстрым

>Нужно ли сохранять структуру этого дерева один-в-один?

сохранять порядок веток не нужно

>Нужна ли быстрая загрузка _всего_ дерева в память или быстрое выполнение определенных операций? Конкретнее задачу поставь.
cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv
Тогда тебе действительно нужно Б/Б+ дерево или модификации. Поиск будет очень быстрым (структуры данных такого типа лежат в основе баз данных и поисковых систем). Добавлять рекомендую не по записи, а буферизируя в основной памяти в виде хоть бинарного дерева, а по накоплении N записей (где N достаточно велико) сливать с основной структурой во вторичной памяти.
satanic-mechanic
()
Ответ на: комментарий от tailgunner
Спасибо но мое дерево типа B а не B+.

причем с возможным количеством веток из одного узла порядка миллиона.

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

пока ничего умнее в голову не лезет

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv
Так и используй Б-дерево. Оно идеально ложится на твою задачу, в отличие от бинарного. При работе с диском узким местом является количество операций чтения и именно структуры типа Б-дерева оптимизируют поиск по этому критерию. Бинарное дерево будет слишком дорогостоящим.
satanic-mechanic
()
Ответ на: комментарий от cvv
> Спасибо но мое дерево типа B а не B+.

Несущественно.

> причем с возможным количеством веток из одного узла порядка миллиона

B-деревья с этим справляются. Кроме того, ты можешь просто вести подсчет количества ключей (упрощенно, хранить в дереве не struct { int key; } а struct { int key; int nkeys; }).

tailgunner ★★★★★
()
Ответ на: комментарий от cvv
Ещё можно посмотреть код прюфера - он самый компактный для деревьев. Возможно тебе подойдёт.
theos ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.