При тестировании алгоритмов общим подходом является случайное тестирование: генерировать значительное количество входных данных в соответствии с некоторым распределением (обычно равномерным), запускать алгоритм на них и проверять правильность. Современные инфраструктуры тестирования могут генерировать входные данные автоматически с учетом сигнатуры алгоритмов с некоторыми ограничениями.
Если входные данные являются числами, списками или строками, генерирование таких входных данных происходит напрямую. Деревья сложнее, но все же просты (используя стохастические контекстно-свободные грамматики или аналогичные подходы).
Как вы можете генерировать случайные графики (эффективно)? Как правило, выбор графов равномерно в случайном порядке - это не то, что вам нужно: они должны быть связаны, либо плоскими, либо свободными от циклов, либо выполнять любое другое свойство. Отклонение выборки кажется неоптимальным из-за потенциально огромного набора нежелательных графиков.
Какие полезные дистрибутивы посмотреть? Полезное здесь означает, что
- графики, скорее всего, хорошо протестируют алгоритм и
- они могут быть созданы эффективно и действенно.
Я знаю, что существует множество моделей для случайных графов, поэтому я был бы признателен за понимание того, какие из них лучше всего подходят для генерации графов в этом отношении.
Если «некоторый алгоритм» является слишком общим, пожалуйста, используйте алгоритмы поиска кратчайшего пути в качестве конкретного класса тестируемых алгоритмов. Графики для тестирования должны быть связными и достаточно плотными (с высокой вероятностью или, по крайней мере, в ожидании). Для тестирования оптимальным решением было бы создание случайных графов по кратчайшему пути, чтобы мы знали желаемый результат (без использования другого алгоритма).