Якби ви могли перейменувати динамічне програмування, як би ви його назвали?
Якби ви могли перейменувати динамічне програмування, як би ви його назвали?
Відповіді:
Автобіографія Річарда Беллмана говорить про те, що він вибрав термін «динамічне програмування» навмисно відволікаючим.
1950-ті не були гарними роками для математичних досліджень. У нас був дуже цікавий джентльмен у Вашингтоні на ім’я Вілсон. Він був секретарем оборони, і він насправді мав патологічний страх і ненависть до слова "дослідження". Я не вживаю цього терміна злегка; Я його точно використовую. Його обличчя буде задихатися, він червоніє, і він стане бурхливим, якби люди застосовували термін «дослідження» в його присутності. Ви можете собі уявити, як він почувався тоді стосовно терміна "математичний". Корпорація RAND працювала у ВВС, а ВВС по суті був Вільсоном. Отже, я відчував, що мені потрібно щось зробити, щоб захистити Вілсона та ВВС від того, що я справді займався математикою у корпорації RAND.
Яку назву, яку назву я міг вибрати? В першу чергу мене цікавило планування, прийняття рішень, мислення. Але планування, це не добре слово з різних причин. Тому я вирішив використовувати слово "програмування". Мені хотілося перейти до думки, що це динамічно, це багатоступенево, це змінюється у часі - я думав, давайте вб'ємо двох птахів одним каменем. Візьмемо слово, яке має абсолютно точне значення, а саме «динамічний», у класичному фізичному сенсі. Він також має дуже цікаву властивість як прикметник, і це неможливо вживати слово «динамічний» у пейоративному значенні. Спробуйте продумати якусь комбінацію, яка, можливо, надасть їй пейоративного значення. Це неможливо. Таким чином, я вважав, що «динамічне програмування» - це добре ім’я. Це було щось, чому навіть конгресмен не міг заперечувати.
(Як вказують Рассел і Норвіг у своєму підручнику з AI, ця історія повинна бути творчим прикрашенням правди. Уперше Беллман використав фразу "динамічне програмування" в 1952 році , а Чарльз Ервін Вілсон не став міністром оборони до 1953 року. )
У будь-якому випадку, оригінальна мотивація Беллмана передбачає багатоступеневе планування , але, принаймні, для алгоритмічних цілей, я віддаю перевагу щось на кшталт економної рекурсії знизу вгору , лише з меншою кількістю складів.
Є два важливі аспекти DP: (1) визначення підпроблем (тобто встановлення "таблиці", яка може бути багатовимірним масивом, індексованим, можливо, цілими числами, вершинами, підмножинами вершин тощо) та (2) рекурсивно вирішувати підпроблеми. Я пропоную "табличну / табличну рекурсію" як назву, що стосується обох аспектів.
Пам'ять - досить поширений варіант.
Щоб піти з розділенням і перемогою , я б сказав, зробіть і поєднайте.
Я, як правило, використовую обидва слова, зрощую і поєдную під час викладання / пояснення ДП; але не використовується явно з’єднанням та поєднанням. Іноді я використовував перекриття-поділ-і-підкорення для протиставлення двох парадигм.
Після моєї недавньої лекції про динамічне програмування в алгоритмі проектування я попросив студентів запропонувати нову назву цієї методики. Поки мене розважало "Жорстке програмування", я хотів чогось, що могло б зробити техніку більш запам'ятовуваною. Після обговорення тут, я можу запропонувати два імені, одне для зверху вниз та одне знизу вгору:
Multiway-Divide і Memoized-Conquer (він же Divide ^ M & Conquer ^ M) та
об'єднати всі підпрограми (aka Merge_all)
У цьому документі ( дой з оплачуваним документом ) називаються проблеми, на які можна напасти, використовуючи DP, "розкладається".
Я нещодавно обговорював це з деякими колегами, і після бурхливої дискусії ми придумали табличне кешування викликів .
Я б запропонував назвати індуктивне програмування - як щось подібне до мостоподібних часів від наших часів до старих добрих часів Ейлера, Кеплера та ін. А може навіть зворотне індуктивне програмування . І так, для мене DP сильно асоціюється з Індукцією, в старому доброму розумінні цього поняття. Пам'ять, кешування, таблиці тощо - це лише елементи техніки, не є основою підходу до розлому речей.
Можливо, щось, що включає в себе таблицю слів і заповнення , оскільки це відбувається.
Рекурсивний вигляд або рекурсивний горизонт