Dinamik programlamayı yeniden adlandırabilirseniz…


43

Dinamik programlamayı yeniden adlandırabilirseniz, buna ne derdiniz?


1
Dinamik programlamanın dinamik programlama olduğunu söyleyebilirim. Bu algoritmalardan ayrı bir konsept. "Dinamik programlama algoritmik uygulamaları" nı sorarsanız, bu bana daha mantıklı gelecektir.
Yoshio Okamoto

1
Elbette dp, dp'dir, ancak programlama ve dinamik, her ikisi de bugün farklı bir şey ifade ediyor, bu yüzden dinamik programlama öğretirken, farklı bir isim olmasını diliyorum.
Jack,

4
Üzgünüm, yeterince açık değildim. Genel olarak dinamik programlama, kontrol ve politika planlama vb. Kullanımı, hatta stokastik dinamik programlama veya sadece algoritma tasarımının bir yöntemi olarak dinamik programlama ile ilgileniyor musunuz? Buradaki ana izleyiciler sadece ikincisini tanıyorlardı, ancak sorunuz ilkini de içerecek şekilde oldukça genel.
Yoshio Okamoto

1
Yoshio, daha genel bir kavramı açıklamalısın bence bir cevaptaki farklılıkları bir çoğumuzu aydınlatabilir.
Raphael

2
Tamamen dilsiz yanaklı olmayan bir fikir daha: "Google'da sizi işe alan şey" - öğrencilerimin yaşadığı deneyime dayanarak :)
Suresh Venkat

Yanıtlar:


50

Richard Bellman'ın otobiyografisi , “dinamik programlama” terimini kasıtlı olarak dikkat dağıtmak için seçtiğini öne sürüyor.

1950'ler matematiksel araştırma için iyi yıllar değildi. Washington'da Wilson adında çok ilginç bir centilmen vardı. Savunma sekreteriydi ve patolojik bir korku ve 'araştırma' kelimesinden nefret ediyordu. Hafifçe terimini kullanmıyorum; Tam olarak kullanıyorum. Yüzü yeterli olurdu, kızardı ve insanlar varlığında 'araştırma' terimini kullanırlarsa şiddetlenecekti. Matematiksel terim hakkında nasıl hissettiğini hayal edebilirsiniz. RAND Corporation, Hava Kuvvetleri tarafından istihdam edildi ve Hava Kuvvetleri, esasen patronu olarak Wilson'a sahipti. Bu yüzden, Wilson ve Hava Kuvvetlerini RAND Şirketi'nde gerçekten matematik yaptığım gerçeğinden korumak için bir şeyler yapmam gerektiğini hissettim.

Hangi ismi, hangi ismi seçebilirim? Öncelikle planlama, karar verme, düşünme ile ilgilendim. Ancak planlama, çeşitli nedenlerden dolayı iyi bir kelime değildir. Bu nedenle 'programlama' kelimesini kullanmaya karar verdim. Bunun dinamik olduğu, bunun çok aşamalı ve zamana bağlı olduğu fikrine ulaşmak istedim. Sanırım, iki taşı bir taşla öldürelim. Klasik fiziksel anlamda 'dinamik', yani kesin bir anlamı olan bir kelime alalım. Aynı zamanda sıfat olarak çok ilginç bir özelliğe sahiptir ve 'dinamik' kelimesini pejorative anlamda kullanmak imkansızdır. Ona aşağılayıcı bir anlam kazandıracak bir kombinasyon düşünmeyi deneyin. Bu imkansız. Böylece “dinamik programlama” nın iyi bir isim olduğunu düşündüm. Bir Kongre üyesinin bile itiraz edemeyeceği bir şeydi.

