Bir kavram açıdan, bir havuza taş bırakarak ve dalgaların izlerken düşünün. yolları gölet ve taş başlangıç pozisyonunu temsil edecek.
Tabii algoritma mesafesi n arttıkça n ^ 2 yollarının belirli oranda aramak zorunda kalacaktı. Sen başlama pozisyonu almak ve bu noktadan mevcut tüm yolları kontrol ederim. Sonra yinelemeli o yollara sonunda ve benzeri noktaları için arayın.
Bunu zaten kapalı olup olmadığını bir noktada yolları yeniden kontrol etmiyor tarafından ve çok uzun sürüyor yolları üzerinde vererek, bir yolda değil çift sırt tarafından, performansı artırabilir.
Alternatif bir yol karıncalar bir başlangıç noktasından rastgele tarama ve belirli bir yolu karşıya geçmek daha karıncalar kurar bir koku izi, ayrılmak karınca feromon yaklaşımı, kullanmaktır. Eğer başlangıç noktası ve bitiş noktaları hem (yeterli) karıncalar gönderirseniz o zaman sonunda, en güçlü kokusu ile yol, en kısa olacaktır. Bu kısa yol karıncalar tek tip bir tempoda yürümek göz önüne alındığında, belirli bir zaman diliminde daha fazla kez ziyaret edilmiş olacaktır çünkü.
DÜZENLEME @ Spikie
gölet algoritmasını nasıl uygulanacağı başka bir açıklaması olarak - vurgulanır gerekli potansiyel veri yapılarını:
Bir ağ gibi harita saklamak gerekir. Bu sadece bir dizi
nodesve
edgesaralarında. Bir dizi
nodesbir teşkil
route. Bir kenar iki düğüm (muhtemelen aynı düğüm her ikisi) katılır ve sahip olan bir ilişkili
costgibi
distanceya da
timekenar çapraz. Bir kenar ya da iki çift yönlü ya da tek yönlü olabilir. Muhtemelen en basit sadece tek yönlü olanlar ve düğümler arasındaki iki yön olarak (örneğin, bir A ile B arasındaki kenar ve A B için farklı bir) iki katına.
Örnek olarak yukarıya doğru bakacak eşkenar üçgen içinde düzenlenmiş üç tren istasyonları düşünün. Hem de üç istasyon aralarında her yarım vardır. Kenarlar hep birlikte komşu istasyonları katılmak, nihai diyagram büyük üçgen içinde oturan ters bir üçgen olacaktır.
sol alt başlanarak Etiket düğümler A, B, C, D, E, F (üst F) olarak, yukarı soldan sağa ve gidiyor.
kenarları her iki yönde hareket ettirilebilir varsayalım. Her kenar 1 km maliyeti vardır.
Tamam, bu yüzden alttan rota isteyen bir üst istasyona F. örneğin ABCEBDEF kendilerine ikileyeceğiz olanlar da dahil olmak üzere birçok olası yolları vardır bıraktı.
Biz rutin bir söz var
NextNodebir kabul,
nodeve a
costve seyahat edebilirsiniz her düğüm için kendisini çağırır.
Bu rutin çalışmasına izin Açıkçası eğer uzunluğunda potansiyel olarak sonsuz olanlar (örn ABABABAB vs) dahil tüm yolları sonunda keşfedeceksiniz. Biz karşı kontrol ederek bunun olmasını durdurmak
cost. Daha önce ziyaret edilmemiş bir düğüm ziyaret ettiğinizde, biz maliyet ve biz bu düğümden karşı gelen düğüm hem koydu. Biz mevcut maliyet karşı kontrol edip ucuza iseniz o zaman düğüm güncelleyip (recursing) devam önce bir düğüm ziyaret edilmişse. Biz daha pahalı iseniz, o zaman düğüm atlayın. Tüm düğümler atlanır edersek rutin çıkın.
Bizim hedef düğümü vurursanız o zaman da rutin çıkın.
Bu şekilde tüm canlı yolları kontrol fakat en önemlisi, sadece maliyeti en az olan. sürecin sonunda her düğüm hedef düğüm dahil olmak üzere bu düğüme almak için en düşük maliyeti olacaktır.
Bizim hedef düğümden geriye doğru rotayı almak için. Biz maliyet ile birlikte gelen düğümü depolanan bu yana, sadece rotayı kadar bina geriye hop. Bizim örneğimizde gibi bir şey ile sona ereceğini:
Düğüm A - (Toplam) Maliyet 0 - Düğüm Yok kaynaktan
Düğüm B - Maliyet 1 - Düğüm A dan
düğüm C - Maliyet 2 - Düğüm B kaynaktan
düğüm D - Maliyet 1 - Düğüm A dan
düğüm E - Maliyet 2 - Düğüm D / Maliyet kaynaktan 2 - Düğüm B (eşit bir maliyet olduğu gibi bu bir istisnadır) kaynaktan
maliyeti 2 - - Düğüm D kaynaktan Düğüm F
Yani en kısa rota ADF olduğunu.