powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Графы. Обход в глубину и динамические масивы
23 сообщений из 23, страница 1 из 1
Графы. Обход в глубину и динамические масивы
    #33541755
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется следующая задача:
В таблице в одном поле хранится номер группы, а во втором номер родительской группы для данной(если конкретизовать, то это группы товара).
Нужно сделать выборку номеров группы вместе с всеми ее подгруппами.
Как это правильно сделать?
Одним из вариантов решения вижу графы, обход в глубину.
Но не совсем четко представляю как реализовать их с динамическими масивами.
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33541768
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мужик, эт тебе праграмму писать нада ...
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33541774
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivМужик, эт тебе праграмму писать нада ...
Это я прекрасно понимаю. Не совсем понимаю каким образом осуществить реализацию..
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33542278
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю обойти дерево в глубину.
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33542397
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WWWovanИмеется следующая задача:
В таблице в одном поле хранится номер группы, а во втором номер родительской группы для данной(если конкретизовать, то это группы товара).
Нужно сделать выборку номеров группы вместе с всеми ее подгруппами.
Как это правильно сделать?
Одним из вариантов решения вижу графы, обход в глубину.
Но не совсем четко представляю как реализовать их с динамическими масивами.
Я делал похожую задачу: расшифровка рецептуры резиновых смесей для расчета необходимых материалов и полуфабрикатов. Правда делал это все средствами SQL в среде FoxPro...

Алгоритм примерно следующий:
1. Создал временную таблицу-курсор, куда помещал результаты (create cursor...)
2. В другой курсор (курсор 2) поместил всех родителей. (Select...where <родитель>=NULL)
3. Скопировал данные из курсора2 в результирующий курсор.
4. В курсор2 поместил детей родителей, находящихся в настоящий момент в курсоре2 (select ... where <родитель>=cursor2.ID_product)
5. Пункты 3 и 4 повторял до тех пор, пока не получал пустой курсор курсор2
NOTE: ID самого первого родителя я "тянул" до конца, так как у разных родителей могли быть одинаковые "дети" (с одним номером ID).
6. Дальше делал выборку из результирующего курсора (для сортировки, группировки и т.д....)

Получалась таблица примерно следующей структуры:

ID_parent,ID_product,Name, ....
11111111,111111111,Колесо R-13,....
11111111,111111112,Покрышка,....
11111111,111111115,Камера,.....
11111111,111111120,"золотник",....
11111111,111112001,колпачок,.....
22222222,222222222,Колесо R-17,....
22222222,111111112,Покрышка,....
22222222,111111115,Камера,....
и т.д........
Посмотри, может поможет чем...
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33542722
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мужчины, вы чего ? Форумом ошиблись ?
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33542728
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав C. WWWovanИмеется следующая задача:
В таблице в одном поле хранится номер группы, а во втором номер родительской группы для данной(если конкретизовать, то это группы товара).
Нужно сделать выборку номеров группы вместе с всеми ее подгруппами.
Как это правильно сделать?
Одним из вариантов решения вижу графы, обход в глубину.
Но не совсем четко представляю как реализовать их с динамическими масивами.
Я делал похожую задачу: расшифровка рецептуры резиновых смесей для расчета необходимых материалов и полуфабрикатов. Правда делал это все средствами SQL в среде FoxPro...

Алгоритм примерно следующий:
1. Создал временную таблицу-курсор, куда помещал результаты (create cursor...)
2. В другой курсор (курсор 2) поместил всех родителей. (Select...where <родитель>=NULL)
3. Скопировал данные из курсора2 в результирующий курсор.
4. В курсор2 поместил детей родителей, находящихся в настоящий момент в курсоре2 (select ... where <родитель>=cursor2.ID_product)
5. Пункты 3 и 4 повторял до тех пор, пока не получал пустой курсор курсор2
NOTE: ID самого первого родителя я "тянул" до конца, так как у разных родителей могли быть одинаковые "дети" (с одним номером ID).
6. Дальше делал выборку из результирующего курсора (для сортировки, группировки и т.д....)

Получалась таблица примерно следующей структуры:

ID_parent,ID_product,Name, ....
11111111,111111111,Колесо R-13,....
11111111,111111112,Покрышка,....
11111111,111111115,Камера,.....
11111111,111111120,"золотник",....
11111111,111112001,колпачок,.....
22222222,222222222,Колесо R-17,....
22222222,111111112,Покрышка,....
22222222,111111115,Камера,....
и т.д........
Посмотри, может поможет чем...

Спасибо за совет. Если не получится сделать средствами программы буду делать так...
Но хотелось бы не загружать сервер базы такими манипуляциями, а сделать выборку родителей и потомков и уже нужные нацти средствами программы, которая на C++...
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33542739
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivМужчины, вы чего ? Форумом ошиблись ?
Почему ошиблись? Форум по sql, а база у меня на Yaffil висит... Ветка по С++, прога у меня на Builder C++ 6.0 пишеться...
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33543198
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WWWovan MasterZivМужчины, вы чего ? Форумом ошиблись ?
Почему ошиблись? Форум по sql, а база у меня на Yaffil висит... Ветка по С++, прога у меня на Builder C++ 6.0 пишеться...

Посмотрите в документацию, поддерживает ли ваша
база join.

select p.parent_id , c.product_id , p.name, c.name
from table1 p inner join table1 c on p.parent_id=c.parent_id
where parent_id=blablabla