(Russell ve Norvig'in AI ders kitaplarında belirttikleri gibi, bu hikaye gerçeğin yaratıcı bir şekilde süslenmesi gerektiğidir. Bellman ilk olarak 1952'de "dinamik programlama" ifadesini kullandı ve Charles Erwin Wilson 1953'e kadar Savunma Bakanı olmadı. )

Her neyse, Bellman'ın orijinal motivasyonu çok aşamalı planlama önerir , ancak en azından algoritmik amaçlar için , sadece daha az heceli, aşağıdan yukarıya özyineleme gibi bir şey tercih ederim .


10
Tabii ki, gerçekten yapmak istediğim şey “Bellman's Denklemini” veya bilgisayar bilim adamlarının “herhangi bir yinelemeyi” dediği gibi yeniden adlandırmak.
Jeffε

2
Cevabınız burada kullanıldı: biostar.stackexchange.com/questions/17954
Pierre

28

DP'nin iki önemli yönü vardır: (1) alt problemleri tanımlamak (yani, belki de tamsayılar, köşeler, köşelerin alt kümeleri vb. İle indekslenmiş çok boyutlu bir dizi olabilen bir "tablo" oluşturmak) ve (2) yinelemeli olarak çözmek alt problemler. Her iki yönden de bahseden bir isim olarak “çizelge / çizelge özyinelemeyi” öneririm.


6
tabular özyinelemede hoş bir his var.
Suresh Venkat

21

Mutabakat oldukça yaygın bir değişkendir.


8
Not verme kullanılır, ancak dp'yi karakterize etmez.
Jack,

20
Kesinlikle. Memoizasyon kazayla dinamik programlamadır.
Jeffε

@ profesör erickson - çok iyi dedi. gülmeyi durduramıyorum.
Akash Kumar

7
Yine de, DP için yeni bir isim seçersek, not kullanımı oldukça uygun olacaktır. Örn. "Düzenleme mesafesi, hafızaya alma işlemi ile çoklu zaman olarak hesaplanabilir".
Noam

Dinamik programlama, özel bir not verme durumudur, ayrıca doğal uygulamalı değerlendirme sırasını takip etmek yerine kontrol akışını açıkça yönlendirir. Özyinelemeli şartname yerine, bir tablonun doldurulmasına çok fazla önem verdiğinden, genellikle öğretildiği gibi öğretilmesi utanç vericidir. Büyülü olarak karşımıza çıkıyor.
Neil Toronto

8

Uysun diye böl ve Fetihten diyebilirim ekleme-ve-birleştirir.

Genellikle iki kelime de kullanmak splice ve birleştirmek öğretim / DP açıklarken; ancak açıkça birleştirme ve birleştirme kullanılmadı. Bazen iki paradigmayı karşılaştırmak için üst üste binme-bölme-fethetmeyi kullandım.


6

Algoritma tasarımında dinamik programlama üzerine son dersimden sonra, öğrencilerden bu teknik için yeni bir isim önermelerini istedim. "Zor programlama" ile eğlenirken, tekniği daha unutulmaz kılacak bir şey istedim. Buradaki tartışmadan sonra, biri yukarıdan aşağıya diğeri aşağıya olmak üzere iki isim önerebilirim: Çok
Yollu-Böl ve Notlandırılmış-Fetih (diğer adı: Divide ^ M & Conquer ^ M) ve
Tüm alt sorunları (Merge_all) birleştir


1
Her zamanki bölünme ve fethetme ile güçlü bir ilişki kurmanın (Mergesort'ta olduğu gibi) iyi bir fikir olduğunu sanmıyorum. Orada alt problemler bağımsız olarak çözülür ve sadece iki sonuç birleştirilir. DP'de kontrol edilen alt problemler bağımsız değildir ve tüm kombinasyonlar kontrol edilir. (her ikisi de kaba terimlerle). Bu nedenle, bir adın benzerlik duygusu yaratmak yerine farkı vurgulaması gerektiğini düşünüyorum.
Raphael

@Raphael, güçlü bir dernek kurmanın tehlikeleri hakkındaki endişeleri paylaşıyorum, ancak farklılıklar konusundaki ifadelerine katılmıyorum. DP yılında alt problemler çok önemlidir vardır subsubproblems çözümler paylaşılır rağmen "bağımsız çözüldü". Genelde bazı kehanetler size doğru bölümü söylerse bölünmenin ve fethedileceğini belirtirim, ancak Yunanca konuşamadığım için (doktora danışmanımın aksine), tüm olası bölümleri denemek zorundayım.
Jack,

2
Evet, alt problemler kavramsal olarak bağımsızdır. Ancak, sizin de belirttiğiniz gibi aynı kısmi sonuçları kullanarak onlarla ilişki kuruyordum. Bu, DP'yi D&C'den ayırır, çünkü ikincisinin aksine, alt problemleri birden fazla kez hesaplamadan (veya sonuçları iletmeden), ikincisini paralelleştirmek mümkündür. Analojiniz hoş, ancak bu durumda adı doğrulamaz çünkü doğru bölümleri bulmak problemin önemli bir bölümünü oluşturur. Herhalde DP'nin D & C'nin bu mantığa dayanan bir genelleme olduğunu söyleyebileceğinizi söyleyebilirim.
Raphael

@Raphael, bilgiçlikçi olduğum için üzgünüm, ama bu öğretiyle ilgili bir soru olduğundan, alt-problemin bağımsızlığı kavramının açık olmasını istiyorum ve sadece “kavramsal olarak bağımsız” demek kesin değildir. Bir bölümü denediğinizde, ürettiğiniz alt sorunların bağımlılıkları olmayabilir. Diğer yorumlarınız DP algoritmalarının adımlarına odaklanıyor; Öncelikle çözülecek problemin tam olarak tanımlanmasına odaklanmayı tercih ediyorum. Benim favori örnekler: dk ağırlık nirengi ve dk dışbükey ayrışma basit çokgenler (bir cs.unc.edu/~snoeyink/demos/convdecomp/MWTDemo.html )
Jack

Sarkık olmak sorun değil. Ama kelimelerin seçimi didaktik ithalat göz önünde bulundurun: Eğer alt problemler bağımsız olduğunu öğrencilere anlatmak ve sonra onları yok bir algoritma vermek değil onların hesaplama ayırmak, ancak aslında "iç içe geçmeli" hesaplama dayanır. Bunun çok kafa karıştırıcı olabileceğini düşünüyorum. Bu nedenle, bir noktada kavramsal / matematiksel / optimizasyon / ... ve hesaplamalı bağımsızlığı ayırmanız gerekiyor.
Raphael


2

Bunu son zamanlarda bazı meslektaşlarımla tartıştım ve hararetli bir tartışmadan sonra sekmeli çağrı önbelleklemesi yaptık .


3
dış kaynaklı bir çağrı merkezinde yaptığınız bir şeye benziyor;)
Suresh Venkat

2

İndüktif Programlama adını öneriyorum - zamanımızdan eski güzel Euler zamanlarına kadar bir çeşit köprü gibi bir şey olarak Kepler ve ark. Veya belki de Ters Endüktif Programlama . Ve evet, benim için DP, eski fikrin iyi anlamıyla İndüksiyonla güçlü bir şekilde ilişkili. Notlandırma, önbellekleme, tablolar vb. Şeyleri kırma yaklaşımının özünü değil, sadece teknik unsurlardır.


DP ile ilgili temel sorunum P'dir, bu yüzden bu fikrin hayranı değilim ..
Suresh Venkat

1

Muhtemelen olan şey, masa ve dolgu kelimelerini içeren bir şey.


7
Bah. Dinamik programlama tablolarla ilgili değildir ; Akıllı özyinelemeyle ilgili.
Jeffε

3
İki yönü ayırmanın daha iyi olduğunu düşünüyorum: "Problemden özyinelemeli bir yapının çıkarılması ve tekrarlama olarak yazılması" (modelleme) ve "Elde edilen tekrarlamanın aşağıdan yukarıya doğru çözülmesi" (algoritmalar). Dinamik programlamanın (algoritmalarda) her ikisine de atıfta bulunduğunu hissediyorum ve bu aynı zamanda doğrusal programlama, tamsayılı programlama, yarı sonlu programlama, vb. İçin de geçerlidir
Yoshio Okamoto

1
Tablolar bazen kullanılır. Ağaçlar üzerinde dinamik programlama (örneğin: maksimum bağımsız küme) normalde tekrarı hafızaya almak için bir tablo [= dizi] kullanmaz; bir ağaç veya bazı durumlarda bir dizi ağacı veya bir ağaç dizisi veya bazı durumlarda bir Kartezyen ağacı ürünü kullanır. Benzer şekilde, sınırlar üzerindeki dinamik programlama için veya sınırlanmış ağaç genişliği grafikleri için ağaç ayrıştırmaları üzerinden dinamik programlama için.
Jeffε

1
JeffE, bir tekniğin adı neredeyse hiç bir zaman tüm uygulamaları kapsamıyor. Örneğin, "köşegenleştirme" yapın; Gelişmiş uygulamalarda, görüş alanlarının hiçbirinde köşegen yoktur (ya da en azından münhasır faaliyet alanı). Ama yine de "masa dolgusu" nu pek sevmiyorum, yeni başlayanlar için de uygun bir isim olabilir diye düşünüyorum.
Raphael

3
Bu konuda 2 sentim. Dinamik programlama, tasarım algoritmalarının iki farklı yönüne sahiptir. Birincisi, dp mekaniğini anlamak: akıllı özyineleme ve daha hızlı bir algoritmaya yol açan notlaştırma. İkinci husus, bir sorunun akıllı bir özyinelemeyi kabul edip çözebileceğini nasıl tanıyacağıdır . Her ikisi de öğretmek için önemlidir. İkincisi için, ortak bir durum, sınırlı bir etkileşime sahip olarak bölme ve ele geçirmedir ve benim görüşüme göre açıkça vurgulanmaya değer.
Chandra Chekuri,

1

Özyinelemeli görünüm veya özyinelemeli ufuk


Tembel ufuk? Gerekli olana kadar bir çok sonuç hesaplamayı geciktirirsiniz. DP'nin özyinelemeli olması gerekmez.
Chad Brewbaker

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.