2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему
 
 Выделение полного подграфа
Сообщение12.08.2010, 13:43 


10/06/05
100
Тюмень
Здравствуйте, уважаемые форумчане. Помогите со следующей задачкой (вероятно - простой). Как из неориентированного графа (например, по матрице смежности) выделить полный подграф с максимальным числом вершин (или несколько таковых)? Может описание этой задачи есть в какой-нибудь книге?

Заранее спасибо.

P.S. Подскажите заодно, как поместить тему в раздел Дискретной математики? :-)

 Профиль  
                  
 
 Re: Выделение полного подграфа
Сообщение12.08.2010, 13:53 
Заслуженный участник


08/04/08
8562
Под полным подграфом понимается клика? т.е. граф, любая пара различных вершин которого связана ребром? Тогда это NP-полная задача, в общем решается перебором. Если $\bar G$ - дополнительный граф к данному $G$, то получаем задачу распознавания максимального независимого множества, которая, ессно, так же NP-полная.
Ну то есть не совсем перебором, для некоторых частных случаев задачу можно решить чуть быстрее (и запрограммировать это, я сам так делал), но в общем случае - перебор.
Книжку можно посмотреть: Гэри, Джонсон Вычислительные машины и труднорешаемые задачи - это по NP-задачам. А по графам много книжек: Кристофидес, Харари, Берхс, Зыков и т.п., я их все не помню, погуглите.

-- Чт авг 12, 2010 14:55:10 --

(Оффтоп)

Николай писал(а):
P.S. Подскажите заодно, как поместить тему в раздел Дискретной математики? :-)

Это может сделать только модератор из соображений типа "сохранить учебный материал" (я точно не знаю). Вам это делать не надо.

 Профиль  
                  
 
 Re: Выделение полного подграфа
Сообщение13.08.2010, 13:31 


10/06/05
100
Тюмень
для Sonic86
Спасибо большое за советы.


В процессе задача несколько скорректировалась - нам было нужно разбить неориентированный граф на минимальное число полных подграфов (желательно, не имеющих общих вершин). В итоге мы реализовали некоторый самодельный :-) алгоритм, основанный на переборе. Не думаю, что он оптимален, благо графы, возникающие в нашей задаче, имеют небольшое число вершин. Ну и, конечно, это только черновой вариант, который ещё нужно проверить и по возможности оптимизировать.

-- Пт авг 13, 2010 14:37:39 --

В действительности, никогда не имел дело с теорией графов, а тут почти одновременно возникло две задачи. Со второй я ещё сам помучаюсь, но если не осилю - выложу здесь её описание.

 Профиль  
                  
 
 Re: Выделение полного подграфа
Сообщение13.08.2010, 13:38 
Заслуженный участник


08/04/08
8562
Николай писал(а):
В итоге мы реализовали некоторый самодельный :-) алгоритм, основанный на переборе. Не думаю, что он оптимален, благо графы, возникающие в нашей задаче, имеют небольшое число вершин. Ну и, конечно, это только черновой вариант, который ещё нужно проверить и по возможности оптимизировать.

Ага, хорошо, что они небольшие. И в принципе алгоритм самому можно придумать и пооптимизировать, он простой.
Я только забыл сказать, что задачу эту если свести к задаче о независимом множестве, то потом ее можно записать в виде задачи БЛП (булева линейного программирования), потом взять релаксированную задачу для $x_j \in \mathbb{R}_+$ и решать ее методами линейного программирования и методом отсечений Гомори. Только метод отсечений неизвестно сколько итераций делает, т.е. там тоже особо много чего не получится. Я сам эти алгоритмы не реализовывал никогда, поэтому не могу даже посоветовать, использовать этот метод при большом количестве вершин в графе или нет. Ну просто знайте, что вот этот метод есть, если что, вдруг пригодится.

 Профиль  
                  
 
 Re: Выделение полного подграфа
Сообщение01.02.2011, 07:32 


