![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| PROme |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 23.7.2003 Где: Kiev Репутация: -1 Всего: 1 |
Значит так.
Есть функция с несколькими входными параметрами. Она служит для построения двоичного дерева, инфа о котором хранится в файле: строчка-ветка, попорядку (левая ветка, правая ветка, предки, инфу разделяют пробелы). Например 1 / \ 2 4 / \ 3 5 / 6 будет выглядеть так: 2 4 - 3 5 1 - - 2 - - 1 6 - 2 - - 5 В общем у меня ее вышло сделать так, что она обрабатывает одну ветку, находит следущюю и чтоб ее обработать вызывает себя же со всеми входными параметрами. Сразу после вызова из функции идет exit; чтоб после выполнения копии себя сразу выйти, так как дальше уже нечего делать. Проблема в том что количество веток может достигать 10 000 и более. При таком количестве, боюсь пользователь будет дооооолго ждать выполнения скрипта (если такое вобще будет возможно). Может в данном случае можно как-то избежать рекурсии Т.е. может можно как-то вызвать себя и сразу после этого (или вовремя или как еще) уничтожить свои переменные ЗЫ: если у кого есть идеи, алгоритмы или скрипты на данную тему, плиз подкиньте. -------------------- SEO-мастер |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Есть теорема, что любую рекурсию можно заменить рядом простых циклов.
Поясни что за дерево, что нужно сделать. Тогда можно будет попробывать отказаться вообще от рекурсии. |
|||
|
||||
| PROme |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 23.7.2003 Где: Kiev Репутация: -1 Всего: 1 |
Обычное бинарное дерево.
С обной ветки идет не больше 2-х (может одна, может не обной), ветка сама по себе быть не может, должна быть связана с деревом. В общем в таком духе:
Это сообщение отредактировал(а) PROme - 9.1.2004, 09:03 -------------------- SEO-мастер |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
С веткой понятно.
Как данные хранятся, и что в итоге получить нужно? Изображение всего дерева, одну ветку,.... Подробно опиши задачу: исходные данные, вычесления, конечный результат. Это сообщение отредактировал(а) Secandr - 9.1.2004, 17:30 |
|||
|
||||
| PROme |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 23.7.2003 Где: Kiev Репутация: -1 Всего: 1 |
Как хранятся данные я писал.
Каждая ветка имеет свой номер. Новер ветки - новер рядка в файле. 3 значения в строчке разделяет пробел, значения обозначают: ветка1 ветка2 предок Для последнего примера файл: 2 3 - 4 5 1 - 6 1 - - 2 - - 2 - 7 3 8 9 6 - - 7 - - 7 Что нужно? Ну хотябы по этим данным скрипт строил то дерево, которому они соответствуют. ЗЫ: повторюсь, я не изучал двоичные деревья, а данный метод сохранения двоичных деревьев придуман мной лишь на основании своих наблюдений, как самый економичный и удобный одновременно но это не значит что не существует лучшего алгоритма может кто знает ПОМОГИТЕ ПЛИЗ!!! -------------------- SEO-мастер |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Предлогаю хранить данные в таком виде:
;предок-потомок;предок-потомок;предок-потомок;предок-потомок; ;1-2;1-3;2-4;2-5;3-6;6-7;7-8;7-9; Тогда просто добавить потомка: ";1-2;1-3;2-4;2-5;3-6;6-7;7-8;7-9;" . "8-10;" Удалить: ereg_replace( ';[0-9]+-5;' , ';' , ';1-2;1-3;2-4;2-5;3-6;6-7;7-8;7-9;'); Переместить ветку 6-7-... и поставить её после 4 ereg_replace( ';[0-9]+-5;' , ';4-5;' , ';1-2;1-3;2-4;2-5;3-6;6-7;7-8;7-9;'); |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Теперь вопрос посложнее: находим ветку от 9 до 1:
P.S.Блин, свет вырубили и всё что написал пропало P.P.S. Это не готовый код, а только принцип по которому можно организовать работу. |
|||
|
||||
| Secandr |
|
||||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
получишь:
Это сообщение отредактировал(а) Secandr - 11.1.2004, 14:04 |
||||
|
|||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Если проапгрейдить скрипт можно сделать что-то вида:
P.S. Код писал с головы, так что могут быть очепятки Это сообщение отредактировал(а) Secandr - 11.1.2004, 14:09 |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |