Блог пользователя perec1970

Автор perec1970, история, 9 лет назад, По-русски

Уважаемые форумчане! Подскажите, пожалуйста, в каком направлении "копать" следующую задачу. Идей нет. Написать программу, которая пытается найти оптимальную раскраску для заданного графа. Цвета применяются к вершинам графа и доступны только два цвета: черный и белый. Раскраска графа называется оптимальной, если в ней максимальное количество чёрных вершин. Раскраска ограничена тем правилом, что не может быть двух смежных чёрных вершин. Спасибо.

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
9 лет назад, # |
  Проголосовать: нравится +31 Проголосовать: не нравится

Эта задача называется "максимальное независимое множество" и является NP-полной. Так что нужно думать в сторону какого-то перебора.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    Тут ведь только два цвета. Достаточно правильно раскрасить двудольный граф за O(N). И цвет, который встречается больше раз, сделать черным.

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Две былых вершины могут быть смежными.

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Я так делал. Это не верное решение. Вот например есть одна вершина и из нее выходит 5 , а потом все 5 сходятся в одну. Здесь выгодно первую сделать белой все 5 черными, а последнюю белой.

      • »
        »
        »
        »
        9 лет назад, # ^ |
          Проголосовать: нравится +3 Проголосовать: не нравится

        Твой пример не ломает решение, а этот ломает.

        • »
          »
          »
          »
          »
          9 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

          Согласен. А если всегда начинать с вершин с наибольшей степенью и смежные раскрашивать в черный цвет.

          • »
            »
            »
            »
            »
            »
            9 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            Сдал эту задачу на e-olimp, но решение не очень хорошее. Если интересно — могу рассказать.

»
9 лет назад, # |
Rev. 2   Проголосовать: нравится -11 Проголосовать: не нравится

А задача из жизни или с контеста? В смысле, тесты случайные или "умные"? Может, стоит загнать что-нибудь рандомизированное? Например(в качестве первого пришедшего в голову решения) перебирать вершины в случайном порядке, если очередная вершина еще не запрещена — добавлять в "черные" и запрещать все смежные с ней?

P.S. разумеется, такое нужно запустить несколько раз, наилучший ответ выводить