Алгоритм/аппроксимация для комбинированного независимого расстояния установки/помех

Вход: График G Вывод: несколько независимых множеств, так что принадлежность a node ко всем независимым множествам уникальна. A node поэтому не имеет никаких связей с любым node в своем собственном наборе. Вот пример пути.

Поскольку разъяснение было вызвано здесь еще одним рефрасалом:

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

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

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

  • если два узла смежны в графе, они не должны присутствовать в одном наборе, следовательно, это независимый набор

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

Решение:

  • A B/
  • /B D

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

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

  • A D B
  • /D B

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

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

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

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

Ответ 1

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

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

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

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

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

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

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

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

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

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

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

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

Рассмотрим, что происходит с вашим примером выше, когда вы добавляете еще один пример node, 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, но он пересекается с тем, что связано с node 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, никакие битовые шаблоны с двумя или более битами не останутся, и нам нужно будет создать новый набор для оставшегося node, дающий ему битовый шаблон 100.

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

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

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

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

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

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

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

  • Работайте через решетку с голубями от самых больших до самых маленьких складывающиеся узлы в уникальные множества.

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

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

Ответ 2

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

Если эта проблема похожа на то, что я предполагаю, независимые множества можно найти по этому алгоритму: 1. Сделайте поиск по глубине на ориентированном графе, запишите время дерева, внедренного этим движением node. 2. затем переверните все ребра в этом графе 3. повторите поиск глубины на измененном графике. Алгоритм точно объясняется книгой "Введение в алографит"