![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
RussoTuristo |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: ![]() ![]() ![]() |
Тема: построение оптимального дерева бинарного поиска.
Дерево у меня строится, строится график эффективности алгоритма, а вот с выводом дерева трудности! Может кто-нибудь подскажет, как правильно его реализовать с помощью TTreeView... Помогите, пожалуста, вот текст программы и в архиве сама программа. unit Unit1; Прикрепленные файлы ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Это теперь так принято, выкладывать в тексте одну версию программы, а в архиве - другую? Чтоб нам тут было чем заняться, и повосстанавливать в точности все, что ты имел в виду в ТРЕТЬЕЙ версии, с которой ты работал, да? Где в архиве у тебя BuildTree? Что вообще делает та программа, которую ты прилепил? Она ж не строит ничего...
Зато EXE-шник свой со всеми временными файлами ты заставляешь скачивать... Зачем оно надо, не расскажешь? Четверть мегабайта траффика - коту под хвост. Лучше бы выложил окончательную версию кода... |
RussoTuristo |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: ![]() ![]() ![]() |
Извини пожалуйста, очень невнимательный ... Хотя разницы между этими программами почти нету ... Если не сложно, посмотри эту версию (она выложена кодом выше), TTreeView - везде написано, что не сложно сделать, а на деле что-то не то ...
Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
А теперь внимание - вопрос. Ты написал, что
Цитата Дерево у меня строится, строится график эффективности алгоритма, а вот с выводом дерева трудности! Ты уверен в этом? Уверен, что ты не пытаешься построить дерево, а действительно его строишь, причем строишь правильно? Тогда еще один вопрос: а что дерево содержит, и КАК обращаться к нему, если ты зачем-то удаляешь на каждой итерации корень дерева. Это у тебя получается игра "кто больше впустую израсходует памяти".Ну, если ты так уверен, что дерево строится - отображай его: procedure TreeToView(parentNode: TTreeNode;Передавай первым параметром nil, вторым - указатель на дерево, и третьим - собственно TreeView, куда выводить дерево. Посмотрим, что у тебя получится... Откуда вызывать это все - решать тебе, я логику работы твоей программы не понимаю. |
RussoTuristo |
![]()
Сообщение
#5
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо, твоя подсказка принесла НЕКОТОРЫЕ плоды ... но пока не те, что нужны! Каждый раз удалять корень необходимо, потому что мне нужно было сделать оценку эффективности, а для этого нужно оценить эффективность n раз (например 100 элементов, и начиная с 1 до 100 для каждого случая строить дерево и считать количество итераций). А вывести дерево можно 1 раз (только для того, чтобы показать, что я это могу
![]() unit Unit1; Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Хм... Странно. Что-то глючит реализация Items.AddChild по-моему, лезет не туда, куда ей вообще надо лезть, и портит память. Если ДО нее T.left = nil, то после - откуда-то T.left = $3, и вылет с исключением EAccessViolation... Вот так - работает стабильно:
procedure TreeToView(parentNode: TTreeNode;В результате ты получаешь в TreeView1 единственный элемент, на который указывает tree. А что ты хотел, ты ж BuildTree(tree,0,n);просто берешь и отсекаешь, указатели-то теряются... И дерево превращается в один единственный элемент, хотя память по прежнему занята. Теперь понятнее стало, почему я говорил, Цитата Это у тебя получается игра "кто больше впустую израсходует памяти". ? |
RussoTuristo |
![]()
Сообщение
#7
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: ![]() ![]() ![]() |
Да, понял, спасибо большое! Указатели уже много крови попили! Все время с ними какие-то проблемы, хотя в большинстве случаев по моей же глупости ...
|
![]() ![]() |
![]() |
Текстовая версия | 8.07.2025 13:29 |