Я наткнулся на решение, которое использует сортировку по терпению для получения длины самой длинной возрастающей подпоследовательности (LIS). http://www-stat.stanford.edu/~cgates/PERSI /papers/Longest.pdf, а здесь - http://en.wikipedia.org/wiki / Patience_sorting.

Доказательство того, что следование жадной стратегии на самом деле дает нам правильную длину, состоит из 2 частей:

  1. доказывает, что количество стопок не менее равно длине ЛИС.
  2. доказывает, что количество стопок, использующих жадную стратегию, не более равно LIS.

Таким образом, в силу пунктов 1) и 2) решение дает правильную длину LIS.

Я получил объяснение 1), но я просто не могу интуитивно понять часть 2). Может ли кто-нибудь использовать другой пример, чтобы убедить меня, что это действительно правда? Или вы даже можете использовать другую технику доказательства.

2
sachuraju 19 Сен 2013 в 21:41
Нежный отскок, чтобы кто-нибудь ответил.
 – 
sachuraju
22 Сен 2013 в 20:28

1 ответ

Лучший ответ

Я только что прочитал статью и согласен с тем, что доказательство немного, гм, лаконично. (Я бы сказал, что в нем отсутствуют некоторые довольно важные шаги!)

Интуитивно идея доказательства состоит в том, чтобы показать, что если вы играете с жадной стратегией и в конце игры выбираете любую карту из стопки с номером p, вы можете найти возрастающую подпоследовательность в исходном массиве, длина которой равна p. Если вы можете доказать этот факт, то вы можете сделать вывод, что максимальное количество стопок, созданных жадной стратегией, равно длине самой длинной возрастающей подпоследовательности.

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

  1. При чтении слева направо верхние карты в каждой стопке отсортированы.

  2. В любой момент времени каждая карта в каждой стопке является частью возрастающей подпоследовательности, длина которой определяется индексом стопки.

Часть (1) легко увидеть из жадной стратегии - каждый элемент помещается как можно левее, не нарушая правила, согласно которому карты меньшего размера всегда должны размещаться поверх карт большего размера. Это означает, что если карта помещается в стопку p, мы фактически берем отсортированную последовательность и уменьшаем значение элемента p до значения, которое больше, чем то, что находится в позиции p - 1 (если оно существует).

Чтобы увидеть часть (2), мы пойдем индуктивно. Первая размещенная карта помещается в стопку 1, и она также является частью возрастающей подпоследовательности длиной 1 (сама карта). Для индуктивного шага предположим, что это свойство выполняется после размещения n карт, и рассмотрим (n + 1) st. Предположим, что он попадает в стопку p. Если p = 1, то утверждение остается в силе, потому что эта карта сама по себе образует возрастающую подпоследовательность длины 1. В противном случае p> 1. Теперь посмотрим на карту наверху стопки p - 1. Мы знаем, что значение этой карты меньше, чем значение карты, которую мы только что поместили, поскольку в противном случае мы бы поместили карту поверх нее. куча. Мы также знаем, что карта наверху этой стопки предшествует карте, которую мы только что разместили в исходном порядке, поскольку мы разыгрываем карты по порядку. Благодаря нашему существующему инварианту мы знаем, что карта на вершине стопки p - 1 является частью возрастающей подпоследовательности длины p - 1, так что эта подпоследовательность с этой новой добавленной к ней картой образует возрастающую подпоследовательность длины p, так как требуется.

2
templatetypedef 27 Авг 2015 в 23:53