![]() |
|
![]() ![]() ![]() |
|
sena |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
Здравствуйте! Вот бьюсь над одной задачей по разбиению графа на подграфы.
Заключается она в следующем: Имеется неориентированный граф (около 10000 вершин). Его необходимо разбить на подграфы, которые имеют ограничения: 1. Вершины подграфов не должны пересекаться. 2. Каждый подграф должен иметь топологию типа ЗВЕЗДА. Количество вершин в подграфах не обязательно должно быть одинаковым. 3. Количество подграфов должно быть минимальным из всевозможных комбинаций. |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Что такое топология "Звезда"?
Возможно, стоит начать с поиска ребер-перемычек, т.е. ребер, удаление которых увеличивает число компонент связности в графе. -------------------- ... |
|||
|
||||
sena |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
Звезда это когда с одним узлом соединены все остальные, но не соединены между собой. А что даст поиск рёбер-перемычек?
|
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Кто не соединен между собой? Задача как-то неполно поставлена. Произвольный граф вовсе не обязан содержать такие компоненты, и уж точно не обязан из них состоять (т.е. могут быть вершины, которые ни принадлежат ни одной компоненте-звезде). Или надо сказать, что компоненты не обязаны включать все вершины, или определить минимальный размер компоненты = 1. Кстати, одно ребро (две соединенные вершины) - это звезда или нет? Разобьет задачу на подзадачи меньшего размера. Т.к. ребро перемычка ни в одну в звезду точно не входит (кроме тех, которые состоят из 2 вершин). А дальше, видимо, что-то типа перебора: начинаем с пары соединенных вершин и пытаемся добавить еще одну, проверяя, получается ли звезда. -------------------- ... |
|||
|
||||
sena |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
к примеру вот этот граф имеет такое оптимальное разбиение
Присоединённый файл ( Кол-во скачиваний: 12 ) ![]() |
|||
|
||||
maxdiver |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
Тогда в такой постановке это, по-видимому, задача о поиске минимального доминирующего множества вершин.
Т.е. требуется найти такое множество вершин, что все остальные вершины являются соседями выбранных. (Иными словами, доминирующее множество - это центры "звёзд"). Это классическая NP-полная задача, что означает, что точного эффективного решения её не существует (точнее, не найдено до сих пор). Следовательно, решать её надо или перебором, или каким-либо приближённым алгоритмом, или как-нибудь ещё. |
|||
|
||||
sena |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
Я понял! Просто у меня перебор включает такое количество комбинации при 10 тысячах узлов, что, я думаю, современная вычислительная техника не в состоянии будет справиться с решением. Может всё-таки есть какой-то алгоритм?
|
|||
|
||||
maxdiver |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
Конечно, 10 тысяч для перебора - это страшно много. Но если вам надо решать именно такие большие графы - значит, всё же мы все неправильно понимаем условие, и вы должны описать его более формально.
Например, мне не нравится фраза "разбить на подграфы". Что это значит? Можем ли мы выкидывать любые рёбра, какие захотим, или если мы решили выделить несколько вершин в отдельную "звезду", то никакие рёбра между этими вершинами мы удалять не имеем права? |
|||
|
||||
sena |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
Можно выразиться, что не на подграфы, а на части, где один узел центральный и другие к нему присоединены. А удалять можно какие угодно рёбра, главное, чтобы разбиение было минимальным. Я просто не понимаю как тут более оптимально объяснить????
|
|||
|
||||
maxdiver |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
А вам нужно точное решение задачи или приблизительное? Просто существуют алгоритмы, которые находят ответ, близкий к оптимальному, а не обязательно самый лучший.
|
|||
|
||||
sena |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
Как я теперь понимаю, точно решить не возможно, мне хоть приблизительный бы.
|
|||
|
||||
maxdiver |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
По поводу приближённых алгоритмов - википедия говорит следующее:
Таким образом, приближённый алгоритм выглядит таким образом: пока мы не покрыли все вершины графа, выбрать вершину максимальной степени, добавить её в ответ и удалить из графа эту вершину вместе со всеми её соседями. Тем самым мы получим ответ не более чем в 1 + ln s раз хуже, чем оптимальный (где s - максимальная степень вершины в графе). Лучших приближённых полиномиальных алгоритмов (т.е. таких, которые гарантируют константу лучшую, чем 1 + ln s), если верить википедии, не существует. |
|||
|
||||
sena |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
Ладно, тогда. Спасибо большое за помощь! Попробую что-нибудь с этим сделать.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |