Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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
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
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
i=1
w( w1)
)
2
w2w
)
2
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
i=1
w (w1)
)
2
w w
)
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
n( n1)
)
2
n n
)
2
f ( n )=5+9 n+3 n
Peor Caso:
f ( n )=5+ 6+ ( 13 )
i=0
j=i +1
ni
f ( n )=5+ 6+ ( 13 )
i=0
j=1
f ( n )=5+6 n+13 n 13 ( i )
2
i=1
n( n1)
)
2
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
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+12 n+ 154 n )
2
15 2
15 2
n log 2 n+ n
4
4
15 2
n (log 2 n+1)
4
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)
( )
()
() ) (
por
lo
tanto
su
interpretacin
sera
la
siguiente:
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.