Vous êtes sur la page 1sur 13

Complejidad de algoritmos de Ordenacin

Jos Angel Meja Cadena


Instituto Politcnico Nacional
ESCOM
Ciudad de Mxico
Email:pepemejia@ymail.com

I.-RESUMEN
Una vez dispongamos de un algoritmo que funciona correctamente, es necesario
definir criterios para medir su rendimiento o comportamiento. Estos criterios se centran
en su simplicidad y en el uso eficiente de los recursos. Se piensa que un algoritmo
sencillo no es muy eficiente. Sin embargo, la sencillez es una caracterstica muy
importante a la hora de disear un algoritmo, pues facilita su anlisis. El uso eficiente
de los recursos, ste suele medirse en funcin de dos parmetros: el espacio y el
tiempo.

II.-PALABRAS CLAVE

Complejidad: Caracterstica que tiene un elemento especialmente por


componerse de varios elementos o partes.
Notacin: Sistema de signos convencionales que se utiliza en una disciplina
determinada para representar ciertos conceptos, principalmente en msica y en
matemticas.
Grado: Estado, valor o calidad susceptible de variacin dentro de una serie, un
proceso o una escala ordenados de forma creciente o decreciente, que se pone
en relacin con otros estados, valores o calidades de la misma serie, escala o
proceso.
Algoritmo: Conjunto ordenado de operaciones sistemticas que permite hacer
un clculo y hallar la solucin de un tipo de problemas.
Anlisis: Examen detallado de una cosa para conocer sus caractersticas o
cualidades, o su estado, y extraer conclusiones, que se realiza separando o
considerando por separado las partes que la constituyen.

III.-INTRODUCCIN
El Problema: La ordenacin o clasificacin de datos es una operacin consistente en
disponer un conjunto de datos en algn determinado orden con respecto a uno de los
campos de elementos del conjunto. En terminologa de ordenacin, el elemento por el
cual est ordenado un conjunto de datos (o se est buscando) se denomina clave. Una
coleccin de datos (estructura) puede ser almacenada en un archivo, un array (vector o
tabla), un array de registros, una lista enlazada o un rbol. Cuando los datos estn
almacenados en un array, una lista enlazada o un rbol, se denomina ordenacin

interna. Si los datos estn almacenados en un archivo, el proceso de ordenacin se


llama ordenacin externa.
Historia: El algoritmo de ordenamiento Shellsort fue publicado en 1959 por Donald L.
Shell, y fue uno de los primeros en romper la barrera del orden cuadrtico, aunque esto
en realidad se prob un par de aos despus de su publicacin.
Donald Knuth, en su libro The Art of Computer Programming, en el captulo
correspondiente a bsqueda y ordenacin, hace mencin de los algoritmos ms bsicos
y comunes tales como: Ordenacin Interna, Ordenacin por Insercin, Ordenacin por
intercambio, Ordenacin por seleccin, Ordenacin por Distribucin y Ordenacin por
fusin, estos algoritmos son descritos y desarrollados en lenguaje C, desmenuzando
cada uno de sus procesos, explicando su funcionamiento. Este es uno de los primeros
libros en abordar algoritmos de Ordenacin por medio de algn lenguaje de
programacin, en este caso lenguaje C.
Algoritmos diseados para resolver el problema:

Ordenacin
Ordenacin
Ordenacin
Ordenacin
Ordenacin
Ordenacin
Ordenacin
Ordenacin
Ordenacin
Ordenacin
Ordenacin

Interna.
por Insercin.
por intercambio.
por seleccin.
por Distribucin.
por fusin.
por Burbuja.
Shell.
Rpida.
Binsort
Radixsort

Importancia de resolver el problema: El estudio de algoritmos de ordenamiento tiene


una gran importancia dentro de la Ciencia de la Computacin, pues una buena
cantidad de los procesos realizados por medios computacionales requieren que sus
datos estn ordenados. Adems, el hecho de almacenar los datos de manera ordenada
permite implementar algoritmos de bsqueda muy rpidos (por ejemplo: bsqueda
binaria). Esta y muchas otras razones de fin prctico impulsaron el estudio y la
bsqueda de algoritmos de ordenamiento eficientes.
Algoritmos Seleccionados: Ordenacin por Intercambio, Ordenacin por Burbuja,
Ordenacin Shell.
Importancia de anlisis comparativo: El hacer una comparacin entre diferentes
algoritmos que tienen un mismo objetivo, permite tener un panorama amplio y fcil
para determinar que algoritmo es ms eficiente en 1 o ms casos, dependiendo de los
parmetros y el tipo de elementos que conformen dichos casos, los algoritmos se
adaptarn de mejor manera a algunos casos, mientras que en otros su rendimiento
ser menos eficiente.

