Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Графы. Обход в глубину и динамические масивы

14K
15 февраля 2006 года
WWWovan
8 / / 15.02.2006
Имеется следующая задача:
В таблице в одном поле хранится номер группы, а во втором номер родительской группы для данной(если конкретизовать, то это группы товара).
Нужно сделать выборку номеров группы вместе с всеми ее подгруппами.
Как это правильно сделать?
Одним из вариантов решения вижу графы, обход в глубину.
Но не совсем четко представляю как реализовать их с динамическими масивами.
1
15 февраля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by WWWovan
Имеется следующая задача:
В таблице в одном поле хранится номер группы, а во втором номер родительской группы для данной(если конкретизовать, то это группы товара).
Нужно сделать выборку номеров группы вместе с всеми ее подгруппами.
Как это правильно сделать?
Одним из вариантов решения вижу графы, обход в глубину.
Но не совсем четко представляю как реализовать их с динамическими масивами.


Сформулируй пожалуйста вопрос более четко - не понятно с чем собственно у тебя проблема - и причем здесь динамические массивы?

14K
15 февраля 2006 года
WWWovan
8 / / 15.02.2006
Цитата:
Originally posted by kot_
Сформулируй пожалуйста вопрос более четко - не понятно с чем собственно у тебя проблема - и причем здесь динамические массивы?


Мне нужно из таблицы базы данных сделать выборку по полям ID и PARENTID(номер группы и номер группы родителя соответсвенно).
Потом из этого набора данных мне нужно взять все ID подгрупп, которые входят в группу.
Нашел информацию, что это можно реализовать при помощи std::map, но не совсем понимаю как это делаеться. Опыта работы с STL нет. :(

1
15 февраля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by WWWovan
Мне нужно из таблицы базы данных сделать выборку по полям ID и PARENTID(номер группы и номер группы родителя соответсвенно).
Потом из этого набора данных мне нужно взять все ID подгрупп, которые входят в группу.
Нашел информацию, что это можно реализовать при помощи std::map, но не совсем понимаю как это делаеться. Опыта работы с STL нет. :(


А оно нужно - так сложно делать? Для начала - глубина обхода - конечна или нет? Если конечна - чем определяется, если нет - то как проверить на какой глубине вложенности ты находишься? Второе - зачем использовать std::map - для меня это вовсе не очевидно - ведь ты делаешь выборку и значения у тебя и так загружены в датасет? Выборку можно сделать отфильтровав тот же датасет по PARENTID - в случае если все записи у тебя на клиенте или по селекту. Зачем же морочится с дополнительными мепами?

14K
15 февраля 2006 года
WWWovan
8 / / 15.02.2006
Цитата:
Originally posted by kot_
А оно нужно - так сложно делать? Для начала - глубина обхода - конечна или нет? Если конечна - чем определяется, если нет - то как проверить на какой глубине вложенности ты находишься? Второе - зачем использовать std::map - для меня это вовсе не очевидно - ведь ты делаешь выборку и значения у тебя и так загружены в датасет? Выборку можно сделать отфильтровав тот же датасет по PARENTID - в случае если все записи у тебя на клиенте или по селекту. Зачем же морочится с дополнительными мепами?


Глубина конечна(если я правильно понимаю применение этого термина в данном случае). Мне нужно выбрать все подгруппы до поконца вложености и наперед количество вложеностей неизвестно.
Если задачу больше конкретизоровать, то в таблице храниться информация о группах товара. Нужно для товаров всей группы и всех ее подгрупп поменять некоторые свойства...

1
15 февраля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by WWWovan
Глубина конечна(если я правильно понимаю применение этого термина в данном случае). Мне нужно выбрать все подгруппы до поконца вложености и наперед количество вложеностей неизвестно.
Если задачу больше конкретизоровать, то в таблице храниться информация о группах товара. Нужно для товаров всей группы и всех ее подгрупп поменять некоторые свойства...


Ну стандартная задача построения дерева - и в твоем случае наверное стоило бы (ИМХО) ввести чтото типа признака наличия дочерних ветвей - будет проще. Ну а сама задача решается банальной рекурсией - т.е. меняешь свойства на последнем уровне и повторяешь до тех пор пока нужно. На sql.ru и ibase.ru есть несколько статей посвященных работе с деревьями (ссылки рыть облом - найти их не трудно) - посмотри, я думаю пригодится.

14K
15 февраля 2006 года
WWWovan
8 / / 15.02.2006
Цитата:
Originally posted by kot_
Ну стандартная задача построения дерева - и в твоем случае наверное стоило бы (ИМХО) ввести чтото типа признака наличия дочерних ветвей - будет проще. Ну а сама задача решается банальной рекурсией - т.е. меняешь свойства на последнем уровне и повторяешь до тех пор пока нужно. На sql.ru и ibase.ru есть несколько статей посвященных работе с деревьями (ссылки рыть облом - найти их не трудно) - посмотри, я думаю пригодится.


Спасибо за советы. Пошел искать на sql.ru и ibase.ru

14K
16 февраля 2006 года
WWWovan
8 / / 15.02.2006
Цитата:
Originally posted by kot_
Ну стандартная задача построения дерева - и в твоем случае наверное стоило бы (ИМХО) ввести чтото типа признака наличия дочерних ветвей - будет проще. Ну а сама задача решается банальной рекурсией - т.е. меняешь свойства на последнем уровне и повторяешь до тех пор пока нужно. На sql.ru и ibase.ru есть несколько статей посвященных работе с деревьями (ссылки рыть облом - найти их не трудно) - посмотри, я думаю пригодится.


Спасибо за направление в поиске. Помогла статья
http://gsbelarus.com/gs/modules.php?name=News&file=article&sid=314

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог