Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ваша цепочка навигации
 
 автор: kicher   (09.02.2007 в 15:03)   письмо автору
 
 

Поделитесь как вы вывели цепочку навигации в ваших статьях?
например тут:
http://softtime.ru/info/apache.php?id_article=98

| Работа с Apache | Подключение к PHP расширения для работы с MySQL

   
 
 автор: cheops   (09.02.2007 в 19:14)   письмо автору
 
   для: kicher   (09.02.2007 в 15:03)
 

Тут помомему не используется... но как правило, прибегают к рекурсивному спуску.

   
 
 автор: Trianon   (09.02.2007 в 19:21)   письмо автору
 
   для: cheops   (09.02.2007 в 19:14)
 

Зачем рекурсивный спуск на прямом пути?
Это же чистая итерация!

   
 
 автор: cheops   (09.02.2007 в 19:27)   письмо автору
 
   для: Trianon   (09.02.2007 в 19:21)
 

Здесь рекурсия не используется, к рекурсии удобно прибегать когда глубина каталога более 2-х позиций.

   
 
 автор: Trianon   (10.02.2007 в 11:30)   письмо автору
 
   для: cheops   (09.02.2007 в 19:27)
 

>Здесь рекурсия не используется, к рекурсии удобно прибегать когда глубина каталога более 2-х позиций.

К рекурсии удобно прибегать, когда требуется обход дерева в глубину.
При обходе дерева в ширину, частным случаем которого с некоторой натяжкой можно назвать вычисление пути к корню, рекурсию применять удобно не более, чем для вычисления факториала.

   
 
 автор: cheops   (10.02.2007 в 13:12)   письмо автору
 
   для: Trianon   (10.02.2007 в 11:30)
 

Это зависит от структуры базы данных и передаваемых параметров - если мы находимся в произвольной точке дерева и нужно восстановить элементы от текущей точки до вершины имея только уникальный ключ текущей точки, мне проще использовать рекурсию.

   
 
 автор: Trianon   (10.02.2007 в 16:52)   письмо автору
 
   для: cheops   (10.02.2007 в 13:12)
 

Решение этой задачи может зависеть от реализации структуры дерева.
Необходимость использования рекурсии (точнее отсутствие такой необходимости) от реализации не зависит.

Вот типичный код для наиболее популярного представления (Adjacency List):
(Он, конечно, слегка упрощен, но лишь выразительности ради)
<?
function get_path($id$root_id 0)
{
    
$list '';
    do{
        
$sql "SELECT * FROM tab WHERE id = '$id'";
        
$res mysql_query($sql) or die(mysql_error());
        
$row mysql_fetch_assoc($res);
        if(
$row == 0)
            break;
        
$list $row['name']. ' | ' $list;
        
$id intval($row['parent_id']);
    } while(
$id != $root_id && $id != 0);
    return 
' | ' $list;
}
?>



Могу привести похожий код для nested sets. По существу вопроса там мало что изменится.

   
 
 автор: cheops   (10.02.2007 в 22:29)   письмо автору
 
   для: Trianon   (10.02.2007 в 16:52)
 

Хитро, но использование рекурсии здесь оправдано, даже не смотря на то, что удалось найти "не страшный" заменитель рекурсии. Я наверное с удовольствием буду использовать ваше решение, ибо прозначно, но задачи "на деревья" всё равно продолжу решать рекурсивно - проще использовать устоявшиеся решения и библиотеки, чем решать по-новой хитрую задачу. Вообще говоря не известно, что лучше неявное использвование переменной в цикле или простетская рекурсия.

   
 
 автор: Loki   (11.02.2007 в 12:07)   письмо автору
 
   для: cheops   (10.02.2007 в 22:29)
 

Ничего хитрого. Мне кажется что это очевидно. Рекурсия нужна когда нам неизвестно количество родственников. В этом же случае - родитель всегда один.

   
 
 автор: Kicher   (10.02.2007 в 10:29)   письмо автору
 
   для: Trianon   (09.02.2007 в 19:21)
 

а как сделать рекурсивный спуск на прямом пути?

   
 
 автор: Trianon   (10.02.2007 в 17:08)   письмо автору
 
   для: Kicher   (10.02.2007 в 10:29)
 

Не скажу. Потому что рекурсивный спуск на прямом пути - это ересь мерзкая. Во всяком случае, с точки зрения человека, более менее представляющего рекурсивные структуры данных и алгоритмы, применяемые для работы с ними.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования