![]() |
|
|
![]()
|
|
| nettby |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 10.5.2009 Репутация: нет Всего: нет |
Всем привет!
Знает ли кто небудь как можно решить такую задачу: Есть граф G=(V, E). Каждой вершине v из V присвоена метка l_v из множества A={1, 0, -1}. У каждого ребра e из E есть вес w_e. Выберем все вершины с меткой равной 0 и обозначим это множество V0. Надо так перемаркировать вершины из V0 (присвоить или 1 или -1), чтобы следующая сумма была максимальной: с(G) = СУММА(w_e * l_v * l_u), где e=(u, v) in E Надо найти алгоритм который решит данную задачу за полиномиальное время или доказать что задача (есть параметр k и граф G, можно ли выполнить перемаркировку вершин V0 из G, так что с(G)>=k) является NP-полной. Любые идеи или комментарии приветствуются. |
|||
|
||||
| maxdiver |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
Иными словами, нужно раскрасить вершины графа в два цвета (при том, что он уже частично раскрашен) так, чтобы максимизировать сумму весов рёбер, оба конца которых одного цвета.
Почему-то кажется, что задача NP-полная, но никаких доводов у меня пока нет. Надо думать... |
|||
|
||||
| maxdiver |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
А, блин, вот если бы не было никакой предварительной раскраски графа (т.е. если бы V0 = V), то это же в точности задача минимального разреза, которая решается алгоритмом нахождения максимального потока (или специальным алгоритмом, например, Stoer-Wagner) полиномиально.
Осталось понять, не ухудшает ли ничего предварительная раскраска... |
|||
|
||||
| nettby |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 10.5.2009 Репутация: нет Всего: нет |
Ага, мне уже тоже подсказали на другом форуме что эта задача сводится к задаче минимального разреза. |
|||
|
||||
| maxdiver |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
Можно попробовать ввести две фиктивные вершины для каждого цвета, и соединить каждую из предварительно раскрашенных вершин с фиктивной ребром веса "бесконечность" (чтобы вершины одного цвета уж точно попали в одну группу), а две фиктивные вершины соединить ребром веса "минус бесконечность" (чтобы вершины одного цвета случайно не попали в одну группу). Но тогда возникает проблема, что возникают рёбра отрицательного веса, поэтому многие алгоритмы неприменимы. Поэтому проблема с пред-раскраской остаётся...
По всем форумам рассылку что ли сделал? Это сообщение отредактировал(а) maxdiver - 10.5.2009, 20:44 |
||||
|
|||||
| nettby |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 10.5.2009 Репутация: нет Всего: нет |
Неа, в двух спросил. В этом и еще в другом Я думаю что завтра напишу полное решение и напишу сюда, вдруг кому пригодится. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |