Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Связный граф, его раскраска... походит на задачу о 4-х красках 
V
    Опции темы
KasMP
Дата 13.3.2009, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: нет
Всего: 30



Есть связный граф и 4 цвета. Надо найти такую раскраску, при которой никакие две смежные вершины не покрашены в один цвет.
Предположительно, граф будет задаваться матрицей смежности.

Добавлено через 2 минуты и 1 секунду
Говорят, эта задача относится к классу NP-полных задач... Т.е. нет лучшего алгоритма решения, чем просто перебор smile .

Добавлено через 5 минут и 38 секунд
Если даже рассматривать перебор, то не совсем понятно, как перебирать вершины графа... Граф любой: хотя с циклами, хоть без, хоть ориентированный, хоть нет, хоть.
Сегодня судьба свела меня с алгоритмом Липтона... В нем используется представление ... эээ ... графообразных структур, которое можно попробовать задействовать. Пока хочу идти от этого...
PM MAIL   Вверх
maxdiver
Дата 14.3.2009, 00:41 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 29.1.2008
Где: Саратов

Репутация: 16
Всего: 18



Перебираем мы не вершины графа, а перебираем то, как мы их раскрашиваем.
Т.е. для каждой вершины перебираем все возможные её цвета, и проверяем, корректная ли раскраска у нас получилась.

Что такое алгоритм Липтона, понятия не имею. Это такое задание - использовать его?
PM MAIL WWW ICQ   Вверх
KasMP
Дата 14.3.2009, 06:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: нет
Всего: 30



Цитата(maxdiver @  14.3.2009,  00:41 Найти цитируемый пост)
Перебираем мы не вершины графа, а перебираем то, как мы их раскрашиваем.

Я понимаю, я так для краткости написала.
Цитата(maxdiver @  14.3.2009,  00:41 Найти цитируемый пост)
Это такое задание - использовать его? 

Нет.
Задание - пользоваться методами теории графов.
Цитата(maxdiver @  14.3.2009,  00:41 Найти цитируемый пост)
Что такое алгоритм Липтона, понятия не имею.

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

Короче, все равно это все не поможет, т.к. порождение всевозможных путей и выбор нужных к моей задачке отношения не имеет - возможные пути уже указаны.

Ну и там же было сказано, что задача 3-раскраски (раскраски в три цвета так, чтобы смежые вершины были разноцветными) - NP-полная, что это доказано и пока ничего не найдено... Я так понимаю, тогда 4-раскраска тем более NP-полная.
Цитата(maxdiver @  14.3.2009,  00:41 Найти цитируемый пост)
Т.е. для каждой вершины перебираем все возможные её цвета, и проверяем, корректная ли раскраска у нас получилась.

Вот в этом и была моя ошибка.
Я все время пыталась сначала понять, смежны ли вершины и раскрасить их в разные цвета; потом, если каким-то вершинам не хватило раскраски, то сделать, например, раскраску не 1-2-3, а 1-2-1... А это же по сути построение раскраски smile .
А в переборе с точностью до наоборот обратный подход: сначала раскрасить как попало - хоть все вершины в один цвет smile (ну понятно, что в связном графе не надо тратить силы на рассмотрение этого варианта), а потом смотреть, смежно или не смежно.
Оказывается, у меня проблемы с определением перебора smile !

Спасибо, вобщем smile  smile !
PM MAIL   Вверх
skyboy
Дата 14.3.2009, 10:06 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



Цитата(KasMP @  14.3.2009,  05:17 Найти цитируемый пост)
А в переборе с точностью до наоборот обратный подход: сначала раскрасить как попало - хоть все вершины в один цвет

ну, почему? если у тебя при раскраске 2-й по счету вершины уже видно, что схема не подойдет(цвет у первой и второй одинаковый и они смежные), то берем другой цвет для второй вершины, а не строим все остальные (N-2)! вариантов сочетаний для явно проигрышного варианта раскраски.
PM MAIL   Вверх
Sefko
Дата 14.3.2009, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 5.3.2009

Репутация: 1
Всего: 1



Доказано, что невозможно с помощью циркуля и линейки разделить любой угол на три равные части. Ну и что? Прямой угол делится запросто. Это я к тому, что NP-полная задача не должна уж так сильно запугивать..

