Динамическое программирование

Динамическое программирование в теории управления и теории вычислительных систем — способ решения сложных задач путём разбиения их на более простые подзадачи. Он применим к задачам с оптимальной подструктурой, выглядящим как набор перекрывающихся подзадач, сложность которых чуть меньше исходной. В этом случае время вычислений, по сравнению с «наивными» методами, можно значительно сократить.

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

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

История

Словосочетание «динамическое программирование» впервые было использовано в 1940-х годах Ричардом Беллманом для описания процесса нахождения решения задачи, где ответ на одну задачу может быть получен только после решения задачи, «предшествующей» ей. В 1953 году он уточнил это определение до современного. Первоначально эта область была основана, как системный анализ и инжиниринг, которая была признана IEEE. Вклад Беллмана в динамическое программирование был увековечен в названии уравнения Беллмана, центрального результата теории динамического программирования, который переформулирует оптимизационную задачу в рекурсивной форме.

Слово «программирование» в словосочетании «динамическое программирование» в действительности к «традиционному» программированию (написанию кода) почти никакого отношения не имеет и имеет смысл как в словосочетании «математическое программирование», которое является синонимом слова «оптимизация». Поэтому слово «программа» в данном контексте скорее означает оптимальную последовательность действий для получения решения задачи. К примеру, определённое расписание событий на выставке иногда называют программой. Программа в данном случае понимается как допустимая последовательность событий.

Идея динамического программирования

Нахождение кратчайшего пути в графе из одной вершины в другую, используя оптимальную подструктуру; прямая линия обозначает ребро между вершинами; волнистая линия обозначает кратчайший путь между вершинами, которые она соединяет (среди других путей, которые не показаны; промежуточные вершины кратчайшего пути тоже не показаны); жирной линией обозначен итоговый кратчайший путь.
Граф подзадач (ребро означает, что одна задача зависит от решения другой) для чисел Фибоначчи (граф — ациклический).

Оптимальная подструктура в динамическом программировании означает, что оптимальное решение подзадач меньшего размера может быть использовано для решения исходной задачи. К примеру, кратчайший путь в графе из одной вершины (обозначим s) в другую (обозначим t) может быть найден так: сначала считаем кратчайший путь из всех вершин, смежных с s, до t, а затем, учитывая веса рёбер, которыми s соединена со смежными вершинами, выбираем лучший путь до t (через какую вершину лучше всего пойти). В общем случае мы можем решить задачу, в которой присутствует оптимальная подструктура, проделывая следующие три шага.

  1. Разбиение задачи на подзадачи меньшего размера.
  2. Нахождение оптимального решения подзадач рекурсивно, проделывая такой же трёхшаговый алгоритм.
  3. Использование полученного решения подзадач для конструирования решения исходной задачи.

Подзадачи решаются делением их на подзадачи ещё меньшего размера и т. д., пока не приходят к тривиальному случаю задачи, решаемой за константное время (ответ можно сказать сразу). К примеру, если нам нужно найти n!, то тривиальной задачей будет 1! = 1 (или 0! = 1).

Перекрывающиеся подзадачи в динамическом программировании означают подзадачи, которые используются для решения некоторого количества задач (не одной) большего размера (то есть мы несколько раз проделываем одно и то же). Ярким примером является вычисление последовательности Фибоначчи, и  — даже в таком тривиальном случае вычисления всего двух чисел Фибоначчи мы уже посчитали дважды. Если продолжать дальше и посчитать , то посчитается ещё два раза, так как для вычисления будут нужны опять и . Получается следующее: простой рекурсивный подход будет расходовать время на вычисление решения для задач, которые он уже решал.

Чтобы избежать такого хода событий, мы будем сохранять решения подзадач, которые мы уже решали, и когда нам снова потребуется решение подзадачи, мы вместо того, чтобы вычислять его заново, просто достанем его из памяти. Этот подход называется мемоизацией. Можно проделывать и дальнейшие оптимизации — например, если мы точно уверены, что решение подзадачи нам больше не потребуется, можно выкинуть его из памяти, освободив её для других нужд, или если процессор простаивает и мы знаем, что решение некоторых, ещё не посчитанных, подзадач нам понадобится в дальнейшем, мы можем решить их заранее.

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

  • перекрывающиеся подзадачи;
  • оптимальная подструктура;
  • возможность запоминания решения часто встречающихся подзадач.

