![]() |
|
Модераторы: LSD |
![]()
|
|
| Illuminaty |
|
|||
![]() /*Антон Захаров*/ ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1238 Регистрация: 19.3.2005 Где: Россия, Казань Репутация: нет Всего: 56 |
Вопрос в следующем.
Задан граф. Заданы веса ребер. Как сохранить его в БД? Необходима такая реализация, чтобы удобно было с ней работать. Т.е. осуществление выборок для нахождения пути от одной вершины к другой Кто нибудь делал похожее? И у кого какие идеи? Подчеркиваю: необходима реализация в виде структуры таблиц |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Самый очевидный способ: две таблицы одна список вершин, вторая список ребер с весами ребро имеет два foreign key на таблицу вершин и поле вес. Найти все пути, фиксированной длинны, из заданного ребра можно будет одним запросом.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Illuminaty |
|
|||
![]() /*Антон Захаров*/ ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1238 Регистрация: 19.3.2005 Где: Россия, Казань Репутация: нет Всего: 56 |
LSD
Спасибо за ответ, но возникает резонный вопрос: а сколько запросов потребуется для реализации нахождения пути из вершины А в вершину Б, учитывая, что вершин достаточно много (больше 1000)? Над предложенной реализацией я думал уже |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Внимание аттракцион!
Сейчас с помощью ловкости рук мы получим все не циклические пути из точки B!
А теперь следим за руками:
Правда я здесь использовал специфичные фишки Oracle и если база будет не Oracle, то не прокатит. Это я к тому, что неплохо бы знать что за база. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| Illuminaty |
|
|||
![]() /*Антон Захаров*/ ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1238 Регистрация: 19.3.2005 Где: Россия, Казань Репутация: нет Всего: 56 |
Да уж....
С Oracle не сталкивался, поэтому есть загадочные элементы Причем много... А база, скорее всего MySQL Думал, что можно все решить хорошей реализацией, не зависящей от платформы Это сообщение отредактировал(а) Illuminaty - 21.3.2005, 23:40 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Упс А я с MySQL не знаком, а как у него с join-нами? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Illuminaty |
|
|||
![]() /*Антон Захаров*/ ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1238 Регистрация: 19.3.2005 Где: Россия, Казань Репутация: нет Всего: 56 |
LSD
Да, вроде бы, нормально |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
ИМХО все должно быть ОК. Т.к. именно так граф представляется в математике (множество вершин и множество ребер) и соответсвенно все алгоритмы поиска пути в графе расчитанны именно на такое представление.
Вот например как можно реализовать алгоритм Дейкстры, это уже для Interbase (у меня нет под рукой MySQL).
Теперь чтобы найти путь из начальной точки в заданную, выбираем для заданной точки соседнюю, так что
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Feliastre |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 17.11.2004 Репутация: нет Всего: нет |
Всё ниже сказанное сугубое ИМХО.
Я тоже занимался приколами с графами. И долго думал, как же их хранить. Предложенный метод имеет один противный момент. Для 1000 вершин мы должны сделать 1 000 000 записей. Может для оракла это и быстро. Может для MS SQL 2000 это быстро. Для локальных баз - это погибель. Так что есть вариант. В базе хранить только "габариты" графа. А саму матрицу скидывать на хард. Для наглядности: У меня машина P4 2,4GHz, 768Mb RAM Запись того самого миллиона рёбер потребовала ~20 минут. БД юзал Парадокс, аксесс, InterBase. Если не страшны такие скорости - то я позорно замолкаю(типа со своим уставом в чужой монастырь...) |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Это верно для полного ориентированного графа, для не ориентированного это число меньше в половину. Но как правило графы не полные (иначе поиск пути на них задача тривиальная). Я попробовал забить в Firefox 1.5 полный неориентированный граф, 1000 вершин 500 000 ребер. На таблицах были foreign key и constrain. Вставка вершин заняла 0.5-1 сек, вставка ребер 3.5-5 мин. Машина: AthlonXP 2000, 768Mb RAM.
А как работать с таким графом, тащить полностью в память? А целостность (отсутствие дубликатов ребер, некорректных ссылок и т.п.)? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |