Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / эффективный поиск листьев нижнего уровня / 11 сообщений из 11, страница 1 из 1
13.07.2006, 11:06
    #33850158
man_555_as_a_guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эффективный поиск листьев нижнего уровня
Есть n-арное дерево. Любой узел может иметь только одного предка, зато n-потомков. В дерево есессно могут добавляться новые узлы, а также удаляться. Задача: поддерживать в актуальном состоянии ссылки или указатели (что именно рояли не играет) на листья самого нижнего уровня.

возможные варианты

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

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

3. проверять соседей до первого, у которого есть потомки, и НЕ помечать как лист нижнего уровня?

4. истина где-то рядом? :) мой кругозор на этом заканчивается

идеи? критика? поможите, люди добрые...
...
Рейтинг: 0 / 0
14.07.2006, 10:29
    #33853084
LordMAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эффективный поиск листьев нижнего уровня
Может стоить просто выбрать такой из стандартных способов хранения дерева, при котором получение данной информации (последний ли уровень) - является тривиальной операцией.
...
Рейтинг: 0 / 0
14.07.2006, 11:39
    #33853407
MX -- ALEX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эффективный поиск листьев нижнего уровня
man_555_as_a_guestЕсть n-арное дерево. Любой узел может иметь только одного предка, зато n-потомков. В дерево есессно могут добавляться новые узлы, а также удаляться. Задача: поддерживать в актуальном состоянии ссылки или указатели (что именно рояли не играет) на листья самого нижнего уровня.

возможные варианты

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

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

3. проверять соседей до первого, у которого есть потомки, и НЕ помечать как лист нижнего уровня?

4. истина где-то рядом? :) мой кругозор на этом заканчивается

идеи? критика? поможите, люди добрые...

это на 100% совпадает с механизмом,
реализованым в СУБД "CACHE" (или M3-LITE - бесплатный)

например, там сразу на каждом узле дерева уже есть признак
- он самый нижний или еще нет

и ряд эффективных команд для
сшивания-раскраивания-анализа-навигации деревьев

могу помочь c Вашей конкретной задачей

mx@enters.eu
...
Рейтинг: 0 / 0
14.07.2006, 14:01
    #33853963
nikname
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эффективный поиск листьев нижнего уровня
man_555_as_a_guestЕсть n-арное дерево. Любой узел может иметь только одного предка, зато n-потомков. В дерево есессно могут добавляться новые узлы, а также удаляться. Задача: поддерживать в актуальном состоянии ссылки или указатели (что именно рояли не играет) на листья самого нижнего уровня.

Где поддерживать? В памяти, в БД?
...
Рейтинг: 0 / 0
14.07.2006, 15:15
    #33854258
man_555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эффективный поиск листьев нижнего уровня
niknameГде поддерживать? В памяти, в БД?

Пока что я выбрал путь поддержки и хранения сего "хозяйства" в памяти, а точнее, нацелился на Boost Graph Library . Основные причины: уже реализованные некоторые алгоритмы на графах, и однопользовательское приложение. Хотя, может быть я и не прав, и стоит повнимательней присмотреться к СУБД... или.. к XML? ;) Идея с БД, конечно, интересная, но в любом случае, важна эффективность.

Насколько я понял Cache предоставляет свой собственный яп? Насколько сложно проходить в глубину граф при помощи SQL, или вообще, реализовывать некий алгоритм X на SQL? При всём этом БД предоставит единое хранилище для всех графов, тогда по мере роста объёма, насколько усложняться по времени алгоритмы?

LordMADМожет стоить просто выбрать такой из стандартных способов хранения дерева, при котором получение данной информации (последний ли уровень) - является тривиальной операцией.

Например? Поиск, операция, конечно, важная, но не за счёт полиномиального 'О ' остальных операций.
...
Рейтинг: 0 / 0
14.07.2006, 15:27
    #33854325
MX -- ALEX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эффективный поиск листьев нижнего уровня
man_555 niknameГде поддерживать? В памяти, в БД?

Пока что я выбрал путь поддержки и хранения сего "хозяйства" в памяти, а точнее, нацелился на Boost Graph Library . Основные причины: уже реализованные некоторые алгоритмы на графах, и однопользовательское приложение. Хотя, может быть я и не прав, и стоит повнимательней присмотреться к СУБД... или.. к XML? ;) Идея с БД, конечно, интересная, но в любом случае, важна эффективность.

