Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2 2 2
) 1 (
) (
2 1
1
1
1
n n n n
i i n M
n
i
n
i
max
1 n M
Anlisis y Diseo de Algoritmos Sorting-10
Mt odo de I nsercin
void Insercin( 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--
}
}
}
25 3 12 19 2 1 9 6
12 3 25
25
3 12
19
3 12 19 2 25
25
3 12 2 1 19
25 3 12 19 2 1 9
25 3 12 19 2 1 9 6
25 3 12 19
2 1
9 6
Arturo Daz Prez
Anlisis y Complejidad de Algoritmos 6
Anlisis y Diseo de Algoritmos Sorting-11
Mt odo de I nsercin
void Insercin( 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:
Movimientos:
1 n C
min
2 2 2
) 1 (
) (
2 1
1
1
1
n n n n
i i n C
n
i
n
i
max
0
min
M
2 2 2
) 1 (
2 1
1
n n n n
i M
n
i
max
+
+
n n
n
1
2
3
2
2
+
n n
r
n
r
n-1
r
1 2
r
1
2
3
n
La suma de profundidad es.
Arturo Daz Prez
Anlisis y Complejidad de Algoritmos 11
Anlisis y Diseo de Algoritmos Sorting-21
QuickSort : Caso Promedio
FNo existen elementos con llaves iguales; todos los
elementos tienen llaves diferentes.
FCuando se llama a quicksort( A, l, m ) todos los rdenes
(permutaciones) de A[l], ...,A[m] son igualmente probables.
FSi el ordenamiento inicial es r
1
, r
2
, ..., r
n
por el mtodo de
eleccin del pivote, ste puede ser r
1
r
2
.
FSuponga que existen i elementos ms pequeos que el
pivote.
FSi el pivote, v, es r
1
, uno de los i elementos ms pequeos
que el pivote est en la segunda posicin.
FSimilarmente, si el pivote es r
2
, uno de los i elementos
ms pequeos que el pivote est en la primera posicin
Anlisis y Diseo de Algoritmos Sorting-22
QuickSort : Caso Promedio
FEl pivote debe ser el (i+1)-simo elemento ms
pequeo, del arreglo.
La probabilidad de que cualquier elemento, tal como el (i+1)-
simo ms pequeo, aparezca en la primera posicin es 1/n.
Dado que ya apareci en la primera posicin, la probabilidad de
que el segundo elemento sea uno de los i elementos ms
pequeos de los n-1 restantes es i/(n-1).
La probabilidad de que el pivote aparezca en la primera posicin
y uno de los i elementos ms pequeos en la segunda posicin
es i/n(n-1).
FSimilarmente, la probabilidad de que el pivote aparezca
en la segunda posicin y uno de los i elementos ms
pequeos en la primera posicin es i/n(n-1)
Arturo Daz Prez
Anlisis y Complejidad de Algoritmos 12
Anlisis y Diseo de Algoritmos Sorting-23
] ) ( ) ( [
) 1 (
2
) (
1
1
2
+
n
i
i n T i T
n n
i
n c n T
QuickSort : Caso Promedio
FPor lo tanto, la probabilidad de que haya i elementos
ms pequeos que el pivote es 2i/n(n-1)
)] ( ) ( [ particin la de tiempo ) ( i n T i T P n T
i
+ +
void quicksort( int A, int i, int j )
{
int ind, k;
ind = pivote( A, i, j );
if( ind >= 0 ) {
k = particion(A, i, j, A[ind] );
quicksort( A, i, k-1 );
quicksort( A, k, j );
}
}
Anlisis y Diseo de Algoritmos Sorting-24
QuickSort : Caso Promedio
+
1
1
1
1
1
1
1
1
) ( ) (
2
1
) ( ) ( ) (
n
i
n
i
n
i
n
i
i n f i f i f i n f i f
,
`
.
|
+
+ +
1
1
2
)] ( ) ( [
) 1 (
) ( 2
)] ( ) ( [
) 1 (
2
2
1
) (
n
i
n c i T i n T
n n
i n
i n T i T
n n
i
n T
n c i T i n T
n
i n
i n T i T
n
i
n
n
i
2
1
1
)] ( ) ( [ )] ( ) ( [
1
1
+
,
`
.
|
+
+ +
+ +
1
1
2
)) ( ) ( (
1
1
n
i
n c i n T i T
n
FSe puede demostar que
FAplicndolo a la recurrencia con T(n), se tiene
, por lo tanto
] ) ( ) ( [
) 1 (
2
) (
1
1
2
+
n
i
i n T i T
n n
i
n c n T f(i)
Arturo Daz Prez
Anlisis y Complejidad de Algoritmos 13
Anlisis y Diseo de Algoritmos Sorting-25
QuickSort : Caso Promedio
+ +
1
1
2
)) ( ) ( (
1
1
) (
n
i
n c i n T i T
n
n T
1
1
2
) (
1
2
) (
n
i
n c i T
n
n T
FPor lo tanto,
FSe puede probar probar por induccin que
T(n) c nlog
2
n
para alguna constante c y para n 2.
Anlisis y Diseo de Algoritmos Sorting-26
QuickSort : Caso Promedio
FSupongamos que T(1) = c
1
FPara n = 2
T(2) 2c
1
+ 2c
2
= 2( c
1
+c
2
) log
2
2,
Si c c
1
+c
2
T(2) c2log
2
2
1
1
2
) (
1
2
) (
n
i
n c i T
n
n T
Arturo Daz Prez
Anlisis y Complejidad de Algoritmos 14
Anlisis y Diseo de Algoritmos Sorting-27
QuickSort : Caso Promedio
1
1
2
) (
1
2
) (
n
i
n c i T
n
n T
1
1
2
log
1
2
n
i
n c i ci
n
n c i i i i
n
c
n T
n
n
i
n
i
2
1
1
1
2
2
log log
1
2
) ( +
]
]
]
]
+
n c n i n i
n
c
n
n
i
n
i
2
1
1
1
2
2
log ) 1 (log
1
2
+
]
]
]
]
+
n c n
n
n
n n
n
n n
n
c
2
log 1
2 4
3
1
2 4
log 1
2 4 1
2
+
]
]
]
,
`
.
|
+
,
`
.
|
+
,
`
.
|
+
,
`
.
|
+
,
`
.
|
+
,
`
.
|
+
n c
n n
n
n n
n
c
2
2 2
4 8
log
2 2 1
2
+
]
]
]
,
`
.
|
+
,
`
.
|
n c
n
cn cn
n cn
2
) 1 ( 2 4
log +
QuickSort : Caso Promedio
FSi c 4c
2
, entonces, la suma del segundo y cuarto
trmino no es mayor que 0,
FYa que el tercer trmino es una contribucin negativa,
entonces T(n) cnlog
2
n.
n c
n n
n
n n
n
c
2
2
8
2
log
2
) 1 (
1
2
+
]
]
]
+
k
i
i
n s O
1
) (
+ +
k
i
i
k
i
i
s n O s kn O
1 1
) ( ) (
FSi s
i
es el nmero de valores diferentes del tipo t
i
.
Las lneas (2) y (3) toman un tiempo O( s
i
)
Las lneas (4) y (5) toman un tiempo O(n)
Las lneas (6) y (7) toman un tiempo O( s
i
).
FEl tiempo total del RadixSort es
void RadixSort()
{
(1) for( i = k; i >= 1; i-- ) {
(2) for( cada valor v del tipo t
i
)
(3) INICIA( B
i
[v] );
(4) for( cada elemento r en la lista A )
(5) Colocar r al final de la cubeta B
i
[v], donde v
es el valor para el campo f
i
de la llave de r.
(6) for( cada valor v del tipo t
i
, de menor a mayor)
(7) Concatenar B
i
[v] al final de A.
}
}
Anlisis y Diseo de Algoritmos Sorting-48
Arboles de Decisin
FUn rbol de decisin para un mtodo de ordenamiento
es un rbol binario en el cual sus nodos representan el
estado del mtodo despus de hacer algn nmero de
comparaciones.
FEl estado de un programa de ordenamiento es
esencialmente el conocimiento acerca de los
ordenamientos iniciales que se han obtenido por el
programa hasta ese momento.
Arturo Daz Prez
Anlisis y Complejidad de Algoritmos 25
Anlisis y Diseo de Algoritmos Sorting-49
Arboles de Decisin
abc, acb, bac,
bca, cab, cba
A[2] < A[1]?
b < a?
1
bac, bca, cba abc, acb, cab
2 3
A[3] < A[2]?
c < a?
bca, cba bac 4 5
A[3] < A[2]?
c < b?
acb, cab abc 6 7
A[2] < A[1]?
c < b?
bca cba 8 9
A[2] < A[1]?
c < a?
acb cab 10 11
Anlisis y Diseo de Algoritmos Sorting-50
Arboles de Decisin
Fsi se ordena una lista de elementos de tamao n, a
1
, a
2
, ..., a
n
existen n! =
n(n-1) (n-2) (2) (1) posibles ordenamientos correctos.
FLa longitud del camino ms largo de la raz a una hoja es una cota inferior
en el nmero de pasos ejecutados por el algoritmo en el peor caso.
FYa que un rbol binario con k hojas debe tener un camino de longitud al
menos log k, entonces, un algoritmo de ordenamiento que utiliza slo
comparaciones para ordenar una lista de n elementos debe tomar en el peor
caso un tiempo ( log n! ).
2
log
2 2
log
2
) ! log(
n
n
n n n
n
2
2 2
...
2 2
) 1 ( ) 2 ( ... ) 1 ( !
n
n n n n
n n n
,
`
.
|
n/2 veces
Arturo Daz Prez
Anlisis y Complejidad de Algoritmos 26
Anlisis y Diseo de Algoritmos Sorting-51
Arboles de Decisin
FEl ordenamiento por comparaciones requiere un tiempo ( n logn ) en el
peor caso
FEjercicio: Uno puede preguntarse si existe un algoritmo de ordenamiento
que utilice nicamente comparaciones y que toma un tiempo ( n logn ) en
el peor caso, pero en el caso promedio toma un tiempo O(n) o algo menor a
O(n log n).
FExiste tal algoritmo?