Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Вниз

Быстрый поиск в Tree по значению TPointer   Найти похожие ветки 

 
AndbyOne   (2002-09-04 11:53) [0]

Проблема стоит достаточно остро: найти ветку в Tree по значению (integer) которое хранится в Pointer ветки. Значение уникально(ID из базы). Простой перебор с сравниваем не подходит, т.к. в дереве 500000 записей и он 10 мин только перебирает. Может у кого будут, какие-нить идеи по оптимизации поиска. Буду очень признателен.


 
MBo   (2002-09-04 12:31) [1]

Если нельзя дерево отсортировать по этому значению, то увы...


 
Макс Черных   (2002-09-04 16:55) [2]

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

1. Делаем record с полями ID и TTreeNode.
2. При построении дерева в момент создания node
заполняем record и добавляем его в список - индекс.
Можно например TList использовать, только не
динамический массив - медленно на больших обьемах.
3. Сортируем этот лист по полю ID
4. Ну и обычный поиск половинным делением


 
AFrolov   (2002-09-04 17:00) [3]


> 4. Ну и обычный поиск половинным делением
Лучше не половинный а т.н. "золотое сечение" - скорость в среднем выше.


 
TTCustomDelphiMaster   (2002-09-04 20:04) [4]

Если вы строите дерево по данным из базы, то вероятно ваша база имеет примерно такую структуру:
ID - идентификатор
ParentID - идентификатор элемента верхнего уровня
... - другие поля.

Если база имеет такую структуру, то с помощью запросов к базе можно получить ID элементов верхнего уровня, т.е.
ID lev0
ID lev1
ID lev2
ID lev3 - искомый элемент.
Затем в дереве среди TreeNode нулевого уровня находите тот, у которого Date^ равно ID lev0. После этого просматриваете его Child в поиках TreeNode c ID lev1, и так далее пока не найдете искомый элемент. Скорость поиска будет зависеть от разветвленности дерева. Чем меньше элементов в ветви, а соответственно больше ветвей, тем быстрее поиск.


 
a413   (2002-09-04 20:15) [5]

А Б-Деревья тебя не устраивают? Они как раз под эту задачу подходят.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
6-50903
resident1984
2002-07-06 18:00
2002.09.16
NetBios имя хоста.


3-50630
@Ujin
2002-08-26 19:11
2002.09.16
как ???


7-50995
wistler
2002-07-04 22:56
2002.09.16
Программирование модема.


7-51007
Alex_i
2002-07-01 19:00
2002.09.16
Удаление ярлыков


3-50616
vvs1981
2002-08-26 14:25
2002.09.16
Как программно определить тип поля в таблице Intebase???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский