Алгоритм / аппроксимация для комбинированного независимого набора / расстояния Хэмминга - PullRequest
10 голосов
/ 18 августа 2010

Вход: график G Выход: несколько независимых наборов, так что принадлежность узла ко всем независимым наборам уникальна.Следовательно, узел не имеет соединений с каким-либо узлом в своем собственном наборе.Вот пример пути.

Поскольку здесь потребовалось еще одно уточнение:

Разделите данный граф на множества так, чтобы

  1. я мог сказатьузел из всех остальных по его членству в наборах, например, если узел i присутствует только в наборе A, никакой другой узел не должен присутствовать в наборе A только

    , если узел j присутствует в множествах A и B, то никакого другого узла нетдолжен присутствовать только в наборах A и B.если принадлежность узлов кодируется битовой комбинацией, то эти битовые комбинации имеют расстояние Хэмминга, по крайней мере, один

  2. , если два графа являются смежными в графе, они не должны присутствовать втот же набор, следовательно, будет независимым набором

Пример: B не имеет соседних узлов D => A, A => D

Решение:

  1. AB /
  2. / BD

A имеет битовую комбинацию 10 и не имеет соседнего узла в своем наборе.B имеет битовую комбинацию 11 и не имеет соседних узлов, D имеет 01, поэтому все узлы имеют расстояние Хэмминга не менее 1 и нет смежных узлов => правильный

Неправильно, поскольку D и A связаны:

  1. ADB
  2. / DB

A имеет битовую комбинацию 10 и D в своем наборе, они смежные.B имеет битовую комбинацию 11 и не имеет смежного узла, D имеет 11, как и B, поэтому в этом решении есть две ошибки, и поэтому оно не принимается.

Конечно, это должно быть расширено до большего числа множеств в качестве числаузлов в графике увеличивается, так как вам нужно как минимум log(n) наборов.

Я уже написал преобразование в MAX-SAT, чтобы использовать для этого спутниковый решатель.но количество пунктов просто слишком велико.Более прямой подход был бы хорош.Пока у меня есть приближение, но я бы хотел точное решение или хотя бы лучшее приближение.

Я попробовал подход, в котором я использовал рой частиц для оптимизации от произвольного решения к лучшему.Однако время работы довольно ужасное, а результаты далеки от хороших.Я ищу динамический алгоритм или что-то, однако я не могу понять, как разделить и победить эту проблему.

Ответы [ 2 ]

7 голосов
/ 30 августа 2010

Не полный ответ, и я не знаю, насколько это будет полезно для вас. Но здесь идет:

Расстояние Хэмминга поражает меня как красная сельдь. В вашем заявлении о проблеме говорится, что оно должно быть не меньше 1, но может быть 1000. Достаточно сказать, что битовая кодировка для набора членства каждого узла уникальна.

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

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

В приведенном выше примере используются направленные ребра, но опять же, это выглядит как красная сельдь. Если A не может быть в том же наборе, что и D, потому что A => D, D не может быть в том же наборе, что и A, независимо от того, D => A.

Вы упоминаете, что вам нужно хотя бы log (N) наборов. У вас также будет максимум N комплектов. Для полностью связного графа (с (N ^ 2-N) / 2 ненаправленными ребрами) потребуется N множеств, каждый из которых содержит один узел.

На самом деле, если ваш граф содержит полностью связный симплекс из M измерений (M в 1..N-1) с M + 1 вершинами и (M ^ 2 + M) / 2 ненаправленными ребрами, вам потребуется как минимум М + 1 компл.

В приведенном выше примере у вас есть один такой симплекс (M = 1) с 2 вершинами {A, D} и 1 (ненаправленным) ребром {(A, D)}.

Казалось бы, ваша проблема сводится к поиску самых больших полностью связанных симплексов в вашем графе. Другими словами, у вас есть проблема с маршрутизацией: сколько измерений вам нужно, чтобы выровнять ребра, чтобы они не пересекались? Это не похоже на очень масштабируемую проблему.

Первый найденный большой симплекс прост. Каждый вершинный узел получает новый набор со своим собственным битом.

