Dinamik programlama hakkında “dinamik” nedir?


9

Yaşlılarımdan birinde bir iş görüşmesi vardı ve ona neden dinamik denildiği soruldu. Cevap veremedi ve görüşmekten vazgeçtikten sonra, onun hakkında dinamik bir şey olmadığını söyledi, buna böyle deniyor. Buna inanmak benim için zor.

Alt problemlerin çalışma zamanı boyunca çözüldüğünü ve nihai hedefe ulaşmada kullanıldığını mı ifade ediyor? Çalışma zamanı sırasında gerçekleşen dinamik bellek ayırma gibi mi?

[CEVAP]

Soruyu sormadan önce bu wiki makalesini okumalıydım , üzgünüm.


2
Kısa cevap, bu sadece bir isim. Gerçek bir anlamı olması gerekmez.
Yuval Filmus

4
Muhtemelen, DP'nin tipik uygulamaları (tablo doldurma) bir algoritmanın alabileceği kadar statiktir.
Raphael

Yanıtlar:


1

Her zaman dinamik bir programlama kullanan algoritmaların , sorunun açgözlü bir algoritma ile çözülmesine kadar sorun alanını " dinamik olarak " düzenlediği anlamına geldiğini sezdim .

Örneğin, Dama Tahtası sorunu ile, dinamik programlama algoritması tüm kartı içinden geçerken düzenler ve son olarak, açgözlü bir algoritma kullanılabilir (benzer şekilde, Dijkstra'nın en kısa yol algoritmasıyla, vb.).

Bunun her dinamik programlama problemine genel gelip gelmediğinden emin değilim.


9

Aslında "dinamik programlama" adında özel bir şey yoktur; tekniğin kendisi akıllıca gevşeyen özyineleme ile ilgilidir. Bkz bu soruyu Belman kasten dikkat dağıtıcı olmak için bu ad seçmek bildirildi edildiği @Jeffe cevaba ve göz.


3
Bu teorik olarak soruyu cevaplayabilirken, cevabın temel bölümlerini buraya dahil etmek ve referans için bağlantı sağlamak tercih edilir.
John Dvorak

Wikipedia'da bir kişi aynı fikirde değil, bunu buldum -Dinamiktir çünkü tablodaki değerler, tablonun diğer değerlerine dayanan algoritma tarafından doldurulur ve tablodaki şeyleri televizyon gibi ayarlamak için programlama yapar. programlama ne gösterir - Wikibooks'ta
kintoki

@akki: bir tablonun hiç gerekli olmadığı dinamik programlama örnekleri var ...
Massimo Cafaro

1
@akki: örnek olarak, Fibonacci sayılarını aşağıdan yukarıya doğru hesaplamak yalnızca sabit gerektirir Ö(1)serideki bir sonrakini hesaplamak için gereken Fibonacci sayılarını kaydetmek için boşluk; iki uzunluk dizesinin En Uzun Ortak Subququence'inin hesaplanmasım ve n kullanılarak yapılabilir Ö(mbenn(m,n)) dolu yerine boşluk mnmasa vb.
Massimo Cafaro

2
@akki: DP'nin özyinelemeyi akıllıca gevşetmek olduğunu söylediğimde tam olarak bahsettiğim şey bu! Ancak ismin kendisi anlamsızdı ve anlamsız kaldı.
Massimo Cafaro

6

Burada ilginç bir hikaye var .. Bellman bu paradigmaya öncülük etti. Ama bu aslında matematiksel bir araştırmaydı. O zamanlar, o zamanki savunma sekreteri Araştırma ve Matematik kelimelerinin paranoyakıydı (deli adam, doğru!). Bellman, sekreterin çalışmasında öfkeli olacağı ve sonunda başını belaya sokacağından korkuyordu. İşleri biraz bulanıklaştırmak için Dinamik Programlama adını verdi , ancak bununla ilgili 'dinamik' bir şey yok ..


1
Bunun kaynağı? Gerçekten ilginç bir hikaye gibi görünüyor.
jmite

Bir yan not olarak: Dinamik Programlamayı kimin ilk kez tasarladığı belirsiz görünüyor . Bellman, optimum olduğunda herhangi bir Dinamik Programlama uygulamasının Bellman-Ford denklemlerine uyduğunu kanıtladığı için kredilendirilmelidir . Ne yazık ki, birçok insan bunun Bellman'ı orijinal fikrin arkasındaki ana araştırmacı haline getirdiğine kolayca inanıyor gibi görünüyor.
Carlos Linares López

@jmite bunu bir yerde (muhtemelen bazı blog) okudum .. ben kaynak sağlamaya çalışacağız ...
Subhayan

@jmite Hikayeyi Jeff'in Ders 5: Dinamik Programlama ders notunda ve ayrıca wiki: dinamik programlamada bulabilirsiniz .
hengxin

3

Richard Bellman Bellman'daki kelimelerde Dinamik Programlama adını aldı resim açıklamasını buraya girin

1950 sonbahar çeyreğini RAND'ta geçirdim. İlk görevim çok aşamalı karar süreçleri için bir isim bulmaktı.

İlginç bir soru şudur: Dinamik programlama adı nereden geldi? 1950'ler matematiksel araştırmalar için iyi yıllar değildi. Washington'da Wilson adında çok ilginç bir beyefendimiz vardı. Savunma Sekreteriydi ve aslında kelime araştırmalarından patolojik bir korku ve nefret duyuyordu. Bu terimi hafifçe kullanmıyorum; Kesinlikle kullanıyorum. Yüzü yetecek, kızardı ve insanlar araştırma terimini onun huzurunda kullansaydı şiddetlenirdi. Matematiksel terim hakkında nasıl hissettiğini hayal edebilirsiniz. RAND Corporation Hava Kuvvetleri tarafından istihdam edildi ve Hava Kuvvetleri temelde Wilson'u Wilson olarak bulundurdu. Bu yüzden Wilson ve Hava Kuvvetleri'ni RAND Corporation'ın içinde gerçekten matematik yaptığım gerçeğinden korumak için bir şeyler yapmam gerektiğini hissettim. Hangi başlık, hangi ad, seçebilir miyim İlk olarak planlama, karar verme ve düşünme ile ilgileniyordum. Ancak planlama, çeşitli nedenlerle iyi bir kelime değildir. Bu yüzden "programlama" kelimesini kullanmaya karar verdim. Bunun dinamik olduğu, çok aşamalı olduğu, zamanla değiştiği fikrinden geçmek istedim. Düşündüm ki, bir taşla iki kuş öldürelim. Klasik fiziksel anlamda kesinlikle kesin bir anlamı, yani dinamik bir kelimeyi ele alalım. Ayrıca sıfat olarak çok ilginç bir özelliğe sahiptir ve dinamik kelimesini aşağılayıcı bir anlamda kullanmak imkansızdır. Muhtemelen aşağılayıcı bir anlam verecek bir kombinasyon düşünmeyi deneyin. Bu imkansız. Bu yüzden dinamik programlamanın iyi bir isim olduğunu düşündüm. Bir Kongre üyesinin bile itiraz edemeyeceği bir şeydi.

Kaynak: Kasırganın Gözü, Richard Bellman (Otobiyografi)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.