|
|
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
Подскажите ещё пожалуйста такой вопрос: как хранить огромное дерево? в базе данных? или есть специальные структуры для этого (именно для больших деревьев)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 17:06:23 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
Вопрос задан неточно ИМХО. В чем собственно задача? Дерево - средство или цель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 18:11:20 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
Средство конечно. Для метода ветвей и границ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 22:40:50 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
vinger4Средство конечно. Для метода ветвей и границ. Ветвйе чего? дерева? границ каких? -- государственных? так вроде они и так охраняются Модератор: умничают в другом месте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 23:22:22 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
очень смешно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 23:33:21 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
Распилить и в сарай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 23:46:44 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
vinger4, может быть не стоит хранить все дерево? (я касательно данного метода говорю) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2009, 00:24:33 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
optimizer , скорее всего Вы правы. Однако всё равно придётся хранить самые последние узлы у каждой ветви. Размеры, конечно, будут значительно меньше. Благодарю за подсказку! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2009, 00:31:47 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
я так понял хотите использовать обход в ширину (breadth-first search). Не рассматривали обход в глубину (depth‑first search) (опять касательно МВГ)? В обходе в глубину потребуется стек. Можно воспользоваться готовым стеком - стеком вызовов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2009, 02:32:31 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2009, 15:35:40 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
> огромное дерево - как хранить? Точно так же как и крохотное: в виде массива векторов vector<int> a[50000000] , где в векторе a[i] все дети вершины i. + int b[50000000], где в b[i] родитель вершины i ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2009, 16:54:28 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
В базах данных обычно деревья хранят так: idparent_idcomment0nullКорневая вершина10Дочерняя20Дочерняя31Дочерняя 2 уровня id, и parent_id должны быть проиндексированы. Такая форма чрезвычайно простая, компактная. У неё один недостаток. Движение от корня к самому дальнему потомку, и выборка всех потомков узла обычно не такое быстрое, как в файловой системе например. Расход памяти не берём в расчёт т.к. для БД это не особо принципиально. По моему, это называется "инверсный список". Хотя и могу ошибаться в определении. Если дерево укладывается в оперативную память - то обычно создают структуру "узел" (node), где перечислены все атрибуты узла, со списком указателей на дочерние узлы. У неё почти нет недостатков кроме расхода памяти (особенно если используются 64bit указатели). И нужно быть внимательным при удалении узлов. Т.е. не забывать вызвать деструкторы для всех потомков чтобы не создавать memory leaks. Еще один интересный вариант реализации узла - вместо списка указателей создают всего два указателя. Указатель "вниз". И указатель "вправо". Получаем дерево, которое концептуально похоже на память Lisp машины. С такми деревом можно делать много интересных алгоритмических штуковин. Хотя среднее количество узлов будет чуть больше чем в предыдущем варианте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2009, 19:19:05 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
vinger4Подскажите ещё пожалуйста такой вопрос: как хранить огромное дерево? в базе данных? или есть специальные структуры для этого (именно для больших деревьев)?Хранить в базе данных, одна из функций БД именно хранение. Потом если очень надо, можно во время работы копировать в структуру которая вся в памяти. А каков размер огромного дерева? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2009, 15:19:02 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
А для чего хранить? Что с ним потом делать? Какой объем данных, какие операции, какие требования к производительности и скорости отклика? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2009, 01:24:43 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
Вообще-то разве XML файлы не приспособлены для хранения деревьев? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2009, 19:46:42 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
VladConnXML файлы и vinger4огромное дерево вещи несовместимые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2009, 17:40:35 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
Сержвещи несовместимые. Хранить можно. Но работать с XML-файлом в режиме online-транзакций не представляется возможным. Практически все имплементации XMLDocument пересоздают документ заново при корректировке всего-лишь одного атрибута. Вывод - XML-технология - это НЕ АЛЬТЕРНАТИВА БД. Это просто формат ХРАНЕНИЯ данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2009, 20:27:54 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
MUMPS (например cache', MSM, MiniM) специально предназначены для хранения деревьев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2009, 15:44:36 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
AhillesMUMPS (например cache', MSM, MiniM) специально предназначены для хранения деревьев. Благодарю за подсказку! Будем смотреть! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2009, 16:09:24 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
vinger4AhillesMUMPS (например cache', MSM, MiniM) специально предназначены для хранения деревьев. Благодарю за подсказку! Будем смотреть! Смотри, сильно не углубляйся. Это целая отрасль. Кст. было несколько интересных обсуждений здесь на тему MUMPS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2009, 17:33:51 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
Посмотри в сторону HierarchyID (mssql2008) http://msdn.microsoft.com/en-us/library/bb677290.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2009, 12:00:23 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
А на каком языке надо написать процедуру сохранения? (-; Для C++ мы сделали так: 1. Открыть файл для записи. 2. Отступить 4 байта - сюда запишем кол-во блоков в файле. 3. Выделяем буффер, мегабайт на 10 - это будет один блок данных. 4. Отступаем 4 байта - сюда запишем кол-во записей (узлов дерева) в этом блоке. 5. Начинаем перебирать все узлы дерева, откладывать в буффер в виде последовательности байт в нашем формате каком-то. 6. Как буффер забился - скинуть счётчик лёгших в этот буффер записей в начало буффера (смещение 0), скинуть весь буффер в файл одним вызовом write. Это будет блок. Увеличить число скинутых блоков. 7. Как только кончились все узлы в дереве, скинуть последний недоделанный блок по всем правилам и в начало файла записать 4 байта = кол-во скинутых в файл блоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2009, 00:46:31 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
nu89.... 7. Как только кончились все узлы в дереве, скинуть последний недоделанный блок по всем правилам и в начало файла записать 4 байта = кол-во скинутых в файл блоков. Ну и зачем такая конкретика? Лучше объясните топик-стартеру в чём будет преимущество вашего способа по сравнению с XML. А-то очевидно только усложнение... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2009, 16:31:57 |
|
||
|
огромное дерево - как хранить?
|
|||
|---|---|---|---|
|
#18+
Ну преймущество в скорости только) Нам нужно было периодически скидывать всё это дерево в файл (резервирование). Раз в 10 минут. Кол-во узлов в дереве было - от 1 до 200 млн, хранились только числа и счётчики всякие, занимало до 32 гигов RAM... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2009, 08:08:46 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=113&tid=1344066]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
60ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
33ms |
get tp. blocked users: |
2ms |
| others: | 186ms |
| total: | 309ms |

| 0 / 0 |
