![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| gribikc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 9.2.2003 Репутация: нет Всего: нет |
как при такой структуре записи получь для произвольного id всех предков(ну тоеть id предков) -------------------- --------------------------------------------- Заранее спасибо!!! |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
рекурсивно.
|
|||
|
||||
| gribikc |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 9.2.2003 Репутация: нет Всего: нет |
я так и сделал но при этом мне необходимо в рекурсивной функции каждый раз вызывать другую рекурсивную функцию не слишком ли это тупо получается собственно я думал может ктонить чтото интересненькое предложит... вот весь скрипт
он ещё не до конца верно работает -------------------- --------------------------------------------- Заранее спасибо!!! |
||||
|
|||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
для получения предков рекурсия не нужна
|
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
для получения непосредственных предков. так? а мои телепатические способности утверждают, что топикстартеру нужно то, чем хвалится nested sets - быстро получить всех предков узла до N-го колена. впрочем, телепатические способности могут и ошибаться... |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
а какие бывают ещё, кроме непосредственных?
Вообще, насколько я понимаю, рекурсия бывает нужна только при движении вниз. при движении вверх, или по горизонтали, она ведь не нужна. или я ошибаюсь? |
|||
|
||||
| gribikc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 9.2.2003 Репутация: нет Всего: нет |
вообщем не буду мочить вот рабочий скрипт
http://gribikc.ru/tree/tree.php вот его код
вопрос можно ли проще сделать чем через вложенную рекурсию skyboy, необходимо получать всех предков до начальной записи Feldmarschall, а как тогда??? -------------------- --------------------------------------------- Заранее спасибо!!! |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
так же, как и любые другие операции в программировании - созданием слгоритма!
ты можешь написать код, который получит одного предка? непосредственного предка? а для полученного предка получить его предка? а посмотреть на полученный код, и подумать, как его можно оптимизировать? |
|||
|
||||
| gribikc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 9.2.2003 Репутация: нет Всего: нет |
Feldmarschall, к сажелению всё что смог оптимизировать это я вылож пока новых мыслей нет
в любом случае если не рекурсия то цикл будет -------------------- --------------------------------------------- Заранее спасибо!!! |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
не понял смысла этого "в любом случае". а ты как хотел? чтобы вообще без единого оператора, все само построилось?
ну раз ты понимаешь, как сделать циклом - почему не сделаешь? |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
предок предка. почему же? имеется идентификатор поста. необходимо определить полную цепь: тема, подфорумы(неограниченное количество), форум. сделать это можно и рекурсией, и циклом. так же как и при движении "вниз". я прав: тебя интересовала именно адекватность использования рекурсии при движении "вверх"? и как, достаточно адекватный пример? |
|||
|
||||
| Mushu |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 20.7.2004 Репутация: -2 Всего: -5 |
есть рекурсии как и по низ ходящим это от родителя до чилдрена, так и восходящим тобишь от детей к родителю Добавлено @ 15:07
Через рекурсию самый быстрый способ.
Это сообщение отредактировал(а) skyboy - 25.5.2008, 15:28 |
||||||||
|
|||||||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
skyboy, нет, я не понял, почему при движении вверх (а вот интересно, почему я говорю "вверх", имея в виду корень дерева?) адекватной будет рекурсия, а не цикл. Цикл проще, с точки зрения алгоритма, реализации и понимания.
Я считаю, что рекурсия не должна быть синонимом слова "дерево", и применяться для любой задачи, с ним связанной, на автомате. Добавлено через 40 секунд Батюшки =) Специалист подтянулся =)))) |
|||
|
||||
| skyboy |
|
||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
небось, на бумаге рисовал от корня и сверху-вниз. так?
согласен. построение древовидной структуры и быстрее, и нагляднее - итеративно. за N действий. но обход - почему бы и нет? вообще говоря, вопрос простоты понимания - довольно субъективная вещь. мне чаще проще написать рекурсивную функцию, тогда как в циклах не всегда обойтись без дополнительных ветвлений и всяких булевских флагов. В отдельной функции оно, по крайней мере, смотрися "прозрачнее". впрочем, это слишком близко к вопросу религии |
||||
|
|||||
| gribikc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 9.2.2003 Репутация: нет Всего: нет |
Feldmarschall, в данном случаее рекурсией сдесь наглядней чем циклом
но меня интересует как ещё это можно сделать??? -------------------- --------------------------------------------- Заранее спасибо!!! |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
"пройтись" по (не)ограниченной вложенности структуре возможно двумя способами: - итеративно - рекурсивно варианты приводимы друг к другу, т.е. нет ситуации, когда одно использовать возможно, а второе - нет. другой вопрос, что при одном алгоритме короче/читаемее рекурсивный вариант, а в другом случае - итерация будет верхом изящества. смотри сам, по ситуации. Добавлено через 2 минуты и 13 секунд
дело в том, что как раз вызов из функции самой себя - это и есть рекурсия. не будет "самовызова" - это уже не рекурсия будет. и вот ещё: нет, само по себе это не тупо. |
|||
|
||||
| Feldmarschall |
|
||||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
мы говорим не об абстрактных циклах, а о конкретной задаче - получить родителей по цепочке. здесь задача, скорее, на понимание своих действий. если человек представляет себе дерево, то цикл - наиболее естественный вариант решения. что может быть проще, чем запросить в цикле у БД несколько записей? если дерево для человека - тёмный лес, и есть только шаблон "дерево=рекурсия", то да - проще рекурсией. здесь задача, скорее, на умение алгоритмизировать свои действия. что такое цикл? когда мы его применяем? когда видим несколько одинаковых действий. ведь прекрасно будет работать программа, к примеру, такая:
но программист видит повторяемость операторов, и делает на этом месте цикл. то же самое и с получением предков. |
||||
|
|||||
| gribikc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 9.2.2003 Репутация: нет Всего: нет |
skyboy, нет ты не понел мы в одной рекурсивной функции вызываем другую рекурсивную функцию вот о чём была речь.- итеративно-что ты под этим понимаешь??
Feldmarschall, я не щитаю множественные запросы к базе данных удачным решением(об этом даже хостер просит чтоб так не делали) -------------------- --------------------------------------------- Заранее спасибо!!! |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Хостер твой дурак. Дело не в количестве запросов, а в качестве. Выборка по первичному ключу ВООБЩЕ никак не напрягает базу. Хоть сто записей выбирай, а не 2-3, как у тебя.
Но речь вообще не о БД. БД я привел для примера. Если у тебя все лежит в массиве, то для него задачу тоже можно решить. Для этого надо думать над структурой массива. |
|||
|
||||
| gribikc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 9.2.2003 Репутация: нет Всего: нет |
Feldmarschall, ну как разтаки над структурой массива я всё продумал их там из одного запроса составляется 2 для дерева и для предков соответственно
-------------------- --------------------------------------------- Заранее спасибо!!! |
|||
|
||||
![]()
|
| Правила форума "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. |