¿Por qué el tiempo de ejecución para la parte de fusión de merge sort [math] \ theta (n) [/ math]?

Aquí está el algoritmo en pseudocódigo (de Wikipedia):

combinación de algoritmos (A, B) es
entradas A, B: lista
lista de devoluciones

C: = nueva lista vacía
mientras que A no está vacío y B no está vacío, haga
si cabeza (A) ≤ cabeza (B) entonces
agregue la cabeza (A) a C
dejar caer la cabeza de A
más
agregue la cabeza (B) a C
dejar caer la cabeza de B

// Por ahora, A o B está vacío. Queda por vaciar la otra lista de entrada.
mientras que A no está vacío
agregue la cabeza (A) a C
dejar caer la cabeza de A
mientras B no está vacío hacer
agregue la cabeza (B) a C
dejar caer la cabeza de B

devolver C

Aquí [matemáticas] A [/ matemáticas] y [matemáticas] B [/ matemáticas] son ​​listas ordenadas. Tenga en cuenta que cada elemento de cada lista se referencia a lo sumo 4 veces (estoy contando “controles de vacío” como controles en la cabeza). Solo hay comparaciones, pops y copias en cada una de estas referencias.

El código no tiene otras operaciones, excepto las declaraciones de bucle, condicionales y la declaración de [math] C [/ math]. La lista [matemática] C [/ matemática] se agrega exactamente a [matemática] n [/ matemática] veces donde [matemática] n = | A | + | B | [/ matemática]. Por lo tanto, el tiempo de ejecución es como máximo proporcional a [matemáticas] 5 (| A | + | B |) [/ matemáticas] más una pequeña constante. ([matemáticas] f (n) = O (| A | + | B |) [/ matemáticas])

Por otro lado, cada elemento de cada lista se referencia al menos 3 veces. Por lo tanto, el tiempo de ejecución es al menos proporcional a [matemática] 4 (| A | + | B |) [/ matemática] más una pequeña constante. ([matemáticas] f (n) = \ Omega (| A | + | B |) [/ matemáticas])

Por lo tanto, [math] f (n) = \ theta (| A | + | B |) [/ math].

Porque, si ve la condición base de la ordenación por fusión, dividimos la lista hasta que solo quede 1 elemento.

Por lo tanto, para una lista de n elementos, se trata de registrar n operaciones.

Ahora, para cualquier conjunto de datos, después de separar cada elemento, se necesitarán n operaciones para fusionarlos, es decir, 1 para cada elemento. Por lo tanto, resulta ser Theta (n).

More Interesting

¿Alguien podría recomendar algunos temas interesantes para dominar que se encuentran en la intersección de la informática / programación y la teoría / lógica de conjuntos (algo práctico, no solo teórico)?

¿Qué problema resolvió Alan Turing y cómo eso lo llevó a ser etiquetado como el 'Padre de la Informática'?

¿Por qué es difícil la optimización en parámetros discretos?

¿Es la matemática el lenguaje más difícil de entender?

¿Cuál es la diferencia entre algoritmo no determinista y aproximado?

Sistemas distribuidos: ¿Cuál es el significado exacto de A (Disponibilidad) y qué significa en el teorema CAP de Brewer?

¿Cómo se puede escribir un programa Java que imprima un conjunto completo de las primeras cuatro tablas de multiplicación (hasta 12) organizadas en columnas?

Yoshua Bengio: ¿Qué habilidades son más importantes para ser un investigador de Machine Learning, matemática o informática?

¿Cómo puede un estudiante inteligente de la escuela refutar teoremas muy grandes y bien establecidos en matemáticas?

¿Cuál es la complejidad computacional de la satisfacción de resolución de restricciones sobre enteros? He leído que es polinomial para las igualdades y NP-duro para las desigualdades, pero, ¿no puedes convertir siempre una restricción de desigualdad en una igualdad agregando vars de holgura?

¿Existe un algoritmo para fusionar dos árboles rojo-negros con una complejidad menor que O (n + m)?

¿Qué es la reducción en la teoría de la complejidad computacional?

¿Es una pérdida de tiempo tratar de ser un programador de computadoras si soy malo en matemáticas?

¿La orientación a objetos seguiría siendo el paradigma de programación dominante en un futuro en el que las computadoras personales suelen tener 10 o 100 núcleos?

No pude escribir el programa Fibonacci. ¿Cómo puedo desarrollar mis habilidades matemáticas?