Métodos de Ordenamiento

Arturo Díaz Pérez Análisis y Complejidad de Algoritmos Métodos de Ordenamiento Arturo Díaz Pérez ¬ ® ¯ ° ± ² Tipos de ordenamiento y medidas de efi

2 downloads 63 Views 122KB Size

Story Transcript

Arturo Díaz Pérez

Análisis y Complejidad de Algoritmos

Métodos de Ordenamiento Arturo Díaz Pérez ¬ ® ¯ ° ± ²

Tipos de ordenamiento y medidas de eficiencia Algoritmos básicos QuickSort HeapSort BinSort RadixSort Arboles de Decisión

Análisis y Diseño de Algoritmos

Sorting-1

Tipos de Ordenamiento F Ordenamiento interno. ß Se lleva a cabo completamente en memoria principal. Todos los objetos que se ordenan caben en la memoria principal de la computadora

F Ordenamiento externo. ß No cabe toda la información en memoria principal y es necesario ocupar memoria secundaria. El ordenamiento ocurre transfiriendo bloques de información a memoria principal en donde se ordena el bloque y este es regresado, ya ordenado, a memoria secundaria

Análisis y Diseño de Algoritmos

Análisis y Complejidad de Algoritmos

Sorting-2

1

Arturo Díaz Pérez

Formulación

ß Registros: ß Llaves: ß Obtener la secuencia ß tal que,

r1, r2, ..., rn k1, k2, ..., kn

ri1 , ri2 ,..., rin ki1 ≤ ki2 ≤ ... ≤ kin

Análisis y Diseño de Algoritmos

Sorting-3

Criterios de Eficiencia F Criterios de eficiencia ß El número de pasos ß El número de comparaciones entre llaves para ordenar n registros. /De utilidad cuando la comparación entre llaves es costosa ß El número de movimientos de registros que se requieren para ordenar n registros. /De utilidad cuando el movimiento de registros es costoso

Análisis y Diseño de Algoritmos

Análisis y Complejidad de Algoritmos

Sorting-4

2

Arturo Díaz Pérez

Métodos Simples de Ordenamiento F Métodos simples ß Método de Burbujeo ß Método de Inserción ß Método de Selección

Sorting-5

Análisis y Diseño de Algoritmos

Método de Burbujeo 25

3

12

19

2

1

9

6

1

25

3

12

19

2

6

9

2

25

3

12 19

6

9

3

25

6

12

19

9

6

25

9

12 19

9

25

12 19

12

25 19

void Burbujeo( int A[], int n) { int i,j; for( i=0; i < n-1; i++ ) for( j=n-1; j > i; j--) if( A[j] < A[j-1] ) Intercambia( &A[j], &A[j-1] ); }

19 25

Análisis y Diseño de Algoritmos

Análisis y Complejidad de Algoritmos

Sorting-6

3

Arturo Díaz Pérez

Método de Burbujeo void Burbujeo( int A[], int n) { int i,j; for( i=0; i < n-1; i++ ) for( j=n-1; j > i; j--) if( A[j] < A[j-1] ) Intercambia( &A[j], &A[j-1] ); } n −1

n −1

i =1

i =1

Comparaciones:

c = ∑ (n − i ) = ∑ i =

Movimientos:

M min = 0 n −1

n −1

i =1

i =1

n(n − 1) n 2 n = − 2 2 2

M max = ∑ ( n − i ) = ∑ i =

n(n − 1) n 2 n = − 2 2 2

Sorting-7

Análisis y Diseño de Algoritmos

Método de Selección 25

3

12

19

2

1

9

6

1

3

12

19

2

25

9

6

2

12

19

3

25

9

6

3

19

12

25

9

6

6

12

25

9

19

9

25

12

19

12

25

19

19

25

Análisis y Diseño de Algoritmos

Análisis y Complejidad de Algoritmos

void Selección( int A[], int n ) { int i, j, imin; for( i=0; i < n-1; i++ ) { imin = i; for( j = i+1; j > n; j++ ) if( A[j] < A[imin] ) imin = j; intercambia( &A[i], &A[imin] ); } }

Sorting-8

4

Arturo Díaz Pérez

