¿Cuál es la forma más eficiente de generar un gráfico planar aleatorio grande (~ 300k vértices) ("aleatorio" aquí significa distribución uniforme)?Genera un gran gráfico plano aleatorio
Respuesta
Bien, un método sería intentar generar un gráfico aleatorio que satisfaga restricciones similares como un gráfico plano (por ejemplo, bordes < = 3 * vértices - 6) y verificar si es plano en el tiempo O (n) usando Algoritmo de prueba de planitud de Tarjan. Si no es plano, genera de nuevo. Sin embargo, no estoy seguro de cuán eficiente sería esto para 300,000 vértices (o si incluso le dará gráficos con probabilidad uniforme).
Hay algo de literatura en la generación de gráficos planos, podría encontrar un documento aquí: Generating Labeled Planar Graphs que aparentemente ha esperado O (n^4) tiempo de ejecución, y no valdría la pena tampoco. Tal vez las referencias allí le ayudarán a encontrar algo que podría ayudar.
¡Buena suerte!
Sin ningún otro requisito, yo diría buscar generación laberinto al azar. Si desea ciclos en el gráfico, elimine algunas paredes al azar de un simple laberinto. Las intersecciones en el laberinto se convierten en los nodos en su gráfico y las paredes eliminadas son los bordes. Eso significa que puede seleccionar la cantidad de nodos eligiendo el tamaño del laberinto.
Los laberintos normalmente se realizan en una cuadrícula 2d con un máximo de 4 conexiones de un punto a otro, pero no hay nada que te impida hacer un laberinto en mosaicos hexagonales, o algo más.
Si por uniformidad te refieres uniformemente distribuido en el espacio, entonces este es un algoritmo bastante rápido que desarrollé para generar gráficos planos para un simulador espacial ecológico/evolutivo. Generará gráficos planar aleatorios con un grado esperado que especifique, por supuesto con alguna variación a su alrededor. Puede ampliarlo para elegir el grado esperado en función de un número aleatorio uniforme si, en cambio, desea grados aleatorios uniformes en su gráfica plana.
https://github.com/briandconnelly/seeds/blob/master/seeds/plugins/topology/CartesianTopology.py
Parece que este algoritmo puede generar gráficos cuyos bordes se cruzan? Eso no es un gráfico plano. Por ejemplo, si hay 4 puntos en un círculo del radio dado, todos se conectarán entre sí y las diagonales se cruzarán, haciendo que el gráfico no sea plano. –
Otra posibilidad consiste en elegir al azar coordenadas y luego calcular una triangulación de Delaunay, que es un gráfico planar (y se ve bien también). Ver http://en.wikipedia.org/wiki/Delaunay_triangulation Hay algoritmos O (n log (n)) para calcular dicha triangulación.
pero tendrá un grado fijo 3? –
No tendrá un grado fijo 3, pero será plano. –
oh, lo siento, tienes razón, estoy pensando en el dual. –
¿Has mirado el muestreo de Boltzmann? Ver el artículo de Eric Fusy "Muestreo aleatorio uniforme de gráficos planos en tiempo lineal". El documento y la implementación están disponibles en su homepage, que según el documento puede generar instancias de tamaño 100K en unos pocos segundos.
- 1. Número aleatorio CUDA que genera
- 2. ¿Cómo se genera un número aleatorio en C#?
- 3. ¿Cómo se genera un número aleatorio en tiempo de ejecución?
- 4. ¿Genera un proceso en segundo plano en Ruby en Windows?
- 5. bosque aleatorio en un gran conjunto de datos
- 6. Generando un gráfico cúbico aleatorio con probabilidad uniforme (o menos)
- 7. Elegir un archivo aleatorio de un directorio (con una gran cantidad de archivos) en Python
- 8. ¿Cómo puedo determinar si una función genera un gráfico
- 9. amplía primero búsqueda en gran gráfico con poco ram
- 10. Generando un archivo binario aleatorio
- 11. Encuentro aleatorio no tan aleatorio
- 12. ¿Generar un número aleatorio dentro del rango?
- 13. Aleatorio no es aleatorio
- 14. Verificando si un gráfico es aleatorio usando el modelo Erdős-Rényi?
- 15. colocar una imagen en el plano XY en un gráfico 3D en Mathematica
- 16. Generando un número aleatorio excluyendo el rango
- 17. genera un número aleatorio entre 1 yx donde es más probable un número menor que uno más alto
- 18. Cómo almacenar un gran gráfico no ponderado dirigido con miles de millones de nodos y vértices
- 19. ¿Cada máquina genera el mismo resultado de número aleatorio usando la misma semilla?
- 20. Estructura de datos para un mundo aleatorio
- 21. Número aleatorio en un bucle
- 22. elemento aleatorio en un mapa
- 23. Mejor generador aleatorio PHP
- 24. Hacer un gráfico Gráfico en C#
- 25. diámetro de un gráfico enorme
- 26. Gran generación de números aleatorios
- 27. ¿Cómo se genera un sessionID?
- 28. py2exe no genera un ejecutable
- 29. Escogiendo un objeto aleatorio en un NSArray
- 30. Escogiendo un elemento aleatorio de un conjunto
¿seguramente casi todos los gráficos aleatorios no son planos? –