(Прежде, чем кто-нибудь спросит, это не домашнее задание.)
Скажем, у вас есть 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
, поэтому они также "связаны".
(любезность изображения: 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, которая напоминает это? Какой алгоритм я должен использовать?
Я попытался объяснить свою проблему на примере, однако, если он все еще не ясен, я проясню любые запросы. Спасибо заранее.