выдаст необходимый вам результат.
Если поле parent проиндексировано база справится с этим быстрее
чем проход по дереву.
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33543529
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
onstat- WWWovan MasterZivМужчины, вы чего ? Форумом ошиблись ?
Почему ошиблись? Форум по sql, а база у меня на Yaffil висит... Ветка по С++, прога у меня на Builder C++ 6.0 пишеться...

Посмотрите в документацию, поддерживает ли ваша
база join.

select p.parent_id , c.product_id , p.name, c.name
from table1 p inner join table1 c on p.parent_id=c.parent_id
where parent_id=blablabla

выдаст необходимый вам результат.
Если поле parent проиндексировано база справится с этим быстрее
чем проход по дереву.
Но это не совсем то. При таком запросе(если на место blablabla поставить нужный parent_id) оно выдает только подгруппы первого уровня(да и то с повторениями), а глубже не заходит...
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33543746
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WWWovan onstat- WWWovan MasterZivМужчины, вы чего ? Форумом ошиблись ?
Почему ошиблись? Форум по sql, а база у меня на Yaffil висит... Ветка по С++, прога у меня на Builder C++ 6.0 пишеться...

Посмотрите в документацию, поддерживает ли ваша
база join.

select p.parent_id , c.product_id , p.name, c.name
from table1 p inner join table1 c on p.parent_id=c.parent_id
where parent_id=blablabla

выдаст необходимый вам результат.
Если поле parent проиндексировано база справится с этим быстрее
чем проход по дереву.
Но это не совсем то. При таком запросе(если на место blablabla поставить нужный parent_id) оно выдает только подгруппы первого уровня(да и то с повторениями), а глубже не заходит...

Повторения убираются с помощью distinct

а where выглядит приблизительно так:

с.parent_id in ( select t.product_id from table1 t where t.parent_id=c.product_id ) or p.parent_id=blablabla

Не буду отрицать, серверу будет тяжело.
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33543808
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-...
а where выглядит приблизительно так:

с.parent_id in ( select t.product_id from table1 t where t.parent_id=c.product_id ) or p.parent_id=blablabla

Не буду отрицать, серверу будет тяжело.
В том-то и дело, что за один селект такого (выбрать сразу все уровни вложения "детей" при условии, что число уровней вложения заранее неизвестно) сделать нельзя!
Только через процедуру (Возможно - хранимую процедуру).
Я на подобную задачу (см.выше) не один день убил пока все понял и сделал правильно...
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33543879
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поэтому я и хочу выбрать сначала слектом с таблицы селектом все ID и PARENTID, а потом зная ID вершины родителя програмно определить всех его потомков и подпотомков. Програмно в первую очередь из-за того, что с базой будет работать не один человек(примерно 20)... а такие запросы они точно посувствуют...
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33543966
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав C.
В том-то и дело, что за один селект такого (выбрать сразу все уровни вложения "детей" при условии, что число уровней вложения заранее неизвестно) сделать нельзя!
Только через процедуру (Возможно - хранимую процедуру).
Я на подобную задачу (см.выше) не один день убил пока все понял и сделал правильно...

Меня настораживает ваша категоричность.

Почему нельзя зделать?
В чем ограничения?

На sql можно реализовать ветвленную
рекурсию значит можно реализовать обход графа.
Пример рекурсии я привел выше.
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33544105
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таком варианте(уже адаптировано к моим условиям)
Код: plaintext
1.
2.
select p.parentid, c.id , p.name, c.name
from Wareh p inner join wareh c on p.PARENTID=c.PARENTID
where c.parentid in ( select t.id from Wareh t where t.parentid=c.parentid ) or p.parentid= 2 
Выдает то же самое что и с where p.parentid=2
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33544397
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WWWovan MasterZivМужчины, вы чего ? Форумом ошиблись ?
Почему ошиблись? Форум по sql, а база у меня на Yaffil висит... Ветка по С++, прога у меня на Builder C++ 6.0 пишеться...

Железная логика !!
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33544408
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда с запросом натрахаетесь, сходите хотябы в http://www.sql.ru/forum/actualtopics.aspx?bid=2,
там вам быстро объяснят, почему нельзя, где нельзя и вообще.
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33544636
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WWWovanВ таком варианте(уже адаптировано к моим условиям)
Код: plaintext
1.
2.
select p.parentid, c.id , p.name, c.name
from Wareh p inner join wareh c on p.PARENTID=c.PARENTID
where c.parentid in ( select t.id from Wareh t where [color=red]t.parentid[/color]=c.parentid ) or p.parentid= 2 
Выдает то же самое что и с where p.parentid=2

похоже что
выделенное дожно быть t.id
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33544670
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Результат другой, но все-равно не то что нужно...(результотов намного больше чем должно быть...в том числе и тех, которые не должны попадать...)
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33548855
Гадёныш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вообщем у мну есть документация по графам...вообще.. могу скинуть..

Ziv ну и нафик так категорично настаивать... х) этж не ты мучаешся %)
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33553395
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гадёнышвообщем у мну есть документация по графам...вообще.. могу скинуть..

Ziv ну и нафик так категорично настаивать... х) этж не ты мучаешся %)
Можно. Но это уже для общего развития. Решение я уже нашел.
Мыло: gwf[собака]yandex.ru
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33554246
Гадёныш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Усё смотри мыло
...
Рейтинг: 0 / 0
Графы. Обход в глубину и динамические масивы
    #33557713
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ГадёнышУсё смотри мыло
Получил. Спасибо.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Графы. Обход в глубину и динамические масивы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]