una ruta obtener net manipular manejo listar hacer explorador directorios directorio como carpeta asp archivos archivo abrir algorithm random tree fractals

algorithm - ruta - Generación de árbol de directorios Pseudorandom?



obtener archivos de un directorio c# (3)

Estoy intentando escribir un programa que se autogenerará pseudoaleatoriamente (basado en un valor de inicialización para que pueda volver a ejecutar la misma prueba más de una vez) una estructura de directorios creciente que consiste en archivos. (Esto es para poner a prueba una instalación de base de datos de control de origen)

Me preguntaba si alguno de ustedes conocía algo similar a las secuencias cuasi aleatorias de "relleno de espacio" (por ejemplo, secuencias de van der Corput o secuencias de Halton ) que podrían funcionar aquí.

editar: O un algoritmo fractal. Esto suena sospechosamente como un algoritmo fractal.

edición 2: No importa, creo que descubrí la solución obvia, empiezo con un árbol vacío, y simplemente uso salidas secuenciales de un generador pseudoaleatorio para determinar de manera determinista (basado en el número generado y el estado del árbol generado hasta el momento) hacer una de N acciones, por ejemplo, crear un nuevo subdirectorio, agregar un nuevo archivo, cambiar el nombre de un archivo, eliminar un archivo, etc.

Quiero hacerlo de esta manera en lugar de solo verter archivos secuencialmente en una estructura de carpetas, porque nos encontramos en una situación en la que estamos teniendo algunos problemas con grandes #s de archivos, y no estamos seguros de cuál es la causa. (profundidad del árbol, # de renombrados, # de eliminaciones, etc.)

No es solo un árbol fijo que necesito generar, la estrategia de uso es: hacer crecer un poco la estructura de árbol, evaluar algunas estadísticas de rendimiento, hacer crecer un poco más la estructura de árbol, evaluar algunas estadísticas de rendimiento, etc.


Como mencionas en tu segunda edición, probablemente implementaría todo el asunto como un cruce de árbol de archivos, con el PRNG decidiendo "cambiar a directorio", "crear directorio", "subir un nivel", "crear archivo", "eliminar archivo "y tener otro valor para determinar qué archivo eliminar, a qué directorio cambiar y generar nombres para archivos y directorios.

Utilicé un método similar para probar la tensión de un servidor de flujo de trabajo que escribí (aunque no necesitaba hacer un seguimiento de dónde estaban los artículos de trabajo, solo se necesitaba seleccionar uno al azar para operar).


Este es un conjunto de problemas diferentes que lo convierten en un rompecabezas divertido.

Primero tenemos el generador de números pseudoaleatorio. Hay muchas cosas disponibles. Solo espero una función que cree un número en el rango 0..n-1.

Luego tenemos un algoritmo para determinar el número de subnodos en un solo nodo. Es tentador usar una función lineal, pero eso no es una representación justa de la realidad. Entonces puedes crear la siguiente función:

randomsize() { int n = Random(0,10); if (n<10) return n; return Random(0,9) + 10 * random; }

Esta función produce números pequeños. La mayoría estará en el rango de 0..9 pero la parte superior es prácticamente infinita. Si quieres tener números más grandes también puedes usar un umbral más grande

randomsize() { int n = Random(0,100); if (n<10) return n; return Random(0,9) + 10 * random; }

El último problema es cómo crear un árbol. Esto es bastante simple. Pero debes tener en cuenta que el algoritmo debe terminar. Entonces debes hacer una de las siguientes cosas:

  • usa una profundidad máxima
  • disminuir el número generado en función del nivel de anidación
  • determinar el número de hojas como un porcentaje del total de los subnodos. Este porcentaje debería incrementarse a niveles más altos (10-50 en el primer nivel, 20-60 en el segundo ... 50-100 en el quinto, 60-100 en el sexto, hasta 90-100 en el noveno y más alto.

Por supuesto, puede ajustar los parámetros para crear su árbol requerido.


Si esto es solo para probar, ¿qué está mal con algún algoritmo de generación simple e ingenuo? Como, genere una cantidad aleatoria (1-10) de subdirectorios, genere nombres para ellos, luego para cada directorio recursivamente genere subdirectorios y cierta cantidad de archivos.

Esto es fácilmente personalizable y puedes controlar la semilla para rand . Para necesidades más divertidas, la distribución de las cantidades de archivos / directorios puede no ser lineal, sino algo que se adapte mejor a sus necesidades.

Suena algo que se puede encender en media hora y terminar. No veo la necesidad de algo matemático o complejo. A menos que sea solo por diversión, por supuesto :-)