Скажем, пять вершин и все, какие возможны, ребра - сильнее не связать. Без всякого перебора очевидно, что задача не разрешима: все вершины смежные - стало быть, все  нужно красить в разные цвета. А цветов у нас всего четыре.

А если у нас не 5 вершин, а 100005? Чем нам может помочь предыдущее наблюдение?
А тем, что если мы среди 100005 найдем 5 таких, что они связаны вот так крепко, то и вся задача для 100005 неразрешима. А поиск таких завязок - это не NP-полная задача, а что-то порядка поиска циклов в графе.

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

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

Осталось разобраться с циклами.

Удачи!
_______________________________________________
P.S. Подсказка.
Если у нас есть циклы, но никакие два цикла не имеют общих ребер, то задача тоже решается тривиально прямым построением. Но только если цветов больше трех.
Это замечание надо понимать и так, что из того, что для трех цветов задача NP-полная, то из этого не следует, что она такая же трудная для четырех цветов.
А здравый смысл без всякой теории графов подсказывает: чем больше цветов, тем проще задача.


Это сообщение отредактировал(а) Sefko - 14.3.2009, 20:14
PM MAIL   Вверх
maxdiver
Дата 14.3.2009, 21:54 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 29.1.2008
Где: Саратов

Репутация: 16
Всего: 18



Sefko
Цитата
А тем, что если мы среди 100005 найдем 5 таких, что они связаны вот так крепко, то и вся задача для 100005 неразрешима. А поиск таких завязок - это не NP-полная задача, а что-то порядка поиска циклов в графе.

Поиск клик (и даже проверка наличия клик фиксированного размера) тоже NP-полная задача. В данном случае (для размера 5) что-то не видится алгоритма, быстрее O(N^5). Это огромное время, на большинстве практических тестов перебор отработает быстрее. Более того, как вы сами заметили, отсутствие таких клик не означает, что граф может быть раскрашен, и уж тем более не даёт самой раскраски.

Цитата
Но ведь дело-то еще проще. Не нужно искать такие плотно связные группы - достаточно выяснить, есть ли вершины, в которых сходится более чем три ребра (ориентированность ребер к самой задаче отношения не имеет - можем считать граф неориентированным). Если есть, то все - приехали.

Здесь вообще не понял. Ну будет у нас такая "звёздочка" - граф из 10 вершин, где все вершины 2..10 смежны вершине 1 и только ей. В вершине 1 "сходятся" 9 рёбер, однако этот граф можно раскрасить в 2 цвета.

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

Осталось разобраться с циклами.

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

Гениально smile Сколько бы частных случаев мы ни разбирали, останется бесконечное число графов (и, скорее всего, асимптотически почти все графы), которые не подходят ни под какой частный случай.
PM MAIL WWW ICQ   Вверх
maxdiver
Дата 14.3.2009, 22:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 29.1.2008
Где: Саратов

Репутация: 16
Всего: 18



Sefko
Кстати, цитата из авторитетной книги "Вычислительные машины и труднорешаемые задачи" Гэри и Джонсона:
Цитата
УСЛОВИЕ. Заданы граф G =(V, E) и положительное целое 
число K<|V|. 
ВОПРОС. Верно ли, что граф G K-раскрашиваем? (Граф на- 
называется K-раскрашиваемым, если существует такая функция 
f: V->{1,2, ..., К}, что если {u,v} in E, то f(u)!=f(v).) 
Источник [280]. К этой задаче сводится задача 3-ВЫП. 
Комментарий. При К = 2 задача разрешима за полиномиаль- 
полиномиальное время, но при всех фиксированных К >= 3, а также для 
К = 3 и плоских графов, степени всех вершин которых не пре- 
превосходят 4, задача NP-полна. Она остается также NP-полной 
при К = 3, когда G— это граф пересечений отрезков прямых 
линий на плоскости [112]. Задача NP-полна также для произ- 
произвольного К и графов пересечения окружностей и дуг окруж- 
окружностей (даже если графы представлены в виде семейства дуг). 
Для графов пересечения дуг окружностей, представленных в 
виде семейства дуг, при любом фиксированном К задача разре- 
разрешима за полиномиальное время [153]. В общем случае задача 
может быть решена за полиномиальное время для графов срав- 
сравнимости [117], для триангулированных графов [163], для (3,1)- 
графов [532], а также для графов, не имеющих вершин степени 
выше 3 [56].


