Quiero guardar un Btree (no estoy seguro de uno binario) en un archivo de disco. y luego léelo a la memoria. algunos cruces de nivel pueden ser una buena forma para un Btree binario. pero si no es binario. Construyo el Btree desde el nodo hoja hasta el nodo raíz en la memoria. Creo que tengo que definir algunas estructuras en el archivo de disco y dar salida a los nodos de árbol. usando alguna etiqueta adicional para identificar un nodo en el archivo? cómo atravesar puede ser el problema clave aquí. No pude encontrar una buena manera de guardar los nodos y los punteros. y luego léelo. reconstruir el árbol en la memoria. alguna buena idea ?. muchas gracias.guardando Btrees en un archivo de disco y léelo
Respuesta
Si realmente quiere hacer algo similar, sólo se puede asignar a cada nodo un identificador y guardar los nodos en ese formato:
[valor de nodo-id izquierda-nodo-id derecho del nodo-id]y luego visite el árbol con una búsqueda amplia.
Cuando desee reconstruir el árbol, cree un id de mapa-> nodo y luego lea hacia atrás el archivo: entonces, cuando lea un registro, cree el nodo, regístrelo en el mapa y asigne el nodo derecho que busca los nodos del mapa.
Una opción también sería guardar el nivel del nodo y usar BFS para reconstruir el árbol. El valor del nodo decidirá si es hijo izquierdo o derecho. –
Para cada nodo define alguna estructura de datos que mantendrá para ti la misma información que tiene el nodo y agrega a esa estructura un campo adicional que marcará para ti la compensación en el archivo para el próximo hijo. Y crea el campo superior de esa estructura en su tamaño real, ya que no sabes qué tipo de árbol estás buscando ahora. Ahora saltando sobre el archivo podrá reconstruir su árbol. Estoy seguro de que mi solución no es definitiva, pero espero que sea el mejor punto para ti.
Es posible que desee comprobar Protocol Buffers. Son compactos, binarios, extensibles, fáciles de leer y escribir, y están disponibles en C++, Java y Python (así como implementaciones de terceros en otros idiomas).
Puede definir un mensaje de búfer de protocolo para un nodo BTree, con desplazamientos de archivo para nodos secundarios, y simplemente serializarlo en el disco de la manera obvia.
La técnica habitual para B-Trees es garantizar que el tamaño de un nodo sea igual al tamaño de bloque del disco y mmap el archivo de disco. No especifica en qué lenguaje de programación está trabajando, por lo que puede ser tan simple como un molde en C, o algo más complicado como crear objetos de peso mosca para envolver un java.nio.IntBuffer. De cualquier manera, gran parte de la ventaja del B-tree es que no tienes que cargarlo todo de una vez, sino que puedes saltarte con bastante eficiencia.
- 1. Guardando en disco una base de datos en memoria
- 2. guardando un archivo de datos en R
- 3. Guardando el byte de audio [] en un archivo wav
- 4. XDocument: guardando XML en un archivo sin BOM
- 5. ¿Guardando gráficos muy grandes en algoritmos de partición de gráficos de disco/transmisión?
- 6. Escribir un archivo descargado binario en un disco en Java
- 7. WPF - Guardando la fuente en el disco, y luego instanciando GlyphTypeface para la excepción de lanzamientos de fuentes. ¿Por qué?
- 8. Guardando System.Drawing.Graphics en un png o bmp
- 9. ¿Cómo guardar un archivo XML en un disco con python?
- 10. C# Guardando imágenes enormes
- 11. Lógica en Desfragmantación de disco y comprobación de disco
- 12. guardar un archivo (de corriente) en el disco usando C#
- 13. Extensión de Chrome: cómo guardar un archivo en el disco
- 14. guardando un objeto 'lxml.etree._ElementTree'
- 15. Guardando cambios en SlickGrid
- 16. ¿Cómo puedo crear un archivo numpy .npy en el disco?
- 17. Escribiendo una imagen enmascarada en un disco como archivo PNG
- 18. Manipular un archivo en la memoria con PHP (sin crear un archivo temporal en el disco)
- 19. ¿Cómo elimino un archivo del disco en IntelliJ IDEA?
- 20. Guardando CGContextRef
- 21. guardando la configuración de MySQL
- 22. Guardando enum en mongoDB
- 23. Establezca Application_ENV a través de la configuración de host virtual y léelo en PHP
- 24. ¿Guardando todo en un solo fragmento de bytecode lua?
- 25. Guardando el archivo de forma local y remota en Aptana Studio
- 26. Extraer un archivo de tar.gz, sin tocar el disco
- 27. Guardando un backstack en un cambio de orientación
- 28. Crear y transmitir un archivo grande sin almacenarlo en la memoria o en el disco
- 29. ¿Cómo puedo crear, escribir y luego devolver un archivo en C# sin guardarlo en el disco?
- 30. Grabando y guardando la radio por Internet en python
Simplemente no puede guardar la lista de valores y reconstruirla en tiempo de ejecución? – akappa
Pareces estar confundiendo "árbol binario" y "Btree". Quizás deberías aclarar eso primero. http://en.wikipedia.org/wiki/B-tree http://en.wikipedia.org/wiki/Binary_search_tree – bendin