You are on page 1of 8

Alumna: Alicia Snchez

Centro: UNED-Las Rozas (Madrid)




Resumen de programacin 3

Tema 2. Algoritmia elemental.

























Resumen tema 2 Curso 2007/08 Pgina 2 de 8

ndice:
2.3. La eficiencia de los algoritmos ... 3
2.4. Anlisis de caso medio y caso peor.. 4
2.5. Qu es una operacin elemental? .......... 7
2.6. Ms factores de tiempo ... 8




























Bibliografa:
Se ha tomado apuntes del libro:
Fundamentos de algoritmia. G. Brassard y P. Bratley
Resumen tema 2 Curso 2007/08 Pgina 3 de 8

Nos hemos saltado los apartados 2.1 y 2.2, que corresponden con la introduccin y
problemas y ejemplares respectivamente, ya que lo siguiente es ms propio del tema.
Por ello, empezaremos por el 2.3. Por otro lado, comentar que este tema ha sido
costoso el resumirlo debido a que el resto de temas sern ms complicados de
estudiar y conviene entender bien el concepto bsico de la algoritmia, que junto con
el tema 1 no tiene ejercicios.
2.3. La eficiencia de los algoritmos.
Cuando tengamos que resolver un problema es posible que estn disponibles
varios algoritmos adecuados. Deseamos seleccionar el mejor posible, tal y como
vimos en la introduccin (tema 1). Para ello tendremos dos enfoques:
- El enfoque emprico (o a posteriori): Consiste en programar las tcnicas
comparadoras e ir probndolas en distintos casos con ayuda de una
computadora.
- El enfoque terico (o a priori): Es el que nosotros propugnamos en este
libro. Consiste en determinar matemticamente la cantidad de recursos
necesarios para cada uno de los algoritmos como funcin del tamao de
los casos considerados. Nos interesarn en especial estos recursos:
1. Tiempo de computacin: Es el que usaremos a lo largo del libro,
por tanto, ser el ms importante a tener en cuenta.
2. Espacio de almacenamiento: Indica el espacio que ocupa un
algoritmo. No lo emplearemos en este tema y posteriores.
Compararemos los algoritmos tomando como base sus tiempos de ejecucin.
Cuando hablemos de la eficiencia de un algoritmo querremos decir lo rpido que
se ejecuta y en esto consistir nuestro anlisis del coste (temas 3 y 4).
Utilizaremos la palabra tamao para indicar cualquier entero que mida de alguna
forma el nmero de componentes de un ejemplar. Daremos algunas veces la
eficiencia de nuestros algoritmos en trminos del valor del ejemplar que estemos
considerando en lugar de considerar su tamao.
La ventaja de la aproximacin terica es que no depende ni de la computadora
que se est utilizando ni del lenguaje de programacin ni siquiera de las
habilidades del programador.
Si deseamos medir la eficiencia de un algoritmo en trminos del tiempo que
necesita para llegar a una respuesta, entonces no existe una opcin tan evidente.
Se puede expresar en segundos, al no disponer de una computadora estndar a la
cual referir todas las medidas.

Los factores para determinar el tiempo necesario del algoritmo son:
1. Implementacin: Depende de:
Plataforma.
Lenguaje.
Compilador.
2. Tamao del problema: Un problema grande necesitar ms tiempo.
3. Contenido de los datos: Cmo vienen ordenados los datos.
Resumen tema 2 Curso 2007/08 Pgina 4 de 8

Al no poder referir todas las medidas en una computadora estndar tendremos
este principio:
Principio de invarianza: Corresponde con el primer factor antes citado, que
es la implementacin.
Definicin: Dos implementaciones distintas de un mismo algoritmo no
diferirn en su eficiencia en ms de una constante multiplicativa. Si dos
implementaciones del mismo algoritmo necesitan t
1
(n) y t
2
(n) segundos,
respectivamente, para resolver un cado de tamao n, entonces siempre existen
constantes positivas c y d, tales que t
1
(n) c t
2
(n) y t
2
(n) J t
1
(n)
siempre que n sea suficientemente grande:
Implementacin 1 t
1
(n) t
1
(n) c t
2
(n)
Implementacin 2 t
2
(n) t
2
(n) J t
1
(n)
El principio sigue siendo cierto sea cual fuere la computadora utilizada para
implementar el algoritmo. Para un problema ms grande va a tardar lo mismo
en la misma proporcin, salvo por una constante multiplicativa, denominada
en estos casos constante oculta.