Динамическое программирование обычно придерживается двух подходов к решению задач:

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

Языки программирования могут запоминать результат вызова функции с определённым набором аргументов (мемоизация), чтобы ускорить «вычисление по имени». В некоторых языках такая возможность встроена (например, Scheme, Common Lisp, Clojure, Perl, D), а в некоторых требует дополнительных расширений (C++).

Известны сериальное динамическое программирование, включённое во все учебники по исследованию операций, и несериальное динамическое программирование (НСДП), которое в настоящее время слабо известно, хотя было открыто в 1960-х годах.

Обычное динамическое программирование является частным случаем несериального динамического программирования, когда граф взаимосвязей переменных — просто путь. НСДП, являясь естественным и общим методом для учёта структуры задачи оптимизации, рассматривает множество ограничений и/или представляет целевую функцию как рекурсивно вычисляемую функцию. Это позволяет находить решение поэтапно, на каждом из этапов используя информацию, полученную на предыдущих этапах, причём эффективность этого алгоритма прямо зависит от структуры графа взаимосвязей переменных. Если этот граф достаточно разрежён, то объём вычислений на каждом этапе может сохраняться в разумных пределах.

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

Классические задачи динамического программирования

Литература

  • Беллман Р. Динамическое программирование. — М.: Издательство иностранной литературы, 1960.
  • Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Глава 15. Динамическое программирование // Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.: Вильямс, 2005. — 1296 с. — ISBN 5-8459-0857-4.
  • Sanjoy Dasgupta, Christos H. Papadimitriou, Umesh Vazirani. Algorithms. — McGraw-Hill Science/Engineering/Math, 2006. — 336 с. — ISBN 0073523402.
  • Акулич И. Л. Глава 4. Задачи динамического программирования // Математическое программирование в примерах и задачах. — М.: Высшая школа, 1986. — 319 с. — ISBN 5-06-002663-9.
  • Bertele U., Brioshi F. Nonserial dynamic programming. — N. Y.: Academic Press, 1972. — 235 pp.
  • Габасов Р., Кириллова Ф. М. Основы динамического программирования. — Минск: Изд-во БГУ, 1975. — 262 с.

Ссылки

Read other articles:

Daftar keuskupan di Hungaria adalah sebuah daftar yang memuat dan menjabarkan pembagian terhadap wilayah administratif Gereja Katolik Roma yang dipimpin oleh seorang uskup ataupun ordinaris di Hungaria. Para uskup di wilayah Hungaria bergabung dalam Konferensi Waligereja Hungaria. Saat ini terdapat 17 buah yurisdiksi, di mana 1 merupakan tahta metropolit, 4 merupakan keuskupan agung, 10 merupakan keuskupan sufragan, 1 merupakan keabasan teritorial, dan 1 merupakan ordinariat militer. Daftar k...

 

Evarcha striolata Klasifikasi ilmiah Kerajaan: Animalia Filum: Arthropoda Kelas: Arachnida Ordo: Araneae Famili: Salticidae Genus: Evarcha Spesies: Evarcha striolata Nama binomial Evarcha striolataWesolowska & Haddad, 2009 Evarcha striolata adalah spesies laba-laba yang tergolong famili Salticidae. Spesies ini juga merupakan bagian dari genus Evarcha dan ordo Araneae. Nama ilmiah dari spesies ini pertama kali diterbitkan pada tahun 2009 oleh Wesolowska & Haddad. Laba-laba ini biasany...

 