IV.- COMPLEJIDAD ALGORITMO ORDENACIN INTERCAMBIO

void ordIntercambio(int a[], int n)


{
int i,j,aux;
for(i=0;i<=n-2;i++){
for(j=i+1;j<=n-1;j++){
if(a[i]>a[j])
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}
}
}
Mejor Caso:
Si todos los elementos ya estn ordenados de menor a mayor.
n2

n1

f ( n )=6+ 8+ ( 3 )
i=0

n2

f ( n )=6+ 8+
i=0

j=i+1

n1i

(3)

j=1

n2

f ( n )=6+ ( 8+ 3 n33 i )
i=0

n1

f ( n )=6+ ( 8+ 3 n33 i )
i=1

n1

f ( n )=6+8 n16+3 n 3 n3 n+3+ 3 ( i )


2

i=1

Cambio de variable w=n-1


w

f ( n )=6+8 n16+3 n2 3 n3 n+3+ 3 ( i )


i=1

f ( n )=6+8 n16+3 n2 3 n3 n+3+ 3(

w( w1)
)
2

f ( n )=6+8 n16+3 n2 3 n3 n+3+ 3(

w2w
)
2

Haciendo cambio de variable n-1=w

3
f ( n )=6+8 n16+3 n2 3 n3 n+3+ ( ( n1 )2n+1)
2
3
f ( n )=7 +2 n+3 n2 + ( n23 n+2)
2
3
9
f ( n )=7 +2 n+3 n2 + n2 n+3
2
2
9
5
f ( n )=4+ n2 n
2
2
Peor Caso:
Los nmeros estn ordenados de mayor a menor.
n2

n1

f ( n )=6+ 8+ ( 14 )
i=0

n2

f ( n )=6+ 8+
i=0

n2

j=i+1

n1i

j=1

( 14 )

f ( n )=6+ ( 8+ 14 n1414 i )
i=0

n1

f ( n )=6+ ( 8+ 14 n1414 i )
i=1

n1

f ( n )=6+8 n8+14 n 14 n14 n+14 +14 ( i )


2

i=1

Cambio de variable w=n-1


w

f ( n )=1220 n+14 n2+ 14 ( i )


i=1

f ( n )=1220 n+14 n2+ 14(

w (w1)
)
2

f ( n )=1220 n14 n2 +14 (

w w
)
2

Haciendo cambio de variable n-1=w

f ( n )=1220 n+14 n2+ 7( ( n1 )2n+1)


2

f ( n )=12+20 n+14 n +7 (n 3 n+ 2)
f ( n )=12+20 n+14 n2 +7 n 221 n+14
2

f ( n )=26+21 n n
V.- COMPLEJIDAD DE ALGORIMO ORDENACIN BURBUJA
void ordBurbuja(int a[], int n)
{
int i,j,aux;
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(a[j]>a[j])

{
aux=a[i];
a[j]=a[j+1];
a[j+1]=aux;
}
}
}
}
Mejor Caso:
Si todos los elementos ya estn ordenados de menor a mayor.
n

f ( n )=5+ 6+ ( 6 )
i=0

j=i +1

ni

f ( n )=5+ 6+ ( 6 )
i=0

j=1

f ( n )=5+ ( 6+ 6 n6 i )
i=1

f ( n )=5+6 n+6 n26 ( i )


i=1

f ( n )=5+6 n+6 n26(

n( n1)
)
2

f ( n )=5+6 n+6 n26(

n n
)
2

f ( n )=5+6 n+6 n23( n2n)


f ( n )=5+6 n+6 n23 n2 +3 n

f ( n )=5+9 n+3 n
Peor Caso:

Los nmeros estn ordenados de mayor a menor.


n

f ( n )=5+ 6+ ( 13 )
i=0