2.4. Anlisis de caso medio y caso peor
Analizaremos el coste de este algoritmo, que corresponde con el de la ordenacin
por insercin:
procedimiento insertar I([1..n])
para i 2 hasta n hacer
x I[i]; ] i 1;
mientras ] >0 y x <I[]] hacer
I[] +1] I[]];
] ] 1;
fmientras
I[] +1] x
fpara
fprocedimiento
La nomenclatura empleada ser:
: Asignaciones.
mientras .. fmientras, para .. fpara,: Bucles mientras, para,

Como norma general para analizar el coste realizaremos estos pasos:
1. Anlisis del funcionamiento: Simularemos su funcionamiento, usando
para ello ejemplos de distintos valores de vectores,
2. A continuacin, analizaremos el coste propiamente dicho.




Resumen tema 2 Curso 2007/08 Pgina 5 de 8

En nuestro ejemplo tendremos lo siguiente, aunque lo retomaremos en el
resumen del tema 7, no obstante lo veremos en este apartado:
1. Anlisis del funcionamiento:
i

Parte ordenada j Parte desordenada

La idea bsica es insertar un elemento dado en el lugar que le
corresponda de una parte ordenada del vector. En un primer paso, se
considera que la parte ordenada est formada por el primer elemento del
vector. Entonces, se elige el elemento de la posicin 2 y se inserta en la
parte ordenada, de manera que si debe estar en la posicin anterior se
desplaza el elemento de la posicin 1 hacia la derecha, hacindole sitio, y
se inserta en la posicin 1. Como puede observarse se requerir de una
variable temporal que almacene el elemento a insertar. Seguidamente, se
considera la parte del vector o[1] o[2] ordenada, se elige el tercer
elemento y se siguen las mismas opciones. Este mtodo se repite hasta
que el ltimo elemento o[n] haya sido tratado.
En resumen, el algoritmo puede describirse de la siguiente forma:
- Tomar un elemento en la posicin i.
- Buscar en su lugar en las posiciones anteriores.
- Mover hacia la derecha los restantes.
- Insertarlo.

2. Anlisis del coste:
El algoritmo de ordenacin por insercin es:
procedimiento insertar I([1..n])
(1) para i 2 hasta n hacer
(2) x I[i]; ] i 1;
(3) mientras ] >0 y x <I[]] hacer
(4) _
I[] +1] I[]]
] ] 1

fmientras
(5) I[] +1] x
fpara
fprocedimiento

Tendremos en cuenta estos tiempos:
t
u
: Asignacin t
c
: Comparacin t

: Resta
t

: Incremento t

: Acceso al vector



Resumen tema 2 Curso 2007/08 Pgina 6 de 8

Las distintas sentencias del algoritmo anterior son:
(1) to + (n 1) ti + n tc
siendo:
t
u
: Asigna i el valor 2 (i 2).
t

: Incrementa n 1 veces (de 2 a n).


t
c
: Compara de 2 a n, incluido n, que sale del bucle.

(2) (2 t
u
+t

+t

) (n 1)
siendo:
t
u
: Significa que hay dos asignaciones (x I[i] y ] i 1)
t

: Indica acceso al vector (I[i]).



(3) (2 t
c
+t

) N(i,I)
(4) (2 t

+2 t
u
+t

+t

) N(i,I)
siendo:
N(i,I): Nmero de iteraciones del bucle mientras en cada
pasada del bucle para. Depende de i y del vector T, por lo que
ser variable.

El tiempo total del bucle mientras ser la suma de (3) y (4):
(3) +(4) (3 t

+2 t
u
+2 t
c
+t

+t

) N(i,I)

(5) (t

+t

+t
u
) (n 1)

