Что такое «динамический» в динамическом программировании?


9

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

Относится ли это к тому, что подзадачи решаются во время выполнения и используются для достижения конечной цели? Как динамическое распределение памяти, которое происходит во время выполнения?

[ОТВЕТ]

Я должен был прочитать эту статью, прежде чем задавать вопрос, извините.


2
Короткий ответ, это просто имя. Не нужно иметь буквальное значение.
Юваль Фильмус

4
Возможно, типичные реализации DP (заполнение таблиц) настолько статичны, насколько это возможно для алгоритма.
Рафаэль

Ответы:


1

Я всегда интуитивно понимал, что это означает, что алгоритмы, использующие динамическое программирование, казалось, редактируют проблемное пространство « динамически », пока проблема не может быть решена с помощью жадного алгоритма.

Например, в задаче « Шахматная доска» алгоритм динамического программирования редактирует всю доску по мере ее прохождения, а затем, наконец, можно использовать жадный алгоритм (аналогично алгоритму Дейкстры по кратчайшему пути и т. Д.).

Я не уверен, если это обобщает все проблемы динамического программирования, хотя.


9

На самом деле, в названии «динамическое программирование» нет ничего особенного; Сама техника - это просто умная раскрутка рекурсии. Посмотрите на этот вопрос и посмотрите на ответ @Jeffe, в котором сообщается, что Бельман выбрал это имя, чтобы преднамеренно отвлекать.


3
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
Джон Дворжак

Кто-то в Википедии, кажется, не согласен, я только что нашел это: оно динамическое, потому что значения в таблице заполняются алгоритмом, основанным на других значениях таблицы, и это программирует в смысле установки вещей в таблице, например, как телевидение программирование касается , когда трансляций , что шоу - на Викиучебниках
Kintoki

@akki: есть примеры динамического программирования, в которых таблица вообще не нужна ...
Массимо Кафаро

1
O(1)mnO(min(m,n))mn

2
@akki: это именно то, что я имею в виду, когда говорю, что DP - это то, что нужно сделать для рекурсии! Но само название было бессмысленным и остается бессмысленным.
Массимо Кафаро

6

Здесь есть интересная история. Беллман был пионером этой парадигмы. Но это было на самом деле математическое исследование. В свое время, тогдашний министр обороны был параноидален со словами Research and Math (сумасшедший парень, верно!). Беллман испугался, что секретарта разозлит его работа и в итоге он попадет в беду. Поэтому, чтобы немного размыть вещи, он назвал это динамическим программированием , однако в этом нет ничего «динамического».


1
Источник для этого? Похоже, действительно интересная история.
13

Как примечание: неясно, кто впервые разработал динамическое программирование . Беллману следует отдать должное за доказательство того, что любая реализация динамического программирования, будучи оптимальной, подчиняется так называемым уравнениям Беллмана-Форда. К сожалению, кажется, что многие люди легко верят, что именно поэтому Беллман становится главным исследователем первоначальной идеи.
Карлос Линарес Лопес

@jmite я читал это в каком-то месте (возможно, в каком-то блоге) .. я постараюсь предоставить источник ...
Subhayan

@jmite Вы можете найти историю в лекционной заметке Джеффа лекции 5: динамическое программирование, а также в вики: динамическое программирование .
hengxin

3

Ричард Беллман назвал это динамическим программированием в словах Беллмана введите описание изображения здесь

Я провел осенний квартал (1950 года) в RAND. Моей первой задачей было найти название для многоступенчатых процессов принятия решений.

Интересный вопрос: откуда появилось название «динамическое программирование»? 1950-е годы не были хорошими годами для математических исследований. У нас был очень интересный джентльмен в Вашингтоне по имени Уилсон. Он был министром обороны, и у него действительно был патологический страх и ненависть к слову «исследование». Я не использую термин слегка; Я использую это точно. Его лицо будет наполнено кровью, он покраснеет и станет жестоким, если люди будут использовать термин «исследование» в его присутствии. Вы можете представить, что он чувствовал тогда по поводу термина «математический». Корпорация RAND была нанята военно-воздушными силами, и, по существу, в качестве начальника ВВС был Вильсон. Поэтому я чувствовал, что должен что-то сделать, чтобы оградить Уилсона и ВВС от того факта, что я действительно занимался математикой в ​​корпорации RAND. Какое название, какое имя, я мог выбрать? Во-первых, меня интересовало планирование, принятие решений, мышление. Но планирование, это не хорошее слово по разным причинам. Поэтому я решил использовать слово «программирование». Я хотел донести мысль о том, что это было динамично, многоступенчато, менялось во времени. Я думал, давайте убьем двух зайцев одним выстрелом. Давайте возьмем слово, которое имеет абсолютно точное значение, а именно динамическое, в классическом физическом смысле. Он также имеет очень интересное свойство в качестве прилагательного, и что слово «динамический» невозможно использовать в уничижительном смысле. Попробуйте подумать о какой-то комбинации, которая, возможно, придаст ей уничижительный смысл. Это невозможно. Таким образом, я думал, что динамическое программирование было хорошим именем. Это было то, на что даже конгрессмен не мог возразить.

Источник: Глаз Урагана, Ричард Беллман (Автобиография)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.