Насколько я понял Cache предоставляет свой собственный яп? Насколько сложно проходить в глубину граф при помощи SQL, или вообще, реализовывать некий алгоритм X на SQL? При всём этом БД предоставит единое хранилище для всех графов, тогда по мере роста объёма, насколько усложняться по времени алгоритмы?

LordMADМожет стоить просто выбрать такой из стандартных способов хранения дерева, при котором получение данной информации (последний ли уровень) - является тривиальной операцией.

Например? Поиск, операция, конечно, важная, но не за счёт полиномиального 'О ' остальных операций.

CACHE работает на глубину 64 уровня
сотня деревьев до миллиона ветвей в каждом -
проблем точно не будет по скорости

дальше - не особо тестили

язык CACHE - стандартный MUMPS
например - взять следующую справа ПОЛНУЮ ветвь :
i=$q(@i)
где i - текущая ветвь
...
Рейтинг: 0 / 0
14.07.2006, 15:35
    #33854380
LordMAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эффективный поиск листьев нижнего уровня
man_555Например? Поиск, операция, конечно, важная, но не за счёт полиномиального 'О ' остальных операций.
Есть огромное количество способов хранения деревьев, и каждый имеет достоинства и недостатки, на эту тему есть масса книг и статей. Исходя из твоего вопроса, у меня возникло предположение, что ты используешь популярный (особенно в БД) подход: хранить в потомке ссылку на предка. При таком подходе изложенная тобой задача действительно актуальна, в чем и заключается один из недостатков такого подхода. Чтобы можно было посоветовать более подходящий вариант - напиши о своей задаче подробнее.
...
Рейтинг: 0 / 0
14.07.2006, 16:03
    #33854537
man_555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эффективный поиск листьев нижнего уровня
LordMADнапиши о своей задаче подробнее.

задача в целом такова: имеем граф, состоящий из трёх подграфов, два из них - т-арные деревья с одним предком у каждого узла, и связаные с третьим подграфом через вершины на самом нижнем уровне ;-)

Таким образом, деревьев два, и расти они могут как в ширину, так и в глубину. Третий подграф явл. ориентированным, но допускает в себе циклы, петли и параллельные дуги. Кроме того вершины могут иметь некоторые свойства вроде веса, итп.

Соответственно такую структуру нужно поддерживать, и извлекать из неё пользу, т.е. применять на ней некоторые заранее неизвестные алгоритмы. Ну про обходы я уже молчу - это само собой.

Кол-во вершин ~ 3-5K, но ничего неизвестно об их конфигурации
...
Рейтинг: 0 / 0
14.07.2006, 16:36
    #33854660
MX -- ALEX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эффективный поиск листьев нижнего уровня
man_555 LordMADнапиши о своей задаче подробнее.

задача в целом такова: имеем граф, состоящий из трёх подграфов, два из них - т-арные деревья с одним предком у каждого узла, и связаные с третьим подграфом через вершины на самом нижнем уровне ;-)

Таким образом, деревьев два, и расти они могут как в ширину, так и в глубину. Третий подграф явл. ориентированным, но допускает в себе циклы, петли и параллельные дуги. Кроме того вершины могут иметь некоторые свойства вроде веса, итп.

Соответственно такую структуру нужно поддерживать, и извлекать из неё пользу, т.е. применять на ней некоторые заранее неизвестные алгоритмы. Ну про обходы я уже молчу - это само собой.

Кол-во вершин ~ 3-5K, но ничего неизвестно об их конфигурации

если CACHE - то все просто - я живу в Лиепае
9416382
...
Рейтинг: 0 / 0
15.07.2006, 02:33
    #33855449
man_555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эффективный поиск листьев нижнего уровня
спасибо, MX -- ALEX, но проект некоммерческий :-)
...
Рейтинг: 0 / 0
17.07.2006, 09:00
    #33856908
MX -- ALEX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эффективный поиск листьев нижнего уровня
man_555спасибо, MX -- ALEX, но проект некоммерческий :-)

не проблема
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / эффективный поиск листьев нижнего уровня / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]