Aşağıdakine ek, k ( k - 1 ) terimlerini açıklar:
Dolayısıyla, ifadedeki terimleri incelerseniz, (benzetme olarak) terimini, ilk konumda 1 olan 1'leri içeren tüm ikili dizelerin numaralandırması olarak hayal edebilirsiniz . Başka bir deyişle, ikili dizgideki her bir konumun, sorundaki şehirden birinin o sırada düşündüğümüz tam alt kümede olup olmadığının seçimini temsil etmesine izin veriyoruz. Yani, 5 şehir için 10101 {1,3,5} alt kümesine karşılık gelir.(n - 1k)kn
Bu nedenle, {1, ..., } ' nin tüm alt kümelerini hesaplamak için , size = 2 boyutundaki her bir ikili alt kümeyi (yani, ikili dizeleri saymak) sayarız (yani , iki 1 içeren iki boyutlu . boyut = 3, sonra boyut = 4, ... sonra boyut = n. (Size = 1 altkümesinin yalnızca ilk şehri içermesi gerektiğini ve bu nedenle kısmi mesafesini hesaplamanın önemsiz olduğunu unutmayın, çünkü 1 -> alt kümedeki diğer tüm şehirler -> 1 tam olarak 0'dır.)nn
şehirleri olan her alt kümede , aday-optimal, kısmi yollar düşünmeliyiz . Özellikle, optimal, toplam yol verilen alt küme boyunca akla gelebilir ve ilk şehir hariç şehirlerinden herhangi birine ulaşabilir . Daha sonra, bu tür her aday alt yol için, o noktaya kadar en uygun turu, önceki = alt yollarından herhangi birinin minimum değeri artı o alt yol için terminal şehirden uzaklığı hesaplıyoruz . geçerli aday alt yolu için terminal şehir. Bu, yapmamız gereken bu tür karşılaştırmaları verir. Benim terimim ile arasındaki tutarsızlıkkk - 1k - 1k - 1( k - 1 ) ( k - 2 )( k - 1 ) ( k - 2 )k ( k - 1 )bağlantılı analizdeki terim notasyonel bir farktır ( tanımımdan onlardan farklı bir aralıkta toplanırım). Bununla birlikte, en azından, bu terimin ikinci dereceden düzen karmaşıklığını göstermelidir.k
Ne kadar ilginç - birkaç dakika önce bu tam algoritmayı C ++ ile kodlamayı bitirdim. (Bu yüzden, teğeti saf teoriden biraz pratik tartışmaya bağışlayın. :))
zaman ve alan maliyeti - en azından benim uygulama altında. Ancak pratik olarak, alan gereksinimleriniz bu kadar hızlı büyüdüğünde, zaman gereksinimlerinden çok daha acı verici hale gelirler. Örneğin, bilgisayarımda (4 GB RAM ile) 24 şehre kadar olan örnekleri çözebilirim - bundan daha fazlası ve hafızam bitti.O(2nn2)O(2nn)
Tabii ki, ben sadece kötü bir programcı olabilirim ve pratikte benden daha iyisini yapabilirsin. :)
Düzenleme: Sorunuzun bir detayı hakkında biraz daha ayrıntılı bilgi: terimi, en kötü durumda, önceki alt kümelerden kısmi, optimal mesafeyi hesaplamanız gerektiğinden gelir (en fazla Bunlardan ; bağlantı verdiğiniz analizde ile toplandığını unutmayın ). Bu, yine en kötü durumda, toplam için boyutundaki alt kümelerle karşılaştırmasını gerektirir .k(k−1)nknO(k)k−1O(k2)
Ayrıca, açıklamam yeterince açık değilse, Vazirani'nin bazı güzel ders notları ( PDF ). Held-Karp'ın bir analizi de dahil olmak üzere TSP tartışması için P.188'e gidin.