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

Форум MySQL

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

 

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

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

тема: алгоритм обхода дерева
 
 автор: Артем125   (29.09.2009 в 19:27)   письмо автору
4.7 Кб
 
 

Привет всем,

В прикрепленных файлах дерево и порядок обхода

Оператором select мы выбираем из базы три значения id, parent, name. Далее этот ассоциативный массив необходимо отсортировать так как показано в прикрепленном файле, в том же порядке.


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

Что -то получилось, будет ли работать )

алг:
1) нахождение уникальной ветки или прохождение ветки по данным П.4
2) запись ветки в массив, запись значения родителя последнего узла
3) поиск соседнего узла по значению родителя
4) если сосед найден, то перемещение указателя на соседа
5) переход в П.1

  Ответить  
 
 автор: Саня   (29.09.2009 в 19:43)   письмо автору
 
   для: Артем125   (29.09.2009 в 19:27)
 

Используйте nested sets. И рекурсия не понадобится.

  Ответить  
 
 автор: cheops   (29.09.2009 в 19:43)   письмо автору
 
   для: Артем125   (29.09.2009 в 19:27)
 

Хм... а в чем сложность? Да, очень часто такие задачи решают рекурсивно http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=18452.

  Ответить  
 
 автор: Артем125   (29.09.2009 в 19:47)   письмо автору
 
   для: cheops   (29.09.2009 в 19:43)
 

nested sets я смотрел, а в отношении моего алгоритма какой вердикт и скорость работы?

Я переходил по ссылке, там рекурсивно дергается база, постоянно, в моем же случае один раз

  Ответить  
 
 автор: cheops   (29.09.2009 в 19:49)   письмо автору
 
   для: Артем125   (29.09.2009 в 19:47)
 

Можно и так - предварительно массив вытащить в память и рекурсивно по нему ходить. Вполне здоровый подход.

  Ответить  
 
 автор: Артем125   (29.09.2009 в 19:54)   письмо автору
 
   для: cheops   (29.09.2009 в 19:49)
 

спасибо, подскажите пожалуйста:
1. из базы вытаскиваю все записи в один массив:
1.1 если таблица большая, как это по времени?
1.2 в ассоциативный массив вытаскивать, т.е. mysql_fetch_array?
2. буферный массив делать двухмерный, или трехмерный, или ассоциативным поскольку каждая запись в таблице состоит из трех элементов, два int, один char

  Ответить  
 
 автор: cheops   (29.09.2009 в 19:58)   письмо автору
 
   для: Артем125   (29.09.2009 в 19:54)
 

>1.1 если таблица большая, как это по времени?
В любом случае в конечном итоге получится быстрее, чем ходить по ней рекурсивной функцией? А на сколько большая таблица (В Мб)?
>1.2 в ассоциативный массив вытаскивать, т.е. mysql_fetch_array?
>2. буферный массив делать двухмерный, или трехмерный, или ассоциативным поскольку
>каждая запись в таблице состоит из трех элементов, два int, один char
Тут нужно посмотреть, возможно, вам будет удобнее использовать не один, а два массива (под данные и под отношения) - если вы по памяти не сильно ограничены.

  Ответить  
 
 автор: Артем125   (29.09.2009 в 20:04)   письмо автору
 
   для: cheops   (29.09.2009 в 19:58)
 

>1.1 если таблица большая, как это по времени?

Пока даже не представляю. Делаю каталог, разделов 15, в каждом уровня по 3, 15*5*15 наверно. В таблице хранятся три переменные, два id(6) и parents(6) и char name (255). Самому интересно )))


>Тут нужно посмотреть, возможно, вам будет удобнее использовать не один, а два массива (под данные и под отношения) - если вы по памяти не сильно ограничены.

Про ограничения ничего пока не знаю, а это имеется ввмду где-то на хостинге?? ))

  Ответить  
 
 автор: cheops   (29.09.2009 в 20:07)   письмо автору
 
   для: Артем125   (29.09.2009 в 20:04)
 

Это не много, она у вас не больше полумегабайта будет - т.е. можете как угодно её распластывать в памяти скрипта - до ограничения в 8 Мб не добраться (причем 8Мб - это минимум, сейчас не редкость, когда одному скрипту отводится и 32 Мб оперативной памяти).

  Ответить  
Rambler's Top100
вверх

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