¿Cuál debería ser el tamaño máximo del árbol de segmentos construido en una matriz en 100,000 elementos?

Supongo que se refiere a la configuración en la que asigna previamente una gran matriz para almacenar los nodos del árbol de segmentos. Es posible asignar solo 199,999 elementos escalonando las hojas en los dos niveles inferiores, pero esto requiere calcular el rango cubierto por cada nodo a medida que recurre sobre el árbol, lo cual es bastante ineficiente. En cambio, la mayoría de las implementaciones usan una potencia de dos con un elemento ficticio en 0, como sugiere Sudharshan. Como resultado, muchas operaciones se vuelven mucho más simples, ya que los hijos del nodo i son siempre [matemática] 2i [/ matemática] y [matemática] 2i + 1 [/ matemática]. Además, el nodo [math] i ^ {th} [/ math] en el nivel [math] k ^ {th} [/ math] tiene el índice [math] 2 ^ k + i [/ math]. Esto solo desperdicia un factor constante de memoria, que generalmente no tiene importancia en la programación competitiva.

Esto es similar a cómo se implementan típicamente los montones binarios.

Para los elementos E, necesita [matemática] 2 ^ {[log (E) +1)]} \ – \ 1 [/ matemática] nodos.
Entonces, para 100,000 elementos, necesitaría [matemática] 2 ^ {[16.611 + 1]} \ – \ 1 [/ matemática] => 262143 nodos.

He hecho un tutorial sobre árboles de segmentos. Habla de:

  1. Rango de consultas y actualizaciones.
  2. Construcción de árboles, actualización y complejidad de consultas
  3. Propagación perezosa
  4. Escenarios cuando los árboles de segmentos deben implementarse

Espero eso ayude. ¡Aclamaciones!

La potencia más cercana de 2 a 100,000 es 131072 (2 ^ 17). Entonces, cuando se construye un árbol de segmentos, necesitamos tener al menos 2 ^ 17 nodos de hoja en el árbol que represente cada elemento, pero, por supuesto, habrá muchos nodos que realmente no tienen ningún valor en ellos.

Si está creando un árbol de segmentos basado en una matriz donde la matriz [nodo] es la matriz de la matriz [2 * nodo] y la matriz [2 * nodo + 1], entonces una implementación de fuerza bruta tendrá 2 ^ 18 nodos – 31072 nodos (para eliminar los no utilizados) = 231072 nodos

More Interesting

¿Cuáles son las mejores estructuras de datos para un índice espacial utilizado para averiguar en qué región de un espacio delimitado cae un nuevo punto dado?

¿Cuántas puertas lógicas se necesitan para multiplicar dos enteros de n bits?

En los concursos de programación, ¿puedo adivinar la complejidad temporal de la solución (digamos n, n ^ 2, log n) para el problema, dado el límite de tiempo para el problema?

Cómo ser bueno en el desarrollo de algoritmos muy complejos

¿Por qué los problemas NP completos son más difíciles que los problemas NP si un problema NP puede reducirse a un problema NP completo?

Cómo hacer un sitio web que contenga algoritmos

¿Cómo funciona un algoritmo de 'aprendizaje de representación'?

Visión por computadora: ¿Cuáles son algunas técnicas de detección de bordes ultrarrápidas y eficientes en memoria?

Dada la secuencia creciente, en cada paso puede elegir 2 elementos consecutivos, reemplazarlos con su suma y no puede elegir el último elemento, ¿cuál es el número máximo de movimientos que puede hacer para que la secuencia siga aumentando?

¿Cuál es el mejor algoritmo de compresión de imágenes y cuál es el algoritmo de compresión de Facebook?

¿Qué algoritmo se puede usar para encontrar la clave para el cifrado y la clave de entrada en el formulario?

¿Cuáles son algunos libros que debe leer un experto en algoritmos?

¿El interés por los algoritmos genéticos y evolutivos está en declive?

¿Por qué es importante el crossover en el algoritmo genético?

¿Qué significa importar en Python? ¿Puedo hacer mi propio algoritmo sin usar importar?