j=i +1

ni

f ( n )=5+ 6+ ( 13 )
i=0

j=1

f ( n )=5+ ( 6+13 n13 i )


i=1

f ( n )=5+6 n+13 n 13 ( i )
2

i=1

f ( n )=5+6 n+6 n213(

n( n1)
)
2

f ( n )=5+6 n+6 n213(

n2n
)
2

f ( n )=5+6 n+6 n

f ( n )=5+6 n+6 n

f ( n )=5+

13 2
(n n)
2
13 2 13
n+ n
2
2

25
1 2
n n
2
2

VI.- COMPLEJIDAD DE ALGORITMO ORDENACIN SHELL


void ordenacinshell(double a[], int n)
{
int intervalo,j,k;

intervalo=n/2;
while(intervalo>0){
for(i=interval;i<n;i++){
j=i-intervalo;
while(j>=0){
k=j+interval;
if(a[j]<=a[k])
j=-1;
else{
double temp;
temp=a[j];
a[j]=a[k];
a[k]=temp;
j -= interval;
}
}
}
Interval=intervalo/2;
}
}
Mejor Caso:
Si todos los elementos ya estn ordenados de menor a mayor.
log 2 n

n1

f ( n )=7+ 2+ ( 9 )
i=0

log 2 n

i=

n
2

n
2

f ( n )=7+ 2+ ( 9 )
i=0

i=1

log 2 n

n
2

f ( n )=7+ 2+ ( 9 )
i=0

log 2 n

i=1

9
f ( n )=7+ 2+ n
2
i=0

log 2 n+1

f ( n )=7+

i=1

(2+ 92 n)

9
9
f ( n )=7+2 log 2 n+2+ n log 2 n+ n
2
2
n+1
log 2
9
f ( n )=9+2 log 2 n+ n
2
Peor Caso:
Los nmeros estn ordenados de mayor a menor.
log 2 n

n1

n
2

f ( n )=7+ 2+ 6 + 15
i=0

log 2 n

i=

n
2

n1

i=0

log 2 n

i=

n
2

n1

15
n+15
2

))

n
2

15
n+15
2

))

f ( n )=7+ 2+ 9+
i=0

log 2 n

i=

n
2

f ( n )=7+ 2+ 9+
i=0

i=1

))

n
+1
2

f ( n )=7+ 2+ 6 + 15
i=0

))

i=1

log 2 n

9
15
15
f ( n )=7+ 2+ n+ n2 + n
2
4
2
i=0

log 2 n+1

f ( n )=7+

i=1

log 2 n+1

f ( n )=7+

i=1

(2+ 242 n+ 154 n )


2

(2+12 n+ 154 n )
2

f ( n )=7+2 log 2 n+2+12 n log 2 n+ 12n+

f ( n )=9+2 log 2 n+12 n(log2 n+1)+

15 2
15 2
n log 2 n+ n
4
4

15 2
n (log 2 n+1)
4

VII.- ANLISIS COMPARATIVO


Anlisis en Mejor Caso:
Podemos
observar
que:
Cuando
x<4.5,
A(x)
[ordenacin por intercambio]
es cota inferior de B(X) y C(x),
esto quiere decir que A(x) es
A(x)
ms efectivo para un x<4.5,
para ordenar un arreglo de 4 o
B(x)
menos
valores
el
mejor
algoritmo a utilizar es el
representado
por
A(x).
Mientras que cuando x>4.5,
C(x)
C(x) [ordenacin shell] es cota inferior de A(x) y B(x), esto quiere decir que C(x) es el
ms efectivo cuando x>4.5, cuando se tengan arreglos de 5 o ms valores, el mejor
algoritmo es el representado por C(x).
Anlisis en Peor Caso

A(x)
B(x)

C(x)

Podemos observar que: Cuando x<1, A(x), B(x) y C(x) tienen el mismo crecimiento, por
lo que los 3 algoritmos son igual de efectivos en valores x<1, pero estos algoritmos no
aceptan valores menores a 1, debido a que ordenan 2 o ms elementos. Mientras que
cuando x>1, B(x)[ordenacin Burbuja] es cota inferior de A(x) y C(x), esto quiere decir
que B(x) es el algoritmo ms efectivo de los 3 algoritmos en el peor de los casos,
mientras que A(x) y B(x), presentan un crecimiento similar, por lo que el uso de
cualquiera de los 2 algoritmos [Ordenamiento Intercambio y Shell] en el peor de los
casos es indistinto, aunque como ya se mencion, el algoritmo representado por B(x)
es el ms efectivo para realizar la tarea en el peor de los casos.
Anlisis asinttico de la complejidad de los algoritmos

