Алгоритм пересечения наименьших краев

(Прежде, чем кто-нибудь спросит, это не домашнее задание.)

Скажем, у вас есть 2 массива y0 и y1, где

y0 = [1,2,3,4,5,6] и y1 = [2,1,6,3,4,5]

Примечание y0[0] = y1[1] = 1, это означает, что y0[0] подключен к y1[1]. Аналогично, y0[2] = y1[3] = 3, поэтому они также "связаны".

alt text (любезность изображения: belisarius)

Каждый элемент в одном массиве имеет соответствующую запись во втором массиве. Представьте себе каждый элемент массива как вершину, и эти соединения как Edges выводятся из одного массива в другой.

Мне нужно найти набор ребер (максимального размера), чтобы ни один из "ребер" (или строк) не пересекал.

В приведенном выше примере обратите внимание,

  • Edge 1 и Edge 2 будут пересекаться.
  • Edge 6 будет пересекаться с Edge 3, Edge 4, Edge 5.

Следовательно, решение может быть 1,3,4,5 или 2,3,4,5 (size = 4), так как ни одна из этих линий не будет пересекаться. Могут быть несколько решений, но мне нужен только один.

Мой вопрос: Есть ли какая-нибудь известная проблема CS, которая напоминает это? Какой алгоритм я должен использовать?

Я попытался объяснить свою проблему на примере, однако, если он все еще не ясен, я проясню любые запросы. Спасибо заранее.

Ответы

Ответ 1

Предполагая, что ни один элемент не повторяется в одном массиве, это просто самая длинная возрастающая подпоследовательность.

Без ограничения общности предположим, что первый массив A1 является просто [1, 2, 3, ..., n]. Это преобразование может быть выполнено в O (n) с хэш-множеством или O (nlogn) с BST.

Обратите внимание, что наш набор имеет пересечение тогда и только тогда, когда он содержит i и j с i < j, но j, появляющимся перед i во втором массиве A2 (с тех пор как i < j мы знаем, что i появляется перед j в A1).

Тогда, если множество не имеет пересечения, оно явно соответствует возрастающей подпоследовательности A2 и наоборот.

Самая длинная возрастающая подпоследовательность имеет простое решение O (n ^ 2) и немного более сложное решение O (nlogn).

Ответ 3

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

Название заставляет задуматься, как будто обстоятельства могут налагать некоторые обстоятельства, так что "непересекающиеся" ребра могут оказаться невозможными ( "наименьшие пересечения границ" ). Возможно, вам нужно покрытие кромок (или 1-обложка), т.е. Каждая вершина принадлежит хотя бы одному ребру. Тогда, если две "вершинные" массивы имеют разную длину, не будет "идеального соответствия", т.е. Соответствия, которое также является обложкой. Классический результат "Теорема о браке в зале" характеризует, когда есть идеальные соответствия в двудольном графе. Если граф является регулярным (все вершины имеют одинаковую степень), то Теорема Кёнига говорит, что существует идеальное соответствие (и более).

Добавлено:

Возможно, стоит сказать, что изображение, похоже, говорит об ограничениях на выбор ребер. Два набора вершин имеют координаты {(i, 0) | я = 1,..., N} и {(j, 1) | J = 1,.., N}. Есть N доступных ребер, отрезки, которые соединяют (i, 0) и (j, 1) всякий раз, когда y0 [i] = y1 [j]. Хотя в строке темы указано "наименьшие пересечения границ", решение является максимальным подмножеством этих ребер, которое не допускает пересечений, самый большой плоский прямой график содержится в заданном графе перестановок.

Это связано с рассмотренной здесь проблемой минимизации пересечения двух уровней:

Альтернативный метод пересечения минимизации на иерархических графах - P. Mutzel

"Мы предлагаем... удалить минимальное число ребер, чтобы полученный граф был плоскостью k-уровня... В этой статье мы рассмотрим случай k = 2... [W] e адресуем проблему извлечения двухуровневый плоский подграф максимального веса в заданном двухуровневом графе. Эта проблема NP-hard."

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

Рассмотрим "ребра" исходной задачи как "узлы" нового графика, где два узла смежны, если исходные ребра пересекаются. [Это пример графика пересечения.] Задача, которая была скорректирована, теперь состоит в том, чтобы найти максимальный независимый набор нового графика. Проблемы такого рода вообще NP-жесткие, но опять же мы подозреваем, что объем существующих проблем может быть не настолько общим.

Одной из причин заподозрить существование полиномиального алгоритма времени является наличие алгоритмов приближения полиномиального времени для максимальных независимых подмножеств графов пересечений для конечных наборов плоских выпуклых множеств:

Независимый набор диаграмм пересечения выпуклых объектов в 2D - P. Agarwal и M Mustafa

"В настоящей статье приводятся алгоритмы аппроксимации для задачи независимых множеств на пересекающихся графах отрезков и выпуклых объектов на плоскости.

Есть еще одно замечание о специфичности настоящей проблемы, которая, по-видимому, делает ее разрешимой в полиномиальное время. A circle graph - это график пересечения сегментов линии, которые могут быть нарисованы как хорды круга. По аргументу пертуации прямые линии графа перестановок могут быть нарисованы так, чтобы без потерь или введения пересечений.

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

Нэш, Николас; Gregg, David (2010), "Выходной чувствительный алгоритм для вычисления максимального независимого набора кругового графа" , "Обработка информации" 116 (16): 630-634

Я также нашел эту ссылку в Google Книгах:

Valiente, Gabriel (2003), "Новый простой алгоритм для задачи с максимальным весом на сетчатых диаграммах" , Алгоритмы и вычисления: 14-й симпозиум, ISAAC 2003 Киото