¿Qué tipo de operaciones podrían aplicarse sobre un árbol de segmentos?

Cosmin Negruseri tiene toda la razón: la operación debe ser binaria y asociativa. Hay una cosa más a tener en cuenta si queremos que el árbol de segmentos sea eficiente, ver a continuación).

Eso significa que su conjunto de valores (que podría ser algo mucho más complejo que los enteros) debería ser un semigrupo arbitrario. Tenga en cuenta que ni siquiera necesita un elemento neutral, pero su existencia hace que la implementación sea más simple, de lo contrario, tendría que extender artificialmente su semigrupo a la implementación del árbol de segmentos dentro del monoide.

Sin embargo, una restricción más: para ser eficiente, su operación debería ser posible implementar en O (1). En particular, significa que los elementos de su semigrupo deben ocupar espacio O (1). Si su operación tarda T (n) tiempo en computarse, entonces todas las operaciones con árbol de segmentos serán T (n) veces más lentas.

Algunos ejemplos de qué árbol de segmentos puede calcular lo siguiente en cualquier subsegmento de una matriz cambiante, en línea, en tiempo logarítmico:

  1. Elemento máximo y mínimo simultáneamente.
  2. Posiciones de máximo y mínimo
  3. Recuentos de valores máximos y mínimos.
  4. Si se clasifica o no un subsegmento
  5. Si tratamos el subsegmento como un número escrito en binario, podemos calcularlo como módulo de cualquier constante (es decir, esta constante debe elegirse antes de construir un árbol de segmentos).
  6. El subsegmento más largo de un subsegmento que contiene solo ceros: su longitud y sus extremos.

Asociatividad. Busque ejemplos de monoides.

Vi problemas con:

  • min, max, mcd, mcm y, o
  • suma, multiplicación módulo a primo, xor

Supongo que no vi uno con multiplicaciones matriciales, por lo que sería divertido intentarlo :).

More Interesting

Suponiendo que todos estos algoritmos resuelven el mismo tipo de problema, ¿cuál se recomienda? ¿Y por qué?

¿Cuáles son algunos conceptos erróneos comunes sobre los algoritmos?

¿Cuáles son algunos ejemplos de problemas para los cuales una cola prioritaria resulta útil?

¿Cómo definirías la ordenación rápida en pocas palabras?

¿Qué libro (s) y otros recursos recomendaría para que un principiante entienda las estructuras de datos y los algoritmos en C ++?

Dado un gráfico con vértices 2N de modo que existan dos vértices P y Q, con cada ruta de P a Q que contenga al menos N + 1 bordes, ¿cuál es el número mínimo de vértices que debemos eliminar para desconectar P y Q?

¿Necesito seguir la ruta de programación competitiva para ser muy bueno en el desarrollo de algoritmos?

¿Cuáles son las estrategias más populares utilizadas en el comercio de alta frecuencia?

Como programador autodidacta de 24 años, ¿debo comenzar con la programación competitiva o el desarrollo web?

¿A qué libro se refirió Thomas Cormen mientras estudiaba algoritmos?

¿El operador 'in' mientras busca claves en Python Dictionary toma O (1)? Si es así, ¿cómo?

¿Qué algoritmo se usa para obtener la cadena correcta de una muestra de cadenas?

¿Es una persona inteligente debido a los 'algoritmos' que usa su cerebro? Si es así, ¿alguien podría copiar ese 'algoritmo' para ser igualmente inteligente?

¿Cómo debo usar el libro Introducción a los algoritmos de Cormen de manera efectiva? ¿Es mejor elegir un tema que haya encontrado en algún lugar de la programación competitiva y leer un algoritmo relacionado con eso o revisarlo de principio a fin?

¿Cómo uso cualquier biblioteca en Java que implemente la selección de funciones del algoritmo RELEIFF?