Método de Selección void Selección( int A[], int n ) { int i, j, imin; for( i=0; i < n-1; i++ ) { imin = i; for( j = i+1; j > n; j++ ) if( A[j] < A[imin] ) imin = j; intercambia( &A[i], &A[imin] ); } }

n−1

n−1

i=1

i =1

C = ∑n − i = ∑i =

Comparaciones:

Movimientos:

n(n − 1) n2 n = − 2 2 2

M = n −1 Sorting-9

Análisis y Diseño de Algoritmos

Método de Inserción

25

3

12

19

3

25

12

3

12

25

19

3

12

19

25

2

2

3

12

19

25

1

1

2

3

12

19

25

9

1

2

3

9

12

19

25

1

2

3

6

9

12

19

2

Análisis y Diseño de Algoritmos

Análisis y Complejidad de Algoritmos

1

9

6

void Inserción( int A[], int n ) { int i,j;

6

for( i=1; i < n; i++ ) { j:= i; while( j > 0 && A[j] < A[j-1] ) { Intercambia( &A[j], &A[j-1] ); j-} } }

25

Sorting-10

5

Arturo Díaz Pérez

Método de Inserción void Inserción( int A[], int n ) { int i,j; for( i=1; i < n; i++ ) { j:= i; while( j > 0 && A[j] < A[j-1] ) { Intercambia( &A[j], &A[j-1] ); j-} } }

Comparaciones:

Cmin = n − 1 n −1

n −1

i =1

i =1

Cmax = ∑ ( n − i ) = ∑ i =

n( n − 1) n 2 n = − 2 2 2

M min = 0

Movimientos:

n −1

M max = ∑ i = i =1

n ( n − 1) n 2 n = − 2 2 2 Sorting-11

Análisis y Diseño de Algoritmos

QuickSort F Dado un arreglo desordenado de n elementos 1 2 3

n-1 n

A

ß selecciona un valor v del arreglo, llamado pivote, y rearregla los elementos del arreglo de manera que todos los elementos menores que v queden colocados antes que v y todos los elementos mayores o iguales que v queden colocados después que v. 1 2

j-1

1 2

< v Análisis y Diseño de Algoritmos

Análisis y Complejidad de Algoritmos

n

j v

n

>v Sorting-12

6

Arturo Díaz Pérez

QuickSort 1 2

n

j-1

1 2

j v

n

< v >v void quicksort( int A[], int i, int j ) { if( desde A[i] hasta A[j] existen al menos dos llaves distintas ) { Seleccionar un pivote, v Permutar A[i], ...,A[j], tal que, para algún k entre i+1 y j, A[i], ..., A[k-1] < v y A[k], . . . , A[j] ≥ v quicksort( A, i, k-1 ); quicksort( A, k, j ); } } Sorting-13

Análisis y Diseño de Algoritmos

QuickSort: Pivote i

j

int pivote( int A[],int i,int j ) { int k, r; for( k = i+1; k 0 ) return k; } /* No hay llaves diferentes */ return -1; } Análisis y Diseño de Algoritmos

Análisis y Complejidad de Algoritmos

Sorting-14

7

Arturo Díaz Pérez

QuickSort: Particionamiento j

i 0 ) intercambia ( &A[r], &A[2*r] ); r = j; } else { /* r tiene dos hijos */ if( comp( A[r], A[2*r] ) > 0 && comp( A[2*r], A[2*r+1] ) 0 && comp( A[2*r+1], A[2*r] ) A[n-k+2] > . . . > A[n] void HeapSort( A, n ) . . { int i; for( i = n/2; i >= 1; i-- ) /* Inicialmente, establece la propiedad del árbol parcialmente ordenado */ desciende ( A, i, n); for( i = n; i >= 1; i-- ) { /* Quita el menor elemento */ intercambia( &A[1], &A[i] ); /* reestablece el árbol parcialmente ordenado */ desciende( A, 1, i-1 ); } } Análisis y Diseño de Algoritmos

Análisis y Complejidad de Algoritmos

Sorting-34

17

Arturo Díaz Pérez

Ordenamiento Lineal F Supongamos que las llaves son enteros en el rango de 1 a n, y que no existen llaves iguales. ß Si A y B son arreglos de tipo adecuado y los n elementos que van a ser ordenados están inicialmente en A, se pueden colocar en el arreglo B en el orden de sus llaves mediante for( i = 1; i

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.