Цитата
А здравый смысл без всякой теории графов подсказывает: чем больше цветов, тем проще задача.

Т.н. "здравый смысл" много чего подсказывает (например, мне подсказывает, что задача о гамильтоновом цикле не должна бы быть сильно сложнее задачи о эйлеровом цикле), но в математике, и особенно в теории сложности, доверяться ему просто глупо.
PM MAIL WWW ICQ   Вверх
Sefko
Дата 15.3.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 5.3.2009

Репутация: 1
Всего: 1



Цитата(maxdiver @  14.3.2009,  21:54 Найти цитируемый пост)
Здесь вообще не понял.
А тут и понимать особо нечего. Просто не стоит писать якобы серьезные сообщения наспех. Это кирпич в мой огород. Но удалять сообщение (методом затирки) не буду. Пусть висит. Другим наука.

PM MAIL   Вверх
KasMP
Дата 17.3.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: нет
Всего: 30



Цитата(skyboy @  14.3.2009,  10:06 Найти цитируемый пост)
ну, почему? если у тебя при раскраске 2-й по счету вершины уже видно, что схема не подойдет(цвет у первой и второй одинаковый и они смежные), то берем другой цвет для второй вершины, а не строим все остальные (N-2)! вариантов сочетаний для явно проигрышного варианта раскраски. 

smile Конечно.
Когда я говорила "как попало", то я больше думала не об этой конкретной задаче, а о переборе в принципе. Понятно, что при переборе нужно исключать заведомо неподходящие варианты и что это очень желательная составная часть перебора.
(рада тебя видеть smile smile
ты все так же верен своему желанию (пере)делать все Рационально, Правильно, Экономично smile  smile ; только для того, чтобы это желание реже усаживало тебя переписывать чужое творение, я буду делать нормальные программы)

Цитата(Sefko @  14.3.2009,  19:56 Найти цитируемый пост)
...
Удачи!
...

Благодарим за желание помочь smile smile !
Цитата(maxdiver @  14.3.2009,  22:10 Найти цитируемый пост)
Кстати, цитата из авторитетной книги "Вычислительные машины и труднорешаемые задачи" Гэри и Джонсона:

Замечательная цитата smile  smile !
PM MAIL   Вверх
KasMP
Дата 17.3.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: нет
Всего: 30



Вобщем я начинаю представлять, как все это будет выглядеть smile .

Граф можно задавать любым удобным способом. Нам будет удобен тот, где можно максимально быстро и просто определить, смежны вершины с номерами i и j или нет.
Имхо "быстро и просто" - это м-а смежности: если [i][j] и [j][i] - нули, то вершины не смежны; иначе - смежны.


Теперь непосредственно перебор (с почти правильными исключениями smile ):

закрасили вершину i
смотрим на i-ые строку и столбец м-ы смежности (смотрим элементы с номерами [i][j] и [j][i], где 0<=j<i - зачем проверять на смежность еще не закрашенное?)
    увидели не смежность - перешли на уровень глубже (закрасили вершину i+1, ...)
    иначе - проверили вершины i и j на совпадение цвета
        увидели не совпадение - перешли на уровень глубже (закрасили вершину i+1, ...)
        иначе - проверили, есть ли неиспользованные цвета для i
                есть - поднялись обратно и перекрасили вершину i
                нет - поднялись, поднялись и перекрасили i-1

Добавлено через 2 минуты и 51 секунду
Какая-то рекурсия получается... Да еще и не исключены симметричные варианты: 4-3-1-3, 4-2-1-2, 3-2-1-2, 1-4-3-4, ... .
PM MAIL   Вверх
nworm
Дата 17.3.2009, 17:54 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 4
Всего: 8



KasMP
В 4 цвета можно раскрасить плоские графы, т.е. те которые можно нарисовать на плоскости без пересечения рёбер.

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


Это сообщение отредактировал(а) nworm - 17.3.2009, 17:56
PM MAIL WWW   Вверх
KasMP
Дата 17.3.2009, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: нет
Всего: 30



Цитата(nworm @  17.3.2009,  17:54 Найти цитируемый пост)
В 4 цвета можно раскрасить плоские графы

А не плоские, я так понимаю, иногда можно, иногда - нет?
Цитата(nworm @  17.3.2009,  17:54 Найти цитируемый пост)
Н. Кристофедес, "Теория графов. Алгоритмический подход."