d
d
(26+21 n2n)
( 42 n1)
A (n)
d (n)
d (n)
26+21 n n
42
lim
=lim
=lim
= lim
=lim
=
d
25
n B(n)
n
n
n 1
25
1 2 n d
25
1 2
(( )n)
5+( )n
n
(5+( )n
n)
d ( n) 2
2
2
2
2
d (n)

( )

()

() ) (

Este lmite donde se compara el comportamiento de 2 funciones, tiene una


peculiaridad, mientras que en la grfica observamos que A(n) [A(x) en la grfica] es
cota superior de B(n) [B(x) en la grfica], esperaramos que el resultado del lmite sea

por

lo

tanto

su

interpretacin

sera

la

siguiente:

A ( n ) ( B ( n ) ) y A ( n ) ( B ( n )) , pero al resolver el lmite, el resultado es -42, esto


se debe a que ambas funciones tienen el mismo grado (2 grado). En la teora sabemos
que el grupo de

en la notacin asinttica es una cota de orden exacto, esto quiere

decir que las funciones a comparar se comportan de manera igual o similar, se observa
fcilmente comparando el grado de las funciones a comparar.

( )

lim

26+21 n n
=lim
= lim
( CA (n)
)
(n)
15
( 9+2 log n+12 n(log n+1)+ n (log n+1))
n

(4)

d
(26+21
d (n)

d
2
12
(
+
+12(log 2 n+1)+
d ( n ) nlog2 log 2

En este lmite observamos que a diferencia del lmite anterior, el resultado corresponde
a lo observado en la grfica, A(n) [A(x) en la grfica] es cota inferior de C(n) [C(x) en la
grfica], y el resultado del lmite es 0, esto indica que A(n) es cota inferior de C(n).

( A ( n ) )
C(n)

( A ( n ) )

O( A ( n ) )

B(n)

VII.-CONCLUSIONES
El anlisis de complejidad de algoritmos es una herramienta muy til para la resolucin
de problemas, determinando que tipo de algoritmo podra ser ms el ms adecuado
para las condiciones del problema que se pueda presentar, se tiene en cuenta que
cada problema se puede resolver de diferentes formas, en otras palabras varios
algoritmos pueden responder un solo problema, pero no significa que todos los
algoritmos nos brindan el mismo nivel de eficiencia, en este caso se debe seleccionar
uno que ofrezca el mejor rendimiento para resolver el problema, basado en las
caractersticas del problema, pero Cmo se sabe cul es el ms eficiente?, es para
esto que se realiza un anlisis de complejidad, se comparan los comportamientos de
los algoritmos cuando se incrementan o se disminuyen las entadas y/o salidas, de esta
manera al saber cmo se comportan los algoritmos segn ciertos casos, es posible
seleccionar el algoritmo que mejor convenga para resolver el o los problemas
correspondientes con mayor rapidez y eficacia.

IX.- REFERENCIAS
[1] Donald Knuth. (1969). The Art of Computer Programming Vol.3. Captulo 5:
Sorting EU: Addison-Wesley.
[2] Luis Joyanes Aguilar, Luis Rodrguez Baena, Matilde Fernndez Azuela (1996),
Fundamentos de Programacin, Captulo 10: Ordenacin, Bsqueda e intercalacin.
Espaa: McGraw-Hill.
[3] Sara Baase, Allen Van Gelder. Algoritmos Computacionales. Introduccin al anlisis
y diseo. Captulos: 1-4. EU: Addison-Wesley.
[4] R.C.T. Lee, S. S. Tseng, R. C. Chang, T. Tsai. Introduccin al diseo y anlisis de
algoritmos. Capitulos:1 y 2. McGrawHill.

[5] Ing. Pablo Augusto Sznajdleder. Algoritmos a Fondo. Capitulos: 1-3. Alfaomega.