Процедуры решения задач динамического программирования

искусственный интеллект

познание

Способ познания вещей: понятие, суждение, рассуждение, а рассуждение делится на индукцию и дедукцию.

Математическая индукция

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

  1. Докажите, что предложение верно при n = 1.

  2. Докажите, что если предложение верно для n = m, то отсюда следует, что предложение верно для n = m+1. (m представляет собой любое натуральное число)

动态规划问题的解题套路

Весь процесс похож на костяшки домино, пока падает предыдущая костяшка, следующая рядом с ней тоже падает.

Вторая математическая индукция

Второй принцип математической индукции состоит в том, чтобы иметь предложение о натуральном числе n, если:

(1) При n=1 предложение верно;

(2) Предполагая, что предложение верно при n≤k(k∈N), можно сделать вывод, что предложение также верно при n=k+1.

Тогда согласно ①② предложение верно для всех натуральных чисел n.

Разница между двумя вышеуказанными заключается в использовании информации:

  • Основной метод индукции: для n весь процесс рассуждения может быть завершен только путем изучения предыдущего состояния n-1, мы называем эту модель марковской моделью;

  • Метод индукции более высокого порядка: соответственно, для n весь процесс рассуждения может быть завершен только путем изучения первых n-1 наборов состояний {1,2...n-1}, что часто называют марковской моделью более высокого порядка. ;

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

动态规划问题的解题套路

动态规划问题的解题套路

Обычный: 3+1
  1. Визуализация процесса расчета

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

  2. разборка подзадачи

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

  3. ломать предположения

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

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

Ниже приводится конкретная тема динамического программирования.

максимальная доходность акции

Описание проблемы:

Учитывая массив A[1,2...N], где A[i] представляет собой цену акции в i-й день, мы можем одновременно владеть не более чем одной акцией. продать один раз, как максимизировать прибыль? Например, изменение на складе: 1, 4, 9, 2, 7, 3.

Лучший план: 1 купить 9 продать, получить прибыль 8, если все вниз, лучше не торговать.

Давайте сначала поговорим о визуализации всего процесса.

动态规划问题的解题套路

Мы знаем процесс, рисуя картинку.Давайте посмотрим на код ниже:

动态规划问题的解题套路

Далее мы увеличим сложность и сможем совершать k транзакций.Оговорено, что транзакции не могут быть вложенными, то есть после покупки вы должны продать, прежде чем снова сможете купить.

Например: A=[7,1,5,3,6,4], K=3, затем купить по 1,3, продать по 5,6, максимальная прибыль 7.

Сначала нарисуем:

动态规划问题的解题套路

На картинке у нас есть следующий код:

动态规划问题的解题套路

Суммировать

В этой статье рассматривается динамическое программирование и приводится пример решения задач динамического программирования, запомните процедуру: 3+1.

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