Как самая длинная возрастающая подпоследовательность является особым случаем самого длинного пути в DAG?

Я прочитал это утверждение в «Автостопом по алгоритмам». Но я не могу это представить, так как в задаче ЛИС все, что у нас есть, — это последовательность чисел. Как я могу модулировать это как задачу с графом?


person user1071840    schedule 16.10.2012    source источник


Ответы (2)


Представьте себе проблему двумерной сетки. Вы находитесь на нижнем левом квадрате, и вам нужно добраться до верхнего правого квадрата. Можете ли вы представить себе ациклический DAG из этой схемы?

Теперь представьте, что некоторые квадраты запрещены. Запрещение квадратов может привести к «замку» (вы можете оказаться в ловушке), и теперь действительно важно выбрать какими путями следовать. С точки зрения графа, вы можете думать о запрете квадратов как об удалении вершин, и ваша цель — перейти от корня к одному конкретному узлу (приемнику).

Теперь вернемся к ЛИС. При решении LIS вам действительно нужно решить, какие числа вы выберете, а какие нет. Ограничение состоит в том, что всякий раз, когда вы выбираете одно число, вы не можете выбрать любое число, которое меньше, чем это число (вы выбираете числа по порядку).

Теперь мы можем смешать обе вещи. Представьте, что вы строите график из вашей последовательности чисел:

  • Каждое число будет узлом.
  • Number-node A has an edge to number-node B iff
    • B comes after A in the sequence
    • B больше, чем A по стоимости
  • Есть специальный узел end
  • У каждого узла есть край, ведущий к концу

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

person leo    schedule 16.10.2012
comment
Очень красиво объяснил. Большое спасибо. :) - person user1071840; 17.10.2012

Если у нас есть массив чисел, например, 1, 5, 4, 8. Мы можем построить DAG следующим образом.

  • Добавьте каждое число как вершину.
  • Для каждой числовой вершины прибавьте исходящие ребра веса 1 ко всем большим числам после нее.
  • Добавьте узел S, исходящие ребра которого имеют вес 0, ко всем числовым вершинам.
  • Добавьте узел E, в который входят ребра веса 0 из всех вершин чисел.

Таким образом, задача «Самая длинная возрастающая подпоследовательность» превращается в задачу «Самый длинный путь от S к E».

LIC и DAG

person wenqiang    schedule 16.07.2013
comment
разве не должно быть и перевеса от 1->4 ? - person Shubham Mittal; 06.09.2016