Está en la página 1de 14

Ordenamiento en Tiempo Lineal

Profesor: Julio Csar Lpez


e
o
Home Page
Title Page
Contents

Page 1 of 100
Go Back
Full Screen
Close
Quit

jlopez@eisc.univalle.edu.co

4 de noviembre de 2003

Generalidades
Los algoritmos vistos hasta ahora, son algoritmos de ordenamiento
por comparacin (MergeSort, QuickSort, InsertionSort, HeapSort).
o
El costo en el peor caso de MergeSort, HeapSort es O(n lg n).
Home Page
Title Page
Contents

El costo en el caso medio del QuickSort es O(n lg n).


La cota m
nima de todos los algoritmos de ordenamiento por comparacin es (n lg n)
o
Habr algoritmos mejores que los vistos para ordenar?
a
Si es ordenamiento por comparaciones: No!

Page 2 of 100
Go Back
Full Screen

En otros casos, si, pero si los arreglos cumplen ciertas propiedades o


se cuenta con ms informacin:
a
o
Ordenamiento por conteo (counting sort).

Close

Radix Sort.

Quit

Bucket Sort.

Cota Inferior para Ordenamiento por Comparaciones


Para ordenar < a1 , a2 , . . . , an > solo utilizaremos comparaciones
ai aj , ai < aj , ai = aj , ai aj ,ai > aj .

El modelo del Arbol de Decisin:


o
Representa las comparaciones realizadas por un algoritmo de ordenamiento cuando opera sobre una entrada de tamao dado.
n
Home Page

Control, movimiento de datos, y otros aspectos son ignorados.


Title Page
Contents

Por ejemplo, para el algoritmo de ordenamiento por Insercin con


o
una entrada de 3 elementos, el rbol de decisin es:
a
o
a1 : a 2

Page 3 of 100

a 2 : a3

a2 : a 3

Go Back
Full Screen

<1,2,3>

a 1 : a3

<2,1,3>

a 1 : a3

Close
Quit

<1,3,2>

<3,1,2>

<2,3,1>

<3,2,1>

g 1: Arbol de decisin con tres elementos (Insertion Sort)


o


Arbol de Decisin
o

Home Page
Title Page
Contents

En general, cada nodo interno est etiquetado por una pareja ai : aj


a
(1 i, j n) y cada hoja est etiquetada con una permutaa
cin ((1), (2), . . . , (n)) que indica el ordenamiento de la entrada
o
(a(1) a(2) . . . a(n) ).
La ejecucin de un algoritmo de ordenamiento corresponde a recorrer
o
un camino de la ra a una hoja en el rbol de decisin.
z
a
o
En cada nodo la comparacin ai aj es realizada.
o

Page 4 of 100
Go Back
Full Screen
Close
Quit

El subrbol izquierdo representa las comparaciones que se deben haa


cer en caso de respuesta positiva. El subrbol derecho representa las
a
comparaciones que se deben hacer en caso de respuesta negativa (es
decir ai > aj )
Cada una de las n! permutaciones debe aparecer como una de las
hojas del rbol de decisin, para que el algoritmo trabaje bien.
a
o


Arbol de Decisin
o
Cota inferior para el peor caso
La longitud del camino ms largo de la ra a una hoja, es el nmero
a
z
u
de comparaciones que se hacen en el peor caso: este nmero es igual
u
a la altura del rbol de decisin.
a
o

Home Page

Entonces una cota inferior sobre la altura de un rbol de decisin,


a
o
es una cota inferior sobre la complejidad de cualquier algoritmo de
ordenamiento.

Title Page
Contents

Teorema: Cualquier rbol de decisin para ordenar n elementos tiene


a
o
altura (nlgn).
Demostracin
o
Dado un rbol de decisin de altura h, que ordena n elementos, se
a
o
tiene lo siguiente:

Page 5 of 100
Go Back
Full Screen
Close
Quit

Deben existir al menos n! hojas, correspondientes a las n! respuesta diferentes.


Como el rbol es de altura h y es binario, el nmero de hojas es
a
u
h.
a lo sumo 2
n! 2h lg(n!) h h (nlgn)
Corolario: HeapSort y MergeSort son algoritmos de ordenamiento
por comparacin asintticamente ptimos!!
o
o
o

Ordenamiento por Conteo


En el ordenamiento por conteo se asume que :
Los n elementos de entrada son enteros en el rango 0 y k.
Si k = O(n), el algoritmo corre en tiempo O(n).
Idea: Determinar para cada x, cuantos elementos menores que x hay,
por ejemplo, si existe 5 elementos menores que x, entonces x debe ir
en la posicin 6.
o
Home Page
Title Page
Contents

Page 6 of 100
Go Back
Full Screen
Close
Quit

El algoritmo Counting Sort recibe un arreglo A[1..n] donde se encuentran los elementos a ordenar, un arreglos de salida donde quedaran los datos de ordenados B[1..n] y un arreglo C[0..k] que trabaja
como almacenamiento temporal.
Counting Sort (A, B, k)
1 for i 0 to k
2
do C[i] 0
3 for j 1 to length [A]
4
do C[A[j]] C[A[j]] + 1
C[i] = # veces que aparece i en A
5 for i 1 to k
6
do C[i] C[i] + C[i 1]
C[i] = # de elementos de A i
7 for j length[A] downto 1
8
do B[C[A[j]]] A[j]
9
C[A[j]] C[A[j]] 1

g 2: Operaciones de Counting Sort en un Arreglo A[1..8]


c)
Quit



















B


Close
Full Screen
Go Back

b)

Page 7 of 100

C
Contents

Title Page

a)

Home Page

A 2

