Bu sorunun benzer olduğunu önceden söylemek isterim , ama sorum rastgele değil, titiz determinizm içermiyor, bu yüzden "bilinen bir tohum kullan" cevabı gerçekten geçerli değil. Benzer şekilde, bu soru benzer, ama yine, algoritmanın hiç başarısız olmasını beklemiyorum - sadece hangi yolun doğru olacağını bilmiyorum.
Bu soru grafik algoritmaları test edilirken ortaya çıktı. ancak hiçbir şekilde bunlarla sınırlı değildir. A * gibi bazı algoritmaların birden fazla doğru yanıtı olabilir. Tam uygulamanıza bağlı olarak, her biri eşit derecede doğru olan birkaç cevaptan herhangi birini alabilirsiniz. Bu onları test etmeyi zorlaştırabilir, çünkü hangisinin vaktinden tüküreceğini bilmiyorsunuz ve cevapları elle hesaplamak çok zaman alıyor.
Özel durumumda, Floyd-Warshall'ı mümkün olan en kısa yolu tükürmek için değiştirerek etrafta dolaştım ve bunu zaman testi yaparak harcadım. Kendi başına iyi bir özellik olma avantajına sahipti. Daha sonra FW'den bilinen doğru yollar açısından diğer işlevleri test edebilirim (döndürülen yol, bu başlangıç / bitiş çifti için FW tarafından döndürülen yollardan herhangi biri ise, doğrudur). Tabii ki, bu sadece FW'nin çalışması nedeniyle yoğun grafikler için çalışıyor, ama yine de güzel.
Ancak bu, bu özelliğe sahip tüm algoritmalar için her zaman geçerli olmayabilir. Şimdiye kadar bulduğum en iyi cevap, doğru cevabın kendisini değil, doğru cevabın özelliklerini test etmektir. En kısa yol algoritmalarına geri dönmek için, döndürülen yolun maliyetini bilinen doğru maliyetle karşılaştırabilir ve yolun geçerli olduğundan emin olabilirsiniz.
Bu işe yarar, ancak her şeyin doğru bir şekilde doğrulanmaması riskini, özellikle doğrulamanın kendisi karmaşıksa (örneğin doğru algoritmalar varken , minimum yayılan bir ağacın doğrulanması bilinen bir zor sorundur; muhtemelen daha zorsa) MST'nin kendisini oluşturmak), bu durumda test kodunuzu kapsamlı bir şekilde test etmeniz gerekir. Daha da kötüsü: Muhtemelen bir MST doğrulama algoritmasını test etmek için bir MST oluşturmanız gerekir, böylece MST testinizin MST doğrulama algoritmanızın çalışmasına ve MST doğrulama algoritması testinizin MST nesil kod çalışmanıza bağlı olduğu harika bir senaryoya sahipsiniz.
Son olarak, çıktıyı gözlemlemeyi, elle doğrulamayı, daha sonra az önce doğruladığınız çıktıyı test etmek için testi kodlamayı içeren "ucuz yol" vardır, ancak bu her seferinde testi revize etmeniz gerekebilir. uygulamayı biraz değiştirin (otomatik testlerden kaçınması gereken şey budur).
Açıkçası cevap, bir dereceye kadar test ettiğiniz tam algoritmaya bağlıdır, ancak birkaç kesin, belirleyici "doğru" çıktıya sahip algoritmaları doğrulamak için herhangi bir "en iyi uygulama" olup olmadığını merak ediyordum, ancak bu doğru doğru çıktıların zor önceden biliyorum ve hatta gerçeği sonra doğrulamak bile zor.