Cuando se prueban algoritmos, un enfoque común es la prueba aleatoria: generar una cantidad significativa de entradas de acuerdo con alguna distribución (generalmente uniforme), ejecutar el algoritmo en ellas y verificar la corrección. Los marcos de prueba modernos pueden generar entradas automáticamente dada la firma de algoritmos, con algunas restricciones.
Si las entradas son números, listas o cadenas, generar dichas entradas en forma directa. Los árboles son más difíciles, pero aún así fáciles (usando gramáticas estocásticas sin contexto o enfoques similares).
¿Cómo puedes generar gráficos aleatorios (eficientemente)? Por lo general, elegir gráficos al azar de manera uniforme no es lo que desea: deben estar conectados, ser planos, estar libres de ciclos o cumplir con cualquier otra propiedad. El muestreo de rechazo parece subóptimo, debido al conjunto potencialmente enorme de gráficos indeseables.
¿Cuáles son las distribuciones útiles para mirar? Útil aquí significa que
- es probable que los gráficos prueben bien el algoritmo en cuestión y
- se pueden generar de manera efectiva y eficiente.
Sé que hay muchos modelos para gráficos aleatorios, por lo que agradecería una idea de cuáles son los mejores para la generación de gráficos a este respecto.
Si "algún algoritmo" es demasiado general, utilice algoritmos de búsqueda de la ruta más corta como una clase concreta de algoritmos bajo prueba. Los gráficos para las pruebas deben estar conectados y ser bastante densos (con alta probabilidad, o al menos en expectativa). Para las pruebas, la solución óptima sería crear gráficos aleatorios alrededor de una ruta más corta para que sepamos el resultado deseado (sin tener que emplear otro algoritmo).