Voy a escribir el programa que representará AI para jugar al juego de mesa contra el jugador. Quiero mantener cada juego jugado en árbol de prefijos para buscar juegos similares. Pero me temo que el árbol puede ser demasiado grande para mantenerse en la memoria. Entonces, ¿cuál es la mejor manera de almacenarlo? Y para poder buscarlo rápido. No creo que escribirlo en un archivo sea una buena solución. ¿Puede estar en algún rey de DB?La mejor manera de almacenar el árbol de prefijo grande
Respuesta
Lo que está buscando es una base de datos incrustada y la mayoría están escritas en C++, pero hay algunas que tienen envolturas de C#. Recomiendo Berkeley DB for .NET (que es un contenedor alrededor de Oracle's Berkeley DB).
Lo que yo recomendaría es que se genera un hash único para cada árbol de prefijo, donde los valores hash generada tendría una localidad que representa adecuadamente árboles prefijo similares: en otras palabras, los hashes de dos árboles de prefijo similares deben estar muy cerca de cada uno otro. El juego al que te refieres se conoce como Tic-Tac-Toe, por lo que hashing juegos similares de Tic-Tac-Toe debería ser fácil, aquí hay algunas referencias (Realmente no los leí, hice una búsqueda rápida de "hash Tic-Tac-Toe" y los que fueron los resultados):
- I think this might be java example
- TicTacToe strategic reduction
- http://cg.scs.carleton.ca/~luc/1997notes/topic14/
el hash se almacena en la base de datos Berkeley y el árbol de prefijo es almacenado en un archivo auxiliar, o si lo desea, también puede almacenarlo en el valor mi. Como Berkeley DB almacena pares clave-valor, puede establecer el hash como la clave y el valor para cualquier cosa (es decir, su árbol de prefijos o una ruta a un archivo auxiliar que contenga su árbol de prefijos). Entonces, todo lo que debes hacer es buscar hashes similares y recuperar los árboles correspondientes de los archivos auxiliares.
Berkeley DB almacena claves similares en secuencia, por lo que puede confiar en el hecho de que no moverá las teclas y romperá la localidad de sus valores hash. Dado que la localidad no se romperá, puede hacer una optimización adicional y recuperar una gran página de pares clave-valor y reducir la cantidad de búsquedas y búsquedas que hace en el disco.
- 1. La mejor manera de almacenar variables globales
- 2. La mejor manera de almacenar etiquetas jerárquicas
- 3. La mejor manera de almacenar muchos archivos en el disco
- 4. Serialize árbol prefijo
- 5. Mejor manera de almacenar datos en caché
- 6. La mejor manera de almacenar la contraseña en sql
- 7. ¿La mejor manera de almacenar permisos de usuario?
- 8. models.py hacerse grande, ¿cuál es la mejor manera de romperlo?
- 9. ¿La mejor manera de almacenar los criterios de identificación?
- 10. La mejor manera de almacenar las configuraciones fuera de web.config
- 11. ¿La mejor manera de almacenar orden de clasificación/prioridad?
- 12. ¿Cuál es la mejor manera de almacenar datos de tendencia?
- 13. ¿La mejor manera de almacenar notificaciones de usuario?
- 14. La mejor manera de almacenar datos en caché en Android
- 15. La mejor manera de almacenar fecha/hora en datos básicos
- 16. La mejor manera de almacenar una matriz dispersa en .NET
- 17. MySQL: ¿la mejor manera de almacenar direcciones MAC?
- 18. La mejor manera de almacenar fechas antiguas en SQL Server
- 19. La mejor manera de almacenar datos jerárquicos en hbase
- 20. La mejor manera de almacenar datos en android
- 21. La mejor manera de almacenar las configuraciones para T4
- 22. ¿Cómo almacenar estructuras de árbol en Java?
- 23. mejor manera de almacenar los "favoritos" del usuario en MySQL
- 24. Cómo almacenar un árbol en la base de datos SQL
- 25. Cómo almacenar mejor las líneas en un árbol kd
- 26. mejor manera de almacenar vistas/Estadísticas en MySQL
- 27. La mejor manera de almacenar horas de trabajo y consultarlo de manera eficiente
- 28. Mejor manera de almacenar archivos binarios o de imagen
- 29. ¿Cuál es la mejor manera de almacenar datos de área para una aventura de texto?
- 30. mejor manera de almacenar correo en DB (postfix)
¿CÓMO grande es demasiado grande? Los límites de memoria rondan los 500 gb estos días. – TomTom
Dependiendo del juego, puede que no haya una solución, excepto que NO se almacenen todas las variaciones. El ajedrez, por ejemplo, tiene demasiadas combinaciones de campos, por lo que al final tienes que programar, no usar tablas de búsqueda. – TomTom
El inglés no es mi lengua materna y no sé el nombre de los juegos en inglés. La traducción directa es Marine Chess. Pero mi objetivo es una versión mucho más difícil con una placa 50x50 o incluso más grande. – IordanTanev