Temel olarak, en kötü ya da en iyi durumun hangileri olabileceğini ve bunlardan önce ÖNCE sahip olabileceğiniz diğer "son" vakaların nasıl olduğunu nasıl öğrenirsiniz?
Temel olarak, en kötü ya da en iyi durumun hangileri olabileceğini ve bunlardan önce ÖNCE sahip olabileceğiniz diğer "son" vakaların nasıl olduğunu nasıl öğrenirsiniz?
Yanıtlar:
Algoritmanın içeriğine bağlı olarak hangi veri yapılarının / türlerinin / yapılarının kullanıldığını tanımlayabilirsiniz. Daha sonra, bunların (olası) zayıf noktalarını anlamaya ve bu durumlarda çalışmasını sağlayacak bir yürütme planı oluşturmaya çalışıyorsunuz.
Örneğin, algoritma girdi olarak bir dizge ve bir tamsayı alır ve dizenin karakterlerini sıralar.
İşte biz var:
Bazı özel durumlarla birlikte dize :
Bilinen özel durumlara sahip tamsayı :
Aşağıdaki sınır durumlarında başarısız olabilecek sıralama algoritması :
Ardından, tüm bu davaları alın ve bunların nasıl çakıştığını anlamaya çalışan uzun bir liste oluşturun. Ör:
Şimdi onlar için test senaryoları oluşturun :)
Kısa özet : algoritmayı, sınır durumlarını bildiğiniz temel bloklara böler ve sonra bunları birleştirerek küresel sınır durumları yaratabilir
Kenar koşullarını belirleyen bir algoritma olduğunu sanmıyorum .... sadece deneyim.
Örnek: Bir bayt parametresi için 0, 127, 128, 255, 256, -1 gibi sayıları test etmek isteyebilirsiniz, sorun yaratabilecek herhangi bir şey.
Bir "kenar" iki anlama sahiptir ve her ikisi de kenar davaları söz konusu olduğunda birbiriyle ilgilidir. Kenar, girdideki küçük bir değişikliğin çıktıda büyük bir değişikliğe neden olduğu bir alandır veya bir aralığın sonuna gelir.
Dolayısıyla, bir algoritmanın son durumlarını tanımlamak için önce giriş alanına bakarım. Kenar değerleri algoritmanın kenar durumlarına yol açabilir.
İkincisi, çıktı alanına bakarım ve onları yaratabilecek girdi değerlerine bakarım. Bu daha az yaygın bir şekilde algoritmalar ile ilgili bir problemdir, ancak verilen bir çıktı alanını kapsayan çıktı üretmek için tasarlanmış algoritmalardaki problemleri bulmanıza yardımcı olur. Örneğin, bir rasgele sayı üreticisi, amaçlanan tüm çıktı değerlerini üretebilmelidir.
Son olarak, benzer olan ancak benzer olmayan çıktılara yol açan girdi durumları olup olmadığını görmek için algoritmayı kontrol ediyorum. Bu kenar durumları bulmak en zorudur, çünkü hem alanları hem de bir çift girişi içerir.
Bu çok genel bir sorudur, yapabileceğim tek şey bazı genel ve belirsiz fikirleri ortaya koymak :)
-Açık sınırı davaları. Ör. Bir dizgiyi ayrıştırıyorsanız, dizge boş veya boşsa ne olur? Eğer x'den y'ye kadar sayıyorsanız, x ve y'de ne olur?
-Kodlaştırılmış veya KURUTMALI olabilir. Gereksiz bir karmaşıklık, yanlış gidebilecek şeylere katkıda bulunabilir.
Algoritma kullanma becerisinin bir kısmı zayıf yönlerini ve patolojik durumlarını bilmektir. Victor'un cevabı bazı iyi ipuçları veriyor, ancak genel olarak, bunun hakkında bir fikir edinmek için konuyu daha derinlemesine incelemeniz gerektiğini tavsiye ediyorum, bu soruyu tam olarak cevaplamak için kurallara uyabileceğinizi sanmıyorum. Örneğin , Cormen veya Skiena'ya bakınız (özellikle Skiena algoritmaların nerede kullanılacağı ve belirli durumlarda neyin iyi çalıştığı konusunda çok iyi bir bölüme sahiptir, Cormen sanırım daha fazla teoriye giriyor).