¿Existe un algoritmo para fusionar 2 montones máximos en un montón mínimo con una complejidad de tiempo menor que O (n)?

¿Existe un algoritmo para fusionar 2 montones máximos en un montón mínimo con una complejidad de tiempo menor que O (n)?

De ninguna manera.

Piénselo: un montón máximo tiene el mayor valor en la parte superior. El valor más pequeño estará en el nivel más bajo en alguna parte. Consideremos un árbol completo (por lo que todos los elementos de nivel más bajo están en el mismo nivel).

Para un árbol con 4 niveles, tenemos 1 artículo en el 1er nivel, 2 en el 2do, 4 en el 3er, 8 en el 4to. Para n elementos en un montón máximo completo, (n + 1) / 2 de ellos están en el nivel más bajo.

Sin siquiera hablar sobre cuánto tiempo tomaría llegar a esos elementos, sin siquiera considerar cómo entra en juego el segundo montón, y sin preocuparse por construir realmente un montón, solo considerando la pregunta de qué elemento debería estar en la raíz de un elemento. min montón significa que tienes que comparar (n + 1) / 2 elementos. Eso significa que ya tienes O (n), no importa cómo lo cortes. Puede empeorar a partir de ahí, pero no puede mejorar.

Si estás hablando de montones binarios, eso es probablemente imposible. Consideremos un único montón máximo y veamos cuánto tiempo lleva convertirlo en un montón mínimo (esto es más simple que comenzar desde dos montones máximos).

  • Si el montón contiene [math] n = 2 ^ k-1 [/ math] ítems, entonces hay [math] (n + 1) / 2 = \ Omega (n) [/ math] nodos en la profundidad más alta del árbol .
  • Si estos nodos son la mitad más pequeña del conjunto completo de valores en el montón, pueden estar en cualquier orden sin violar la propiedad del montón.
  • Un montón mínimo le permite encontrar el elemento más pequeño en tiempo [matemático] O (1) [/ matemático]
  • Por lo tanto, encontrar el mínimo de esta matriz desordenada se puede hacer en el tiempo que lleva convertir a un montón mínimo, más una constante.
  • Encontrar el mínimo de una matriz desordenada requiere tiempo [matemático] \ Omega (n) [/ matemático] porque todos los elementos deben ser inspeccionados
  • Conclusión, la conversión del montón requiere al menos tiempo lineal en el peor de los casos.
  • Como los montones siempre se pueden construir en tiempo lineal, el límite es ajustado.

More Interesting

¿Cuáles son los algoritmos de coincidencia de patrones más comunes?

¿Cuál es el algoritmo detrás de la creación de una nueva fuente que solo muestra publicaciones de tus seguidores?

Cómo usar la primera búsqueda en profundidad en un laberinto

¿Qué bibliotecas o marcos de Python, C son buenos para las pruebas de diagnóstico en estadísticas?

¿Cómo se imprime el reverso de una pila de objetos iterables?

Solicitar respuestas (función Quora): ¿El algoritmo de crédito es proporcional?

¿Dónde y cómo puedo aprender sobre la creación / comprensión de algoritmos de negociación de acciones?

¿Cómo funcionan los algoritmos bayesianos para la identificación de spam?

¿Qué esquema o algoritmo de compresión se usa en el formato de video 4K?

Sistemas distribuidos: ¿Existe un algoritmo de elección de líder para un anillo sincrónico en el que todos los procesadores menos uno tienen la misma ID?

Un k-palíndromo es una cadena que se transforma en un palíndromo al eliminar como máximo k caracteres de él. Dada una cadena S y un número entero K, ¿encuentra si S es un k-palíndromo o no? Restricciones: S tiene como máximo 20,000 caracteres y 0 <= k <= 30

¿Cuál es una explicación simple de por qué BFS bidireccional se ejecuta en [math] \ Theta (\ sqrt {n}) [/ math]?

¿Qué es la recursividad? ¿Puedes explicar los principios fundamentales de las recursiones? ¿Puedes hacer el código / algoritmo de la serie Fibonacci usando recursividad?

¿Hay alguien que pueda responder esta pregunta?

¿Cómo hacemos análisis de búsqueda binaria (matriz)?