Orijinal olarak ifade edilen ve daha sonra Macke'nin cevabı altındaki yorumlarla güncellenen problem hakkındaki anlayışım şunları içerir: 1) her iki kenar tipi (bağımlılıklar ve çatışmalar) yönlendirilir; 2) iki düğüm bir kenarla bağlanırsa, diğer türden veya ters olsa bile, başka bir düğümle bağlanmamalıdır; 3) farklı tipteki kenarların karıştırılmasıyla iki düğüm arasındaki bir yol oluşturulabilirse, bu göz ardı edilen bir durumdan ziyade bir hatadır; 4) Bir türün kenarlarını kullanan iki düğüm arasında bir yol varsa, diğer türün kenarlarını kullanan aralarında başka bir yol olmayabilir; 5) tek kenarlı tip veya karışık kenar tipli döngülere izin verilmez (uygulamadaki bir tahminden, sadece çakışma döngülerinin bir hata olduğundan emin değilim, ancak bu koşul kaldırılabilir, değilse).
Ayrıca, kullanılan veri yapısının, bu gereksinimlerin ihlallerinin ifade edilmesini engellemediğini varsayacağım (örneğin, bir grafik ihlali koşulu 2, düğüm çifti her zaman düğüm çiftinden (tip, yön) bir haritada ifade edilemedi önce en az numaralı düğüme sahiptir.) Belirli hatalar ifade edilemezse, dikkate alınacak vaka sayısını azaltır.
Aslında burada dikkate alınabilecek üç grafik vardır: sadece bir kenar tipinden ikisi ve iki tipten her birinin birleşmesiyle oluşan karışık grafik. Bunu, belirli sayıda düğüme kadar tüm grafikleri sistematik olarak oluşturmak için kullanabilirsiniz. Öncelikle, sıralı iki düğüm çifti arasında birden fazla kenarı olmayan N düğümlerinin tüm olası grafiklerini oluşturun (bunlar yönlendirilmiş grafikler olduğu için sıralı çiftler.) Şimdi, bu grafiklerin biri bağımlılıkları ve diğeri çakışmaları temsil eden tüm olası çiftlerini alın ve her bir çiftin birliğini oluşturur.
Veri yapınız koşul 2 ihlallerini ifade edemezse, yalnızca bağımlılık grafiklerinin boşluklarına uyan olası tüm çatışma grafiklerini oluşturarak dikkate alınacak vakaları önemli ölçüde azaltabilirsiniz veya bunun tersi de geçerlidir. Aksi takdirde, birleşmeyi oluştururken durum 2 ihlallerini tespit edebilirsiniz.
İlk düğümden birleştirilmiş grafiğin eninde bir ilk geçişinde, her erişilebilir düğüme giden tüm yol kümesini oluşturabilirsiniz ve bunu yaptığınızda, tüm koşulların ihlallerini kontrol edebilirsiniz (döngü tespiti için, Tarjan'ın algoritmasını kullanın .)
Başka bir düğümden gelen yollar, başka bir durumda ilk düğümden gelen yollar olarak görüneceğinden, grafik bağlantısı kesilmiş olsa bile yalnızca ilk düğümün yollarını dikkate almanız gerekir.
Karışık kenarlı yollar hata olmaktan ziyade basitçe göz ardı edilebilirse (koşul 3), bağımlılık ve çakışma grafiklerini bağımsız olarak düşünmek ve bir düğümde bir düğümün ulaşılabilir olup olmadığını kontrol etmek yeterlidir.
N-1 düğümlerinin grafiklerini incelerken bulunan yolları hatırlarsanız, bunları N düğümlerinin grafiklerini oluşturmak ve değerlendirmek için başlangıç noktası olarak kullanabilirsiniz.
Bu, düğümler arasında aynı türde birden çok kenar oluşturmaz, ancak bunu yapmak için genişletilebilir. Bununla birlikte, bu durum vaka sayısını büyük ölçüde artıracaktır, bu nedenle test edilen kodun bunu temsil etmeyi imkansız hale getirmesi veya başarısız olması daha önce tüm bu vakaları filtrelemesi daha iyi olurdu.
Böyle bir kehanet yazmanın anahtarı, verimsiz olmak anlamına gelse bile mümkün olduğunca basit tutmaktır, böylece ona güvenebilirsiniz (ideal olarak, doğruluğu için argümanlar yoluyla, testle desteklenir).
Test senaryoları oluşturmak için araçlara sahip olduğunuzda ve iyiyi kötülükten doğru bir şekilde ayırmak için oluşturduğunuz kehanete güvendiğinizde, bunu hedef kodun otomatik testini yürütmek için kullanabilirsiniz. Bu mümkün değilse, bir sonraki en iyi seçeneğiniz, farklı durumlar için sonuçları taramaktır. Oracle bulduğu hataları sınıflandırabilir ve her bir türün yollarının sayısı ve uzunluğu ve her iki yol türünün başlangıcında düğüm olup olmadığı gibi kabul edilen durumlar hakkında size bilgi verebilir. daha önce görmediğiniz vakaları aramanıza yardımcı olabilir.