Несвязные узлы просты. Как только с подключенными узлами разбираются, просто нумеруйте непересекающиеся узлы, последовательно пропуская любые ранее использованные битовые комбинации. Из приведенного выше примера, поскольку A и D берут 01 и 10, следующая доступная битовая комбинация для B равна 11.

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

Рассмотрим, что происходит с вашим примером выше, когда вы добавляете другой узел C в пример:

Если C соединяется напрямую как с A, так и с D, то исходной проблемой становится поиск 2-симплекса с 3 вершинами {A, C, D} и 3 ребрами {(A, c), (A, D), ( CD)}. Как только A, C и D принимают битовые комбинации 001, 010 и 100, наименьшая доступная битовая комбинация для непересекающегося B равна 011.

Если, с другой стороны, C соединяет непосредственно A или D, но не оба, граф имеет два 1-симплекса. Предположим, что мы находим 1-симплекс с вершинами {A, D}, сначала дающими им битовые комбинации 01 и 10, затем возникает проблема, как сложить C в этот диапазон. Единственным битовым шаблоном, по крайней мере, с 2 битами, является 11, но он пересекается с любым узлом C, к которому подключается, поэтому мы должны создать новый набор и поместить в него C. На данный момент решение похоже на приведенное выше.

Если C не пересекается, либо B, либо C получат битовую комбинацию 11, а оставшейся потребуется новый набор и битовая комбинация 100.

Предположим, что C соединяется с B, но не с A или D. Снова граф имеет два 1-симплекса, но на этот раз не пересекается. Предположим, что {A, D} находится первым, как указано выше, давая A и D битовые комбинации 10 и 01. Мы можем сложить B или C в существующий диапазон. Единственный доступный битовый шаблон в диапазоне - 11, и B или C может получить этот шаблон, поскольку ни один из них не является смежным с A или D. После использования 11 битовые комбинации с установленным 2 или более битами не останутся, и нам придется создавать новый набор для оставшегося узла, дающий ему битовую комбинацию 100.

Предположим, что C соединяется со всеми 3 A, B и D. В этом случае граф имеет 2-симплекс с 3 вершинами {A, C, D} и 1-симплекс с 2 вершинами {B, C}. Действуя, как описано выше, после обработки наибольшего симплекса, A, C и D будут иметь битовые комбинации 001, 010, 100. Для сворачивания B в этот диапазон доступные битовые комбинации с установленными 2 или более битами: 011, 101, 110 и 111. Все они, кроме 101, пересекаются с C, так что B получит битовую комбинацию 101.

Тогда возникает вопрос: Насколько эффективно вы можете найти самые большие полностью связные симплексы?

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

  1. Прокрутите края, обновляя вершины с подсчетом соединительные кромки.

  2. Для каждого подключенного узла создайте массив из Cn с начальным нулем где Cn - количество ребер подключен к узлу n.

  3. Снова проведите края, для подключенных узлов n1 и n2, увеличить счетчик в n1 соответствует Cn2 и наоборот. Если Cn2> Cn1, обновите последний счет в массиве n1 и наоборот.

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

  5. Пройдите через массив голубиных отверстий от самого большого до самого маленького извлечения и складывание узлов в уникальные наборы.

Если ваши узлы находятся в наборе N, а ваши ребра в множестве E, сложность будет: O (| N | + | E | + O (Шаг 5))

Если вышеуказанного приближения достаточно, возникает вопрос: Насколько эффективно вы можете сложить узлы в существующие диапазоны с учетом требований?

1 голос
/ 27 августа 2010

Возможно, это не тот ответ, который вы ожидаете, но я не могу найти место для добавления комментария.Поэтому я набираю это прямо здесь.Я не могу полностью понять ваш вопрос.Или для этого нужны конкретные знания?Что это за независимый набор?Как я знаю, узел в независимом наборе из ориентированного графа имеет двусторонний путь к любому другому узлу в этом наборе.Ваше представление совпадает?

Если эта проблема похожа на то, что я предполагаю, независимые множества могут быть найдены с помощью этого алгоритма: 1. выполнить поиск в глубину на ориентированном графе, записывает время дерева, корня которогоУзел пройден.2. затем переверните все ребра на этом графике 3. снова выполните поиск по глубине на модифицированном графике.Алгоритм точно объясняется книгой «Введение в алогритм»

...