3 0

Ejemplo de Counting Sort

Ordenamiento por Conteo

g 3: Operaciones de Counting Sort en un Arreglo A[1..8]


f)
Quit
Close

B 0 0 2

Full Screen

Go Back
Page 8 of 100

e)

















!



































0
2

Contents

Title Page

d)

Home Page













0
2

Continuacin del ejemplo Counting Sort


o

Ordenamiento por Conteo

Ordenamiento por Conteo


Cul es el costo de ejecucin del algoritmo Counting Sort?
a
o
Tiempo de ejecucin: O(k) + O(n) + O(k) + O(n)
o
12
Home Page
Title Page

34

56

79

= O(k + n)
Si k = O(n), entonces tiempo de ejecucin es O(n)
o

Contents

Una importante propiedad del algoritmo Counting Sort es la Estabilidad:

Page 9 of 100
Go Back

Nmeros con el mismo valor aparecen en igual orden en el arreglo


u
de salida B que en el arreglo de entrada A.

Full Screen

La estabilidad del algoritmo Counting Sort es importante por la


siguiente razn :
o

Close

Es utilizado como una subrutina en al algoritmo Radix Sort.

Quit

Es crucial para la correctitud del Radix Sort.

Radix Sort
El algoritmo Radix Sort ordena n nmeros enteros de d d
u
gitos.
Para ordenar los nmeros solo lo hacemos con una columna al tiempo, el
u
problema es ordenar los n nmeros de d d
u
gitos.
d1 d

1
1
Home Page

d1 d

Title Page
Contents

g 4: Representacin General
o

Page 10 of 100
Go Back
Full Screen
Close
Quit

Una forma de ordenar los nmeros escoger el d


u
gito menos signicativo,
ordenar cada uno de los resultados recursivamente y entonces combinarlos
en orden.
329
457
657
839
436
720
355

720
355
436
457
657
329
839

720
329
436
839
355
457
657

329
355
436
457
657
720
839

g 5: Representacin de los n meros


o
u

Radix Sort
En el siguiente procedimiento se asume que los n elementos de arreglo A tiene d d
gitos, donde el d
gito 1 es de inferior orden orden y el
d
gito d de alto orden.

Home Page
Title Page

Radix Sort (A, d)


1 for i 1 to d
2
do Ordenar A segn el
u
ndice i
con un ordenamiento estable

Contents

El algoritmo Radix Sort se usa para ordenar registros cuya clave es la


composicin de varios campos por ejemplo (ao-mes-d
o
n
a).

Page 11 of 100

Lemma 1:
Dado n nmeros en el cul cada d
u
a
gito puede tomar k posibles valores,
Radix Sort ordena correctamente los n nmeros en (d(n + k)).
u

Go Back
Full Screen
Close
Quit

Si d es constante y k = O(n):
Lemma 2:
Dado n nmeros de b bits y algn entero positivo r b, Radix-Sort
u
u
ordena correctamente los nmeros existentes en ((b/r)(n + 2r )).
u

Bucket Sort
El algoritmo se ejecuta en tiempo lineal, donde la entrada es tomada de una distribucin uniforme.
o
Supone que la entrada es generada por un proceso aleatorio que distribuye los elementos uniformente en el intervalo [0, 1).
Home Page
Title Page
Contents

Idea:
Dividir el intervalo [0, 1) en n subintervalos de igual tamao
n
(Buckets) y distribuir los n nmeros de entrada en los Buckets.
u
Luego se ordena cada Bucket por insercin y por ultimo, se cono

catenan los resultados de cada Bucket.

Page 12 of 100
Go Back
Full Screen
Close
Quit

Como la distribucin es uniforme, la probabilidad de que en cada


o
Bucket haya un solo nmero es alta.
u
La entrada al algoritmo Bucket es un arreglo A de n elementos y
cada elemento A[i] satisface que 0 A[i] < 1. Adems se necesita un
a
arreglo auxiliar B[0..n 1] de listas enlazadas y se asume que existe
un mecanismo para mantener esas listas.

Bucket Sort
Ejemplo de un arreglo de 10 nmeros :
u
A

.78

.17

.39

.26

.12
.21

Page 13 of 100
Go Back
Full Screen
Close
Quit

.72

.94

.21

.12

.23

10 .68

Contents

.26

.39

Title Page

.23

Home Page

.17

a)

.68
.72

.78

/
.94
b)

g 6: Operacin de Bucket-Sort
o
BucketSort (A)
1 n length[A]
2 for i 1 to n
3
do inserte A[i] en la lista B[ nA[i] ]
4 for i 0 to n 1
5
do ordene la lista B[i] por el algoritmo de ordenamiento por insercin
o
6 Concatene las listas B[0], . . . , B[n 1] en orden

Bucket Sort
El costo de ejecucin de todas las lineas del algoritmo excepto la lio
nea 5 toma O(n) en el peor caso.
Anlisis: El costo total del Bucket Sort depende de la l
a
nea 5.
n1

O(n2 )
i

T (n) = (n) +

Home Page

i=0
Title Page
Contents

Al aplicar la esperanza en ambos lados de la ecuacin :


o
E[T (n)] = E[(n) +

n1
2
i=0 O(ni )]

= (n) +
Page 14 of 100
Go Back
Full Screen
Close

n1
2
i=0 E[O(ni )]

= (n) +

n1
2
i=0 O(E[ni ])

(1)

Armamos que
E[n2 ] = 2 1/n (2)
i
Utilizando el valor esperado de la ecuacin (1), el costo de ejecucin del
o
o
Bucket Sort es :

Quit

= (n) + n O(2 1/n) = (n)

También podría gustarte