Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Насшет рекурсии


Автор: Ak47black 9.5.2007, 16:46
Вообшем у вопрос связанный с рекурсией.
Наверняка все юзали какдато поиск в Regedit.exe, там он осуществляется рекурсией.
Как рекурсию сделать мне понятно, а как остановить на какомто месте, а потом возобновить мне непонятно.
Тоесть там как происходит: например если элемент найден то поиск останавливается ,а по нажатию F3 он продолжаеться.
Я хочю тоже самое.

Вопрос :
  как остановить на какомто месте, а потом возобновить  рекурсию.

Автор: Romikgy 9.5.2007, 18:07
Цитата(Ak47black @  9.5.2007,  15:46 Найти цитируемый пост)
 как остановить на какомто месте

при выполнении условия твоего

Цитата(Ak47black @  9.5.2007,  15:46 Найти цитируемый пост)
а потом возобновить  рекурсию

имхо ссылку сохранять , где остановленно (или полный путь с ключу как в регедите ) имхо

Автор: Letov 9.5.2007, 18:10
Например, в реестре создать ссылку на место, где остановился, а потом по ней начинать поиск. Она будет сохраняться и после выхода из программы.

Автор: Sunvas 9.5.2007, 18:57
Ak47black, нужно всего лишь грамотно написать процедуру рекурсии - т.е. передавать путь откуда нужно начинать поиск. А далее следуй вышеизложенным постам.

Автор: MetalFan 9.5.2007, 18:59
с чего ты взял, что рекурсией?
например для древовидной структуры можно реализовать функцию Next( ANode ), которая будет всегда возвращать следующий узел в независимости от структуры дерева(например, как в VirtualTree). т.о. для поиска достаточно вызывать Next, пока не найдешь нужный узел...

Автор: Ak47black 9.5.2007, 19:39
Я не с TlistViewом работаю, а напримую с реестром.

Автор: MetalFan 9.5.2007, 19:46
Ak47black, какая разница, c чем работаешь? алгоритм можно и для реестра написать...

Автор: Ak47black 9.5.2007, 19:50
MetalFan, ну вообше-то да так можно. Шас буду пробовать)

Автор: Yanis 9.5.2007, 21:00
Извините, что вот так вот вмешиваюсь в ваш разговор.
Я со http://rouse.drkb.ru/files/regfind.zip просто к вам.
Примерчик от Розыча smile

Автор: Ak47black 9.5.2007, 21:20
Yanis, я смотрел уже этот пример  smile , пример неплохой только остановки там нету.

Автор: Yanis 9.5.2007, 21:31
Не совсем понимаю в чём сложность, что бы запомнить ветку на которой остановились, а потом продолжить поиск от неё?

Автор: Ak47black 10.5.2007, 21:30
Yanis, только как это осушествить.
Рекурсии непредставляю как ,а при помоши нахождения Next пети скорость очень прохая 
http://forum.vingrad.ru/forum/topic-150510.html

Автор: Ak47black 11.5.2007, 15:35
Ну народ подскажите чтонибудь ато я тут невижу совсем выхода.  smile 

Автор: Yanis 11.5.2007, 18:40
Цитата(Ak47black @  11.5.2007,  16:35 Найти цитируемый пост)
Ну народ подскажите чтонибудь ато я тут невижу совсем выхода.

Чем больше тебе подскажут, тем слепее ты будешь.

Автор: Ak47black 11.5.2007, 18:46
Ну тут все дело в оптимизации.
Два тестовых уже набрал ,но оба очень медлено переберают. 60-32 ms
Знал бы хоть в какую сторону делать, то бы сделал уже всё перепробовал.

Автор: Yanis 11.5.2007, 18:59
60 ms это очень быстро даже.

Автор: Ak47black 11.5.2007, 19:04
Ну для сравнения 
Поиск в Regedit.exe примерно 20-30 сек (я имею ввиду полный)
Поиск если при помоши моей проги примерно 10-20 мин :(

Автор: Yanis 11.5.2007, 19:38
Ak47black,
Окстись, что за бред ты несёшь?
ms это что? Напиши мне расшифровку.

Автор: Ak47black 11.5.2007, 19:54
Вот так я делаю 
Код

    TimeElapled.Caption := Format( 'Calc Time: %.2dhh %.2dmm %.2dss %.3dms',
                                 [lTC div (3600*1000), lTC div (60*1000) mod 60, lTC div 1000 mod 60, lTC mod 1000] );    

Лан создам новцю тему ато тут немного не по названию темы.

Автор: MetalFan 11.5.2007, 21:11
вапервых - при каждой итерации вызывать кучу гуевых методов да еще и ProcessMessages - не есть хорошо... основательно будет притормаживать поиск

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)