Hemos visto los tiempos que emplean. Luego analizaremos los casos
peores y mejores, aunque el caso promedio ya veremos que no es tan fcil
hallarlo, ya que requiere un cono cimiento a priori acerca de la
distribucin de los casos que hay que resolver. Esto suele ser un requisito
poco realista.
Normalmente, consideraremos el caso peor del algoritmo, esto es, para
cada tamao de caso slo consideraremos aqullos en los cuales el
algoritmo requiera ms tiempo, a no ser que se indique lo contrario. Suele
ser ms difcil analizar el comportamiento medio del algoritmo que
hacerlo en el caso peor.






Resumen tema 2 Curso 2007/08 Pgina 7 de 8


2.5. Qu es una operacin elemental?
Corresponder tambin como el principio de invarianza con el primer factor
visto previamente, recordemos que era la implementacin.
Definicin: Una operacin elemental es aqulla cuyo tiempo de ejecucin
puede ser acotada superiormente por una constante que slo depender de la
implementacin particular usada: de la mquina, del lenguaje de programacin,
etc.
De esta manera, la constante no depende ni del tamao ni de los parmetros del
ejemplar que se est considerando. Pueden ser operaciones tales como sumas,
restas, multiplicaciones, divisiones, accesos a un vector, operaciones booleanas,
comparaciones.
Veremos al igual que el anterior algoritmo esta parte en el tema 7, no obstante
hay que hacer hincapi en la definicin, porque se usa mucho y es importante.

Un ejemplo: Supongamos que cuando se analiza algn algoritmo, encontramos
que para resolver un caso de un cierto tamao se necesita efectuar a adiciones, m
multiplicaciones y s instrucciones de asignacin.
Supongamos tambin que se sabe que una suma nunca requiere ms de t
u
ms.,
que una multiplicacin nunca requiere ms de t
m
ms. y que una asignacin
nunca requiere ms de t
s
ms., donde t
u
, t
m
y t
s
son constantes que dependen de
la mquina utilizada. El tiempo total T requerido por nuestro algoritmo estar
acotado por:

I o t
u
+m t
m
+s t
s
max (t
u
, t
m
, t
s
) (o +m+s)

siendo:
o,m,s: Variables segn la implementacin.
t
u
,t
m
,t
s
: Constantes que cambiarn de una implementacin a otra.

T estar acotado por un mltiplo constante del nmero de operaciones
elementales (ejecutadas a coste unitario) que hay que ejecutar.
En conclusin, el primer factor del tiempo de ejecucin visto anteriormente, que
es la implementacin no afectar mucho al coste del algoritmo.









Resumen tema 2 Curso 2007/08 Pgina 8 de 8


2.6. Ms factores de tiempo
En cuanto a los otros factores del tiempo de algoritmo trataremos los dos que
nos quedan los siguientes (aadido del autor, tomando apuntes de otra persona).
Recordemos que hemos visto previamente la implementacin (apartado 2.3):

El contenido de los datos:
En nuestro ejemplo de la ordenacin por insercin tendremos estos casos:

1. Vector ya ordenado:
i

Parte ordenada j Parte desordenada

Nunca se entrar en el bucle mientras (mientras ] >0 y
x <I[]]) por no cumplirse la condicin de x <I[]]. Por tanto,
N(|,T) =.
Recordemos que N(i,I) es el nmero de iteraciones del bucle
mientras en cada pasada del bucle para.

2. Vector completamente desordenado (de mayor a menor):
Se recorrern todos los elementos de la parte desordenada hasta
encontrar su posicin. En este caso, N(|,T) =|.

Tamao del problema:
Siguiendo el ejemplo anterior tendremos:
(1) Coste n
(2) Coste n
Coste
- Caso mejor 0
(3) +(4)
- Caso peor i
n
=2




(5) Coste n

Caso mejor: Vector ya ordenado. Tiene coste lineal (n).
Caso peor: Vector completamente desordenado.
n + i costc n
2
( i
n
=2
n
=2
=
n(n+1)
2
n
2
)
Caso promedio: En general haremos el anlisis para el caso peor. No es
normal hacerlo para el caso promedio.