Considere una secuencia de n números reales positivos, (un i), y su secuencia de suma parcial, (s i). Dado un número x ε (0, s n], tenemos que encontrar i tal que si -1 < x ≤ s i. También queremos poder cambiar uno de los a i sin tener que actualizar todas las sumas parciales. Ambos se pueden hacer en O (registro n) utilizando un árbol binario con a i como valores de nodo de hoja y los valores de los nodos de hoja como la suma de los valores de los hijos respectivos. Si se conoce y se establece n, el árbol no tiene que ser autoequilibrado y se puede almacenar de manera eficiente en una matriz lineal. Además, si n tiene una potencia de dos, solo se requieren 2 n - 1 elementos de matriz. Ver Blue et al., Phys. Rev. E (1995), pp. R867-R868 para una aplicación. Dada la complejidad del problema y la simplicidad de la solución, me pregunto si esta estructura de datos tiene un nombre específico y si existen implementaciones existentes (preferiblemente en C++). Ya lo he implementado yo mismo, pero escribir estructuras de datos desde cero siempre me parece reinventar la rueda; me sorprendería que nadie lo haya hecho antes.árbol binario que almacena las sumas parciales: Nombre y implementaciones existentes
7
A
Respuesta
4
Fenwick tree (también conocido como árbol binario indexado) es una estructura de datos que mantiene una secuencia de elementos y puede calcular la suma acumulativa de cualquier rango de elementos consecutivos en el tiempo O (logn). El cambio de valor de cualquier elemento individual también necesita tiempo O (logn).
4
Esto se conoce como finger tree en programación funcional pero aparentemente hay implementaciones en lenguajes imperativos. En los artículos hay un enlace a blog post explicando una implementación de esta estructura de datos en C# que podría serle útil.
Cuestiones relacionadas
- 1. Sumas equilibradas en árbol binario
- 2. Árbol binario GraphViz árbol izquierdo y derecho
- 3. Árbol binario del árbol general
- 4. Implementaciones existentes de OSGi Configuration Admin Service?
- 5. Haskell: Acoplar árbol binario
- 6. menos unario y binario en Parse árbol
- 7. Altura del árbol binario
- 8. Transferencia de árbol binario
- 9. Cómo crear un árbol binario
- 10. Árbol binario usando PHP + MySQL
- 11. Atravesando un árbol binario recursivamente
- 12. ¿Cómo implementar un árbol binario?
- 13. Creando árbol de suma de Scala árbol binario
- 14. Buscando una biblioteca java que haya implementado el árbol binario
- 15. límite de impresión del árbol binario
- 16. Almacenamiento de matriz eficiente para árbol binario
- 17. Complejidades de recorridos de árbol binario
- 18. Tabla hash vs Árbol binario balanceado
- 19. ¿Qué son las estructuras de datos de "sumas y productos"?
- 20. Encontrar un bucle en un árbol binario
- 21. Equilibrio de un árbol binario (AVL)
- 22. Imagen de espejo de un árbol binario
- 23. ¿Cómo hacer que GROUP BY y COUNT incluyan cero sumas?
- 24. Compare las implementaciones de JSF
- 25. El uso de JMX y cómo utilizar las aplicaciones existentes
- 26. dinámicamente hacer que las plantillas parciales usando bigote
- 27. CNG, CryptoServiceProvider y las implementaciones administradas de HashAlgorithm
- 28. ¿Dónde debería usar las implementaciones de BlockingQueue en lugar de las implementaciones de Simple Queue?
- 29. tenedor y roscas existentes?
- 30. Diferencias entre las implementaciones de socket winsock y BSD