Dinamik programlamayı yeniden adlandırabilirseniz, buna ne derdiniz?
Dinamik programlamayı yeniden adlandırabilirseniz, buna ne derdiniz?
Yanıtlar:
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 .
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.
Mutabakat oldukça yaygın bir değişkendir.
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.
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
Bu yazı ( paywalled doi ) DP "ayrıştırılabilir" kullanılarak saldırıya uğraması muhtemel sorunları çağırıyor .
Bunu son zamanlarda bazı meslektaşlarımla tartıştım ve hararetli bir tartışmadan sonra sekmeli çağrı önbelleklemesi yaptık .
İ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.
Muhtemelen olan şey, masa ve dolgu kelimelerini içeren bir şey.
Özyinelemeli görünüm veya özyinelemeli ufuk