11 votos

¿Cómo puedo generar aleatoriamente los árboles?

Quiero generar aleatoriamente los árboles, es decir grafo acíclico gráficos con una sola raíz, asegurándose de que todos los posibles árboles con un número fijo de nodos n son igualmente probables.

4voto

Jason Pratt Puntos 4782

Knuth dice mirarlo como a la generación de todos los paréntesis anidados en lexicográfica del orden.

Clic aquí para ver los detalles

http://www-cs-faculty.stanford.edu/~uno/fasc4a.ps.

1voto

Ramesh Soni Puntos 6193

Para generar un árbol al azar puede utilizar el siguiente algoritmo, donde dst y src son dos pilas:

dst := random permutation of all nodes;
src := empty stack
src.push(dst.pop()); % picks the root
while (!dst.empty()) {
  a := random element from src;
  b := dst.pop();
  add the edge (a, b)
  src.push(b);
}

La prueba de la corrección (todos los árboles son posibles y equiprobables): Alexey S. Rodionov y Hyunseung Choo, En la Generación Aleatoria de las Estructuras de la Red: los Árboles, los CCI DE 2003, LNCS 2658, pp 879-887, 2003.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X