Tengo una aplicación de hoja de cálculo con fórmulas. Estoy buscando el mejor algoritmo para detectar referencias circulares entre las fórmulas. El enfoque actual que tengo es lento y usa demasiada memoria cuando hay largas cadenas de cálculos con las fórmulas. Implica mantener conjuntos de todos los dependientes para cada fórmula. Entonces, si la primera columna de celdas tuviera una fórmula con una referencia a la celda anterior, el primer conjunto de celdas estaría vacío. El conjunto de la 2da celda solo contendría la primera celda, el conjunto de la 3ra celda contendría las celdas 1 y 2, ..., el conjunto de la 1000.a celda contendría las 999 celdas anteriores. Cuando se introdujo una nueva fórmula, se creó su conjunto de dependientes y si el conjunto contiene la nueva fórmula, hay una referencia circular. Pero, obviamente, para este escenario, el tiempo y la memoria requeridos crecen exponencialmente.Algoritmo para encontrar referencias circulares en una hoja de cálculo
Respuesta
Debe hacer una clasificación topológica de las celdas de todos modos para poder calcular rápidamente los valores de las celdas cuando algo se cambia. El procedimiento de clasificación topológica también detecta ciclos como un subproducto.
Gracias. Ya tenía un algoritmo rápido para clasificar las fórmulas y detectar cambios, pero ahora puedo eliminarlo y matar dos pájaros de un tiro con esto. –
Represente las dependencias entre celdas como un gráfico dirigido, y use Tarjan's strongly connected components algorithm (cada componente fuertemente conectado de tamaño 2 o mayor contiene ciclos).
+1, pero ¿cómo se encuentran exactamente todos los ciclos? – abeln
Tal vez usted tiene motivos para comprobar por su cuenta, pero Excel ya se verifica para las referencias circulares de forma automática. Puede usar la propiedad Worksheets.CircularReference
en VBA para acceder a esta información.
Los datos no están en un libro de Excel. Acabo de etiquetar esta pregunta con Excel porque está muy relacionada con un escenario de Excel. –
- 1. Referencias circulares en Java
- 2. referencias circulares en RavenDB
- 3. Accesorios Doctrine - referencias circulares
- 4. Copie una hoja de cálculo completa en una nueva hoja de cálculo en Excel 2010
- 5. Creación de referencias genéricas circulares
- 6. referencias circulares en mi en Proyectos de
- 7. En C++, ¿hay punteros como referencias de celda en una hoja de cálculo de Excel?
- 8. Referencias circulares en Javascript/Recolector de basura
- 9. Uso Parcelable con referencias circulares
- 10. ¿Cómo tratar con referencias circulares?
- 11. usando C# para seleccionar una hoja de cálculo en Excel
- 12. ¿Las "referencias circulares" en JPA son antipatrón?
- 13. in_array en objetos con referencias circulares
- 14. ¿Cómo eliminar referencias circulares en Entity Framework?
- 15. ¿Es posible crear referencias circulares en Clojure?
- 16. ¿Hay una hoja de cálculo gratuita o un control similar a una hoja de cálculo para Visual C++/VB.Net?
- 17. Referencias circulares ¿Causa pérdida de memoria?
- 18. Referencias de archivos circulares no permitidas
- 19. Formulario de hoja de cálculo de Google, rellenar opciones de formulario basadas en una hoja de cálculo
- 20. javascript, referencias circulares y pérdidas de memoria
- 21. ¿Cómo manejar referencias circulares con Autofac 2.4.5?
- 22. Cómo guardar un objeto con referencias circulares?
- 23. referencias de celda de paso a funciones de hoja de cálculo
- 24. Abrir archivo de Excel en una hoja de cálculo específica
- 25. Google hoja de cálculo de formato condicional de hoja de cálculo
- 26. Estructurando una consulta de hoja de cálculo Gdata
- 27. Tratamiento de referencias circulares al ingresar datos en SQL
- 28. Cómo cambio el nombre de la hoja de C# en una hoja de cálculo de Excel
- 29. Motivo de las referencias circulares con las clases?
- 30. Administrar versiones de hoja de cálculo
[este] (http://stackoverflow.com/questions/546655/finding-all-cycles-n-graph) la respuesta podría ser de ayuda – abeln