Şube ve Sınır'ı Knapsack'e uygulayalım , umarım bu konsepti sizin için netleştirir.
Sahibiz n etiketli ürünler 1 -den n. vben değeri beninci madde ve wbenağırlığı. Onları en çok içerebilecek bir sırt çantasına sığdırmaya çalışıyoruzT toplam ağırlık ve sırt çantasına koyduğumuz öğenin değerlerinin toplamını en üst düzeye çıkarmaya çalışıyoruz.
Sıradan backtrack yaklaşımı temelimizdir. Önce koydukv1 ve ardından kalan sorun için n - 1özyineleme ile öğeler. Sonra kaldırıyoruzv1 paketten ve kalan için sorunu çözmek n - 1 öğeleri ve tekrar bulduğumuz en iyi yapılandırmayı döndürüyoruz.
Bu geri izleme Şube ve Bağlı'nın 'Şube' kısmıdır. (Sırt çantası söz konusu olduğunda) iki davaya dalıyorsunuz: 'eşyaben 've' öğesinin çözümünün bir parçasıdır bençözümün bir parçası değildir '. Bunu, sol çocuğun bir vaka ve sağ çocuğun diğer vaka olduğu ikili bir ağaç olarak görselleştirebilirsiniz. Bu ağaç arama ağacı (veya arama alanı) ): derinliğinve bu nedenle O (2n)düğümleri. Bu nedenle algoritma, öğelerin sayısında bir üst çalışma süresine sahiptir.
Şimdi 'Bağlı' kısmına geçiyoruz: 'bu yapılandırma asla işe yaramaz, bu yüzden bunu hesaplamakla da uğraşmayabiliriz' diyebileceğimiz kriterleri bulmaya çalışıyoruz. Böyle bir kritere örnek olarak 'sırt çantasına koyduğumuz eşyaların ağırlığı aşıldıT': ilkini, n / 2 öğeler sırt çantasına ve bu nedenle zaten dolu, eşya koymaya çalışmanın bir anlamı yok n / 2 + 1 -den n sırt çantasında da var, ancak herhangi bir alt kümeye uymaya çalışmanın bir anlamı yok n / 2 + 1 -den n sırt çantasında, zaten dolu olduğu için 2n / 2vakalar. Başka bir örnek ' kalan tüm öğeleri koysam bile, koyduğum öğelerin değeri şimdiye kadar bulduğum en iyi yapılandırmayı aşmayacak '.
Bu ölçütler temel olarak arama ağacının bölümlerini keser: bazı düğümlerde, örneğin 'sol alt ağaç bana daha iyi bir yapılandırma vermez, çünkü X' dediğinizden, bu alt ağacı unutursunuz ve onu keşfetmezsiniz. Bir derinlik ağacıd bu şekilde kesip kurtardığınızı O (2d) Eğer şanslıysanız, bu biraz hız artışı olabilir.
Buna `` Sınırlama '' adını verdiğini unutmayın, çünkü genellikle bir tür alt veya üst sınır içerir: kriter için ' Geri kalan tüm öğeleri koysam bile, koyduğum öğelerin değeri en iyi yapılandırmayı aşmayacak Şimdiye kadar buldum ', şimdiye kadarki en iyi yapılandırmanızın değeri en iyi yapılandırmada bir alt sınırdır, bu yüzden bu alt sınırın ötesine geçmeyecek her şey başarısız olmaya mahkumdur.
'Sınırlama' bölümünü istediğiniz kadar karmaşık hale getirebilirsiniz. Örneğin, tamsayı programlama sorunları genellikle gevşeme kullanılarak çözülür: programınızı, polinom zamanında çözebileceğiniz doğrusal bir programa gevşetirsiniz ve daha sonra ikili değişkenleriniz için hiçbir zaman işe yaramayacak birçok vakayı atabilirsiniz. Sonra kalan seçeneklerde dal.
Şube ve Sınır'ın genellikle pratikte sadece bir hız artışı sağladığını, ancak teoride olmadığını unutmayın: buluşsal yönteminizi kullanarak arama ağacının ne kadarının kesildiğini söylemek zor. Bu, bu tür problemler üzerinde pratikte kullanılan farklı buluşsal yöntemlerin sayısı ile ifade edilir. Şanssızsanız, kalan arama ağacı çok fazla sınırlama olsa bile çok büyük kalır.