Yakın tarihli bir soru , TSP için Bellman ve Held-Karp'tan bağımsız olarak şu anda klasik dinamik programlama algoritmasını tartıştı . Algoritmanın evrensel olarak sürede çalıştığı bildirilmiştir . Ancak, öğrencilerimden birinin yakın zamanda belirttiği gibi, bu çalışma süresi mantıksız derecede güçlü bir hesaplama modeli gerektirebilir.
İşte algoritmanın kısa bir açıklaması. Giriş yönlendirilmiş bir grafiktir oluşur olan köşeler ve negatif olmayan bir uzunluk fonksiyonu . Herhangi bir köşe için ve ve herhangi bir alt kümesi hariç bu köşelerin ve , izin en kısa Hamilton yolun uzunluğu belirtmek için kaynaklı alt grafiği olarak . Bellman-Held-Karp algoritması aşağıdaki tekrarlamaya dayanmaktadır (veya iktisatçılar ve kontrol teorisyenleri buna “Bellman denklemi” demeyi sever):n ℓ : E → R + s t X s t L ( s , X , t ) s t G [ X ∪ { s , t } ]
Herhangi bir tepe , satıcı tur seyahat optimum uzunluğu . İlk parametre tüm özyinelemeli aramalarda sabit olduğundan, farklı alt sorunlar vardır ve her alt sorun en fazla kişiye bağlıdır . Böylece, dinamik programlama algoritması zamanında çalışır.
Yoksa öyle mi ?!
Standart tamsayı RAM modeli, bitleri ile tamsayıların sabit zamanlı manipülasyonuna izin verir , ancak en azından aritmetik ve mantıksal işlemler için, daha büyük tamsayıların kelime boyutlu parçalara bölünmesi gerekir. (Aksi takdirde garip şeyler olabilir.) Bu, daha uzun bellek adreslerine erişim için de geçerli değil mi? Bir algoritma süperpolinomyal alan kullanıyorsa, bellek erişimlerinin sadece sabit bir süre gerektirdiğini varsaymak mantıklı mıdır?
Özellikle Bellman-Held-Karp algoritması, algoritma alt küme tanımı dönüştürmek gerekir alt-kümesi açıklaması içine , her biri için , sırayla erişim memoization tablo. Alt kümeler tamsayılarla temsil ediliyorsa, bu tamsayılar bit gerektirir ve bu nedenle sabit zamanda değiştirilemez; tamsayılarla temsil edilmiyorsa, temsilleri doğrudan not tablosunda bir dizin olarak kullanılamaz.
Peki: Bellman-Held-Karp algoritmasının asimtotik çalışma süresi nedir?