Спасибо smile !Теперь знаю, что читать smile !
Цитата(nworm @  17.3.2009,  17:54 Найти цитируемый пост)
а затем найти где-нибудь в Интернете приглянувшийся запрограммированный алгоритм.

Нет, вот это я буду делать уже сама smile ...
(тем более, что результат надо еще нарисовать через API-функции smile )

Добавлено @ 18:13
Цитата(KasMP @  17.3.2009,  18:06 Найти цитируемый пост)
Спасибо smile !Теперь знаю, что читать smile !

Целая глава про раскраски smile !

Это сообщение отредактировал(а) KasMP - 17.3.2009, 18:14
PM MAIL   Вверх
maxdiver
Дата 17.3.2009, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 29.1.2008
Где: Саратов

Репутация: 16
Всего: 18



KasMP
Цитата
Теперь непосредственно перебор (с почти правильными исключениями  ):

Вроде всё правильно. Самая что ни на есть рекурсия.

Цитата
Целая глава про раскраски  !

Ну я посмотрел, если нужен точный алгоритм раскраски, то там предлагается либо точно такой же перебор, либо линейное программирование (что, я не думаю, лучше подходит тебе smile ), либо к задаче о наименьшем покрытии (для которой опять же переборный алгоритм).

Кстати, какие всё-таки ограничения на размер графа? Может, meet-in-the-middle с динамическим программированием будет удобно применить.
PM MAIL WWW ICQ   Вверх
KasMP
Дата 17.3.2009, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: нет
Всего: 30



Цитата(maxdiver @  17.3.2009,  22:03 Найти цитируемый пост)
Вроде всё правильно.

Особенно правилен перебор "симметричных" вариантов - цвета-то разные, а суть одинаковая:
4-3-1-3, 4-2-1-2, 3-2-1-2, 1-4-3-4, ... . 

4-3-1-3 читается как "вершина 1 цвета 4, вершина 2 цвета 3, в3 цвета 1, в4 цвета 3"
4-2-1-2 читается как "в1 цвета 4, в2 цвета 2, в3 цвета 1, в4 цвета 2"

Как от них избавиться??
Цитата(maxdiver @  17.3.2009,  22:03 Найти цитируемый пост)
Самая что ни на есть рекурсия.

Рекурсия, да smile .
Есть мнение, что рекурсией можно пользоваться тогда, когда нужна наглядность, маленькое время написания и простота самого процесса написания, а производительность некритична (и что вообще рекурсию используют неумеющие программировать люди); а нормальные программы лучше писать без рекурсии.
Поэтому мне не нравится рекурсия.

Хотя, с другой стороны, если даже в программе у нас не будет рекурсии в явном виде, то в нашем случае в памяти навряд ли что-то изменится: все равно надо помнить цвета предыдущих вершин в текущей "итерации", все равно будет создаваться что-то типа дерева рекурсии (правильно назвала?) и его глубина останется такой же. Я же правильно думаю smile ?
Т.е. пытаться не использовать рекурсию в данном случае бессмысленно smile ?
Цитата(maxdiver @  17.3.2009,  22:03 Найти цитируемый пост)
что, я не думаю, лучше подходит тебе smile

Почему smile ?
Цитата(maxdiver @  17.3.2009,  22:03 Найти цитируемый пост)
Кстати, какие всё-таки ограничения на размер графа?

Ну, понятно, что для проверки больше 20-30 никто не возьмет... Но для порядка пусть их будет 1024  smile smile .

Это сообщение отредактировал(а) KasMP - 17.3.2009, 22:31
PM MAIL   Вверх
KasMP
Дата 17.3.2009, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: нет
Всего: 30



Предполагаю хранить текущую раскраску в одномерном массиве размерности n: a[i] = {0, 1, ... 4}, 0 <= i <= n-1 .
Вроде логично smile (да и вообще по-другому сложно придумать smile ).

Можно a[i] сделать не каким-то целочисленным, а символьным - зачем занимать ненужные байты? (да и перепрыгивать через 1 байт легче, чем через 2 или 4)
Если a[i] - символ, то получается что-то типа битовой маски, только не из {0, 1}, а из {0, ..., 4}. Интересно smile .

Это сообщение отредактировал(а) KasMP - 17.3.2009, 22:53
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0956 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.