0% encontró este documento útil (0 votos)
29 vistas10 páginas

Mergesort: Ordenamiento Eficiente O(n log n)

El documento describe el algoritmo de ordenamiento Mergesort. Mergesort es un método de ordenamiento indirecto y recursivo que aplica el principio "divide y vencerás". Divide el array a ordenar en subarrays más pequeños de forma recursiva hasta que cada subarray contenga un solo elemento, luego los va combinando (merge) de forma ordenada hasta reconstruir el array completo ordenado. Tiene una complejidad de O(n log n) y requiere memoria adicional lineal.

Cargado por

luis p
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
29 vistas10 páginas

Mergesort: Ordenamiento Eficiente O(n log n)

El documento describe el algoritmo de ordenamiento Mergesort. Mergesort es un método de ordenamiento indirecto y recursivo que aplica el principio "divide y vencerás". Divide el array a ordenar en subarrays más pequeños de forma recursiva hasta que cada subarray contenga un solo elemento, luego los va combinando (merge) de forma ordenada hasta reconstruir el array completo ordenado. Tiene una complejidad de O(n log n) y requiere memoria adicional lineal.

Cargado por

luis p
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Mergesort

En esta tercera lectura, se presenta otra alternativa en los temas de métodos de


ordenamiento, conocida como Mergesort u ordenamiento por mezcla. Este método
avanzado y recursivo consiste en una mejor opción al ordenamiento de Shell y
permite un algoritmo de la forma O(nlogn), lo cual ofrece una mayor efectividad. La
ordenación por mezcla utiliza el menor número de comparaciones de todos los
algoritmos de ordenación más populares.

Mergesort

De nición de términos básicos

Referencias
Lección 1 de 3

Mergesort

El método de Mergesort, también denominado ordenamiento por mezcla, es


un método indirecto o avanzado que se caracteriza por la aplicación del
«divide y vencerás». Este es un algoritmo de ordenación recursivo con una
complejidad de O (n log n), el cual permite una corta mejora respecto al
ordenamiento Shell. Este método puede ser aplicado según se indica en la
figura 1.

Figura 1: Aplicación del método Mergesort

public static void mergesort(int A[],int izq, int der){

if (izq < der){

int m=(izq+der)/2;

mergesort(A,izq, m);

mergesort(A,m+1, der);
merge(A,izq, m, der);

Fuente: elaboración propia.

Figura 2: Etapas de la ordenación por mezcla

Fuente: Allen Weiss, 2013, p. 350.

El método ordena un array A de enteros desde la posición izquierda (izq)


hasta la posición derecha (der). En la primera llamada al método, recibirá los
valores izq = 0, der = ELEMENTOS-1. En un primer paso, se determina el que
será el elemento central «m». Seguidamente, la primera parte del array,
desde izq hasta m y la segunda parte del array, desde m+1 hasta der, se
mezclan mediante llamadas recursivas al método Mergesort. Por su parte, la
recursión termina cuando izq == der, es decir, cuando un subarray contiene
solamente un elemento. Por último, se puede decir que la operación
principal de la aplicación del método Merge puede ser aplicada de varias
formas: la más frecuente puede observarse en la figura 3.

Figura 3: Algoritmo Mergesort

public static void merge(int A[],int izq, int m, int der){

int i, j, k;

int [] B = new int[[Link]]; //array auxiliar

for (i=izq; i<=der; i++) //copia ambas mitades en el array auxiliar

B[i]=A[i];

i=izq; j=m+1; k=izq;

while (i<=m && j<=der) //copia el siguiente elemento más grande

if (B[i]<=B[j])
A[k++]=B[i++];

else

A[k++]=B[j++];

while (i<=m) //copia los elementos que quedan de la

A[k++]=B[i++]; //primera mitad (si los hay)

Fuente: elaboración propia.

Según lo establece Allen Weiss (2013):

Ahora bien, es importante acotar que, aunque el tiempo de


ejecución de la ordenación por mezcla es O (n log n), presenta el
significativo problema de que mezclar dos listas ordenadas
utiliza una memoria adicional lineal. El trabajo adicional
implicado en crear la matriz temporal de nuevo sobre la matriz
original a lo largo de todo el algoritmo ralentiza la operación
considerablemente. Este proceso de copia puede conmutarse
juiciosamente los papeles de a y tmpArray en niveles
alternativos de la recursión. (pp. 352-353).

C O NT I NU A R
Lección 2 de 3

Definición de términos básicos

Mergesort

“La ordenación por mezcla utiliza la técnica de «divide y vencerás», para obtener
un tiempo de ejecución O( n log n )” (Allen Weiss, 2013, p. 350).

Recursividad

“Un método recursivo es un método que hace directa o indirectamente, una
llamada a sí mismo.” (Allen Weiss, 2013, p. 287).

Con el fin de complementar esta tercera lectura del módulo 4, se recomienda


ampliar la perspectiva con la revisión de la siguiente publicación:

Técnicas para capturar los cambios en los datos y mantener


actualizado un almacén de datos..pdf
763 6 KB
763.6 KB

Fuente: Díaz de la Paz, L. et al. (2015). Técnicas para capturar los cambios en los datos y mantener
actualizado un almacén de datos. En Revista cubana de ciencias informáticas (4)9, pp. 89-103.
Recuperado de [Link]
18992015000400007&lng=es&nrm=iso.

La ordenación por mezcla utiliza el menor número de comparaciones de


todos los algoritmos de ordenación más populares.

Verdadero.

Falso.

SUBMIT

Pueden evitarse las copias excesivas, pero no puede prescindirse de la


cantidad adicional de memoria adicional lineal requerida sin un excesivo
coste de tiempo adicional de ejecución.
Verdadero.

Falso.

SUBMIT

C O NT I NU A R
Lección 3 de 3

Referencias

Allen Weiss, M. (2013). Estructuras de datos en Java (4ta edición). Editorial


Pearson Educación.

Díaz de la Paz, L. et al. (2015). Técnicas para capturar los cambios en los
datos y mantener actualizado un almacén de datos. En Revista cubana de
ciencias informáticas (4)9, pp. 89-103. Recuperado de
[Link]
18992015000400007&lng=es&nrm=iso.

Senger de Souza, S. R., Paiva Prado, M., Barbosa, E. F. y Maldonado, J. C.


(2012). An Experimental Study to Evaluate the Impact of the Programming
Paradigm in the Testing Activity. En CLEI Electronic Journal (1)15, pp. 4-4.
Recuperado de [Link]
script=sci_arttext&pid=S0717-50002012000100004.

También podría gustarte