Podczas testowania algorytmów powszechnym podejściem jest testowanie losowe: generuj znaczną liczbę danych wejściowych zgodnie z pewnym rozkładem (zwykle jednolitym), uruchom na nich algorytm i sprawdź poprawność. Nowoczesne ramy testowania mogą generować dane wejściowe automatycznie na podstawie podpisu algorytmów, z pewnymi ograniczeniami.
Jeśli dane wejściowe są liczbami, listami lub łańcuchami, generowanie takich danych wejściowych jest proste. Drzewa są twardsze, ale wciąż łatwe (przy użyciu stochastycznych gramatyk bezkontekstowych lub podobnych podejść).
Jak można generować losowe wykresy (efektywnie)? Zwykle losowe wybieranie wykresów równomiernie nie jest tym, czego chcesz: powinny być połączone, planarne, wolne od cyklu lub spełniać dowolną inną właściwość. Próbkowanie przy odrzuceniu wydaje się nieoptymalne ze względu na potencjalnie ogromny zestaw niepożądanych wykresów.
Jakie są przydatne dystrybucje do obejrzenia? Przydatne tutaj oznacza, że
- wykresy prawdopodobnie dobrze sprawdzą algorytm i
- mogą być generowane skutecznie i wydajnie.
Wiem, że istnieje wiele modeli losowych wykresów, dlatego doceniłbym wgląd w to, które z nich najlepiej nadają się do generowania wykresów.
Jeśli „jakiś algorytm” jest zbyt ogólny, użyj algorytmów wyszukiwania najkrótszej ścieżki jako konkretnej klasy testowanych algorytmów. Wykresy do testowania powinny być połączone i raczej gęste (z dużym prawdopodobieństwem lub przynajmniej w oczekiwaniu). Do testowania optymalnym rozwiązaniem byłoby utworzenie losowych wykresów wokół najkrótszej ścieżki, abyśmy znali pożądany wynik (bez konieczności stosowania innego algorytmu).