Taphao Thong beralih ke halaman ini. Untuk the folktale character, lihat Krai Thong. 47 Ursae Majoris bKesan seniman tentang 47 Ursae Majoris b, menggambarkannya sebagai planet mirip JovianPenemuanDitemukan olehMarcy danButler et al.Situs penemuan United StatesTanggal penemuan17 Januari 1996Metode deteksiSpektroskopi DopplerCiri-ciri orbitApastron217 ± 005 AU (32.460 ± 750 juta km)Periastron203 ± 005 AU (30.370 ±&#...

State highway in central New York, US New York State Route 69Map of central New York with NY 69 highlighted in red, NY 69A in blueRoute informationMaintained by NYSDOTLength57.42 mi[1] (92.41 km)Existed1930[2]–presentMajor junctionsWest end NY 104 in MexicoMajor intersections US 11 in Colosse I-81 in Parish NY 13 in Camden NY 26 / NY 46 / NY 49 / NY 365 in Rome East end NY 5A in Yorkvil...

 

Toyono Station豊野駅Toyono Station in February 2008Lokasi1002 Toyono, Toyono-machi, Nagano-shi, Nagano-ken 389-1105JapanKoordinat36°42′41″N 138°16′31″E / 36.7114°N 138.2754°E / 36.7114; 138.2754Ketinggian334.6 metersOperator Shinano Railway JR East Jalur ■ Kita-Shinano Line ■ Iiyama Line Letak10.8 km from NaganoJumlah peron1 side + 1 island platformsJumlah jalur3Informasi lainStatusStaffedSejarahDibuka1 September 1898PenumpangFY20161,320 daily (JR)1,...

 

The United Charities Building, after 1893 the headquarters of the AICP and other charitable organizations; the successor organization, the Community Service Society is still located there The Association for Improving the Condition of the Poor (AICP) was a charitable organization in New York City, established in 1843 and incorporated in 1848 with the aim of helping the deserving poor and providing for their moral uplift.[1] The Association was one of the most active and innovative cha...

نولان بوشنل (بالإنجليزية: Nolan Bushnell)‏    معلومات شخصية الميلاد 5 فبراير 1943 (81 سنة)  كليرفيلد  مواطنة الولايات المتحدة  الحياة العملية المدرسة الأم جامعة يوتاجامعة يوتا الحكومية  المهنة مهندس،  ورائد أعمال،  وعالم حاسوب،  ومخترع  اللغات الإنجليزية ...

 

Living in the Western Worldalbum studio karya Fariz R.M.Dirilis1988StudioGrammy Studio, JakartaMidilab Studio, JakartaProsound, JakartaGenrePopDurasi56:33LabelGrammy RecordsProduserDorie KalmasFariz R.M.Kronologi Fariz R.M. Do Not Erase (1987)Do Not Erase1987 Living in the Western World (1988) Hitz! (1989)Hitz!1989 Living in the Western World adalah album kesembilan dari musisi Fariz R.M. yang dirilis pada tahun 1988 di bawah label Grammy Records. Album tersebut merupakan album keduanya ...

 

American-Canadian fantasy horror television series Van HelsingGenre Fantasy Horror Drama Action Post-apocalyptic Created byNeil LaButeBased onHelsingby Zenescope EntertainmentDirected byDavid WinningStarring Kelly Overton Jonathan Scarfe Christopher Heyerdahl Vincent Gale Rukiya Bernard Trezzo Mahoro Aleks Paunovic ComposerRich WaltersCountry of origin United States Canada Original languageEnglishNo. of seasons5No. of episodes65 (list of episodes)ProductionExecutive producersDave BrownZadoc A...

1990 greatest hits album by Barry ManilowThe Songs 1975-1990Greatest hits album by Barry ManilowReleased1990GenrePopEasy listeningLabelArista The Songs 1975–1990 is a Barry Manilow compilation album released in 1990, covering (as the title suggests) 15 years of chart hits.[1] The album reached the top 20 of the UK sales charts in 1990, his eleventh album to achieve this feat [1]. Track listing[1] Disc 1 I Write The Songs (Johnston) 3:53 (1976) One Voice (Manilow) 3:0...

 

Movements in various forms of art and design This article is about the concept in the arts. For other uses, see Minimalism (disambiguation). This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article needs attention from an expert in architecture or arts. The specific problem is: redundant content and large tracts of unsourced and unverified text and in-text lists. WikiProject Archi...

 

Benteng Przemyśl Przemyśl, Polandia Benteng I Salis Soglio pada tahun 1915 Jenis Perbentengan Dibangun 1854 Pembangun Austria-Hungaria Kondisisaat ini Ditinggalkan Garnisun > 120.000[1] Komandansaat ini Tidak ada Pertempuran/Perang Pengepungan Przemyśl Benteng Przemyśl (bahasa Polandia: Twierdza Przemyśl; Ukraina: Перемишльська фортеця) adalah perbentengan yang didirikan di kota Przemyśl oleh Austria-Hungaria dari pertengahan abad ke-19 hingga Per...

Belgian glassware manufacturer Crystal vase from Val Saint Lambert Val Saint Lambert is a Belgian crystal glassware manufacturer, founded in 1826 and based in Seraing. It has the royal warrant of King Albert II.[citation needed] Pre-history – Vonêche glassworks In 1795 during the War of the First Coalition which brought about the fall of the Dutch Republic, France had annexed what was then termed the Southern Netherlands, now known as Belgium. During the period of the Napoleonic Wa...

 

Nándor Hidegkuti Hidegkuti nel 1965 assiste ad una partita di Eredivisie fra DWS (futuri avversari in Coppa dei Campioni) e Fortuna 54 Nazionalità  Ungheria Altezza 176 cm Peso 73 kg Calcio Ruolo Allenatore (ex centravanti) Termine carriera 1958 - giocatore1985 - allenatore CarrieraGiovanili 1934-1940 Ujlaki BudapestSquadre di club1 1940-1943 Gázművek MTE? (?)1943-1945 Elektromos53 (27)1945 Herminamezei? (?)1945-1958 MTK Budapest328 (238)Nazionale 1945-1958 Unghe...

 

SherpaAnak-anak muda Sherpa mengenakan pakaian tradisional di Dewan Kebudayaan Sherpa Benggala BaratDaerah dengan populasi signifikan   Nepal520.000[1] India65.000 (di bawah)[2] Bhutan10.700 Amerika Serikat16.800 Tiongkok2.000[3]BahasaSherpa, TibetAgamaMayoritas Buddhisme (93%) dan minoritas: Hinduisme, Bön, KekristenanKelompok etnik terkaitTibet, Hyolmo, Jirel, Rai dan kelompok Tibeto-Burma lainnya Artikel ini mengandung aksara Tibe...

2018 petition in the Supreme Court of the Philippines As a result of Republic v. Sereno, Maria Lourdes Sereno, above, was ousted from her position. She is no longer considered the 24th Chief Justice of the Philippines, as the Court ruled that her appointment was never legal.[1] Republic of the Philippines v. Maria Lourdes SerenoCourtSupreme Court of the Philippines en bancFull case nameRepublic of the Philippines, represented by Solicitor General Jose C. Calida v. Maria Lourdes P. A. ...

 

Xerox Corporation Logo Rechtsform Corporation ISIN US98421M1062 Gründung 18. April 1906 Sitz Norwalk, Connecticut, USA Leitung Steve Bandrowczak (CEO)[1]Keith Cozza (Chairman) Mitarbeiterzahl 23.300 (2021)[2] Umsatz 7,04 Mrd. US-$ (2021)[2] Branche Informationstechnik Website xerox.com Xerox Alto 1973 Die Xerox Corporation (Gründungsname Haloid Corporation) ist ein 1906 gegründetes US-amerikanisches Technologie- und Dienstleistungsunternehmen im Dokumentenmanagemen...

 

Panzer 61Il Panzer 61DescrizioneTipoCarro armato medio Equipaggio4 Data entrata in servizio1965 Data ritiro dal servizio1994 Utilizzatore principale Svizzera Dimensioni e pesoLunghezza9,45 Larghezza3,06 Altezza2,72 Peso39 t Propulsione e tecnicaMotoreMercedes-Benz 8 cilindri Potenza660 Rapporto peso/potenza15,3:1 PrestazioniVelocità55 Autonomia250 Pendenza max60 Armamento e corazzaturaArmamento primario1 cannone da 105/51 mm (Royal Ordnance L7) Armamento secondario2 ...

العلاقات الكندية الناوروية كندا ناورو   كندا   ناورو تعديل مصدري - تعديل   العلاقات الكندية الناوروية هي العلاقات الثنائية التي تجمع بين كندا وناورو.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية للدولتين: وجه المقارنة كندا ناورو ال�...

 

  لمعانٍ أخرى، طالع آلة (توضيح). آلة إنجما العسكرية، نموذج إنجما 1، استخدمت في أواخر الثلاثينيات وأثناء الحرب، معروضة في المتحف الوطني للعلوم والتكنولوجيا ليوناردو دافنشي، ميلان، إيطاليا آلة إنجما (بالإنجليزية: Enigma Machine)‏ هي جهاز تشفير طُور واستُخدم في أوائل القرن الع...