10/06/05
100
Тюмень
Нашёл свою старую тему по двум поводам
1) Нашлась хорошая статья. Правда там она платная, но листинг программы, приведённой в ней, можно найти и бесплатно (я и статью где-то бесплатно скачал, но не могу найти - где :-) Если кому надо - вышлю)

2) Как я уже писал ранее, задача - разбить граф на минимальное кол-во полных подграфов, а алгоритм в статье выделяет максимальный
полный подграф. Мы выкрутились так - выделяем максимальный полный подграф и выбрасываем его вершины из исходного
графа. В полученном графе снова выделяем клику и т.д., пока все вершины не будут выброшены. На практике это уже дало очень хорошие
результаты, но совсем нет уверенности, что мы таким образом разбиваем граф на минимальное число полных подграфов.
Может кто-нибудь подскажет что-то по этому поводу?

 Профиль  
                  
 
 Re: Выделение полного подграфа
Сообщение01.02.2011, 12:12 
Заслуженный участник


22/11/10
1184
Минимальность не гарантирована. Простой пример. Полный граф $G$ из 4-х вершин. Ещё одна вершина связана с парой из $G$ и еще одна с другой парой. Всего 6 вершин. Можно разбить на два полных графа, каждый с 3-я вершинами. А жадный алгоритм выдаст 3 графа.

 Профиль  
                  
 
 Re: Выделение полного подграфа
Сообщение01.02.2011, 16:06 


10/06/05
100
Тюмень
sup в сообщении #407580 писал(а):
Минимальность не гарантирована. Простой пример. Полный граф $G$ из 4-х вершин. Ещё одна вершина связана с парой из $G$ и еще одна с другой парой. Всего 6 вершин. Можно разбить на два полных графа, каждый с 3-я вершинами. А жадный алгоритм выдаст 3 графа.


Это действительно так.

А если такой алгоритм. Предположим, у нас есть исходный граф $G$. Действуем по следующему алгоритму. Выделяем из него полный подграф $g$ (один из возможных), удаляем его вершины из исходного, рассматриваем полученный граф $G/g$ (не знаю, есть такое обозначение или нет). В нём снова выделяем один из возможных и т.д., пока не уберём все вершины.

Перебрав все возможные варианты выделения полных подграфов (а их количество даже для небольшого исходного может оказаться пугающим), выберем самую короткую "цепочку". Будет ли длина этой цепочки минимальной - вот вопрос (то, что не обязательно эта цепочка будет единственной минимальной длины - это ясно). Ведь при таком алгоритме два подграфа не моуг содержать одну вершину (я выше писал, что это желательно, но в действительности - не обязательно). Интуиция подсказывает, что ответ положительный - длина этой цепочки будет минимальной. Хотя могу ошибаться. Надо подумать :-)

 Профиль  
                  
 
 Re: Выделение полного подграфа
Сообщение01.02.2011, 16:54 
Заслуженный участник


22/11/10
1184
Ну, по сути, это просто перебор. Этот вариант всегда есть в запасе :-)
Подграфы вполне можно считать изолированными. Если одна вершина принадлежит нескольким подграфам, то её можно просто выбросить из всех, кроме одного.
А вообще любопытная задача.

 Профиль  
                  
 
 Re: Выделение полного подграфа
Сообщение01.02.2011, 18:01 
Заслуженный участник
Аватара пользователя


11/03/08
9983
Москва
Один из работающих алгоритмов поиска клики - разбиваем множество поиска на две части - подграфы, включающие вершину Х, и подграфы, её заведомо не включающие.
То есть, выбрав Х, строим два графа - первый состоит из вершин, смежных с Х, второй представляет собой исходный граф без вершины Х (и смежных лишь с ней). Проверяем их на полноту. Если полный граф не получен - ветвимся аналогично на каждом из графов. В худшем случае число их растёт, как степени двойки, но на практике достаточно быстро получаем полный граф, и начинаем отсекать ветви, на которых мощность графа меньше найденного.
Относительно выбора вершины Х определённо не скажу, но если брать с наибольшей степенью, работает не так уж плохо.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group