Está en la página 1de 73

ALGORITMICA III

Docente: Carlos A. Ruiz De La Cruz Melo
Correo: zorroculto69@hotmail.com
zorroculto69@gmail.com
Introducción al Análisis Algorítmico
PROMEDIO FINAL
Promedio final = (EP + EF + PP + PLAB) / 4

 EP: examen parcial
 EF: examen final
 PP: promedio de practicas ( PP = (PC1 + PC2)/ 2 )
 PLAB: promedio de laboratorios (PLAB= (LAB1 + LAB2)/2 )
TEMAS DE LA ASIGNATURA
PRIMERA PARTE
• Análisis de algoritmos
• Análisis de estructuras de control
• Análisis de estructuras de datos
• Divide y vencerás
• Algoritmos de clasificación y búsqueda
• Métodos de dispersión y colisión

SEGUNDA PARTE
• Algoritmos de retroceso
• Algoritmos voraces
• Programación dinámica
• Algoritmos geométricos
• Programación paralela
• Algoritmos probabilísticos
Los algoritmos son mas importantes que
los Lenguajes de Programación
INTRODUCCION

 Independiente : Del LP y de la máquina.
 Definido : De pasos claros y concretos.
 Finito : En el número de pasos que usará.
 Preciso : Cada paso arroja un cálculo correcto.
 Recibe datos : Debe poseer datos de entrada y salida
INTRODUCCION
Existen muchas alternativas de
solución algorítmica para un problema
y estas alternativas pueden diferir por:
 Número de pasos
 Estructuras
Como existen muchas alternativas de solución para un problema,
se debe seleccionar el algoritmo más eficiente, el mejor conjunto
de pasos, el que tarde menos en ejecutarse, que tenga menos
líneas de código.
COMPLEJIDAD
ALGORITMICA
El estudio de los casos en el cual se
requieren ciertas operaciones
matemáticas que establecen la
eficiencia teórica del algoritmo se
denomina Complejidad Algorítmica.
COMPLEJIDAD
ALGORITMICA
 No esta referido a la dificultad para diseñar
algoritmos.

 Es una medida de los recursos
computacionales para resolver un problema.

 La complejidad temporal es la medida del
tiempo para la ejecución de un programa.

 La complejidad espacial es la cantidad de
espacio de almacenamiento para realizar una
operación.

 Lo relevante es la medida de la complejidad
temporal en términos de los datos de entrada.
COMPLEJIDAD
ALGORITMICA
Un algoritmo será mas eficiente comparado
con otro, siempre que consuma menos
recursos, como el tiempo y espacio de
memoria necesarios para ejecutarlo.

La eficiencia de un algoritmo puede ser
cuantificada con las siguientes medidas de
complejidad:
 Complejidad Temporal o Tiempo de
ejecución: Tiempo de cómputo
necesario para ejecutar algún
programa.
 Complejidad Espacial: Memoria que
utiliza un programa para su ejecución
COMPLEJIDAD
TEMPORAL
 Suele ser la mas importante en la que
para cada problema determinaremos
una medida N, que llamaremos tamaño
de la entrada o número de datos a
procesar por el programa, intentaremos
hallar respuestas en función de dicha N.

 El concepto exacto que cuantifica N
dependerá de la naturaleza del
problema, si hablamos de un array se
puede ver a N como el rango del array,
para una matriz, el número de
elementos que la componen, pues cada
problema acarrea su propia lógica y
complejidad.
N
COMPLEJIDAD TEMPORAL
 La complejidad en función en tamaño de
entrada, no considera a la forma como se
presenta los datos, sino al conjunto en su
tamaño en sí.

 Es la función que da el tiempo y/o espacio
utilizado por el algoritmo en función del
tamaño de los datos de entrada.


 Sea M un algoritmo y N el conjunto de
valores de entrada. La complejidad de un
algoritmo M es una función T(N) que da el
tiempo y/o espacio necesario para la
ejecución del algoritmo, en función del
tamaño de los datos de entrada N.

n T(n)
TIEMPO DE
EJECUCION
El tiempo de Ejecución
de un programa se
mide en función de N
En la mayoría de los problemas el tiempo de
procesamiento de un algoritmo existente, se
duplica cuando se aumenta en una unidad el
número de parámetros ó variables del problema.
TIEMPO DE EJECUCION
La función T(n) se puede medir físicamente (ejecutando
el programa, reloj en mano ), o calcularse sobre el
código contando instrucciones a ejecutar y multiplicando
por el tiempo requerido por cada instrucción.
Asi , un trozo sencillo de programa
como:

S1
para i1 hasta n hacer
S2
finpara


T(n) t
1
+ t
2
* n
t
1
es el tiempo que lleva
ejecutar la serie S1 de
sentencias y t
2
el que lleve
la serie S2
Prácticamente todos los programas reales
incluyen alguna sentencia condicional,
haciendo que las sentencias efectivamente
ejecutadas dependan de los datos
concretos que se le presenten. Esto hace
que más que un valor T(N) debamos
hablar de un rango de valores:
TIEMPO DE
EJECUCION
Tmin(n) ≤T(n) ≤Tmax(n)
TIEMPO DE
EJECUCION
Tmin(n) ≤T(n) ≤Tmax(n)
los extremos son habitualmente conocidos
como “caso peor" y “caso mejor".

Entre ambos se hallará algún “caso
promedio" o más frecuente.
METODOS PARA MEDIR EL
TIEMPO DE EJECUCION
La técnica de benchmark considera una colección de entradas
típicas representativas de una carga de trabajo para un programa
Consiste en asociar a cada instrucción de un programa un número
que representa la fracción del tiempo total tomada para ejecutar
esa instrucción particular. Una de las técnicas más conocidas (e
informal) es la Regla 90-10 , que afirma que el 90% del tiempo de
ejecución se invierte en el 10% del código.
Benchmarking
Profiling
METODOS PARA MEDIR EL
TIEMPO DE EJECUCION
Análisis
Consiste en agrupar las entradas de acuerdo a su tamaño,
y estimar el tiempo de ejecución del programa en entradas
de ese tamaño, T(n) . Esta es la técnica que se estudiará
en el curso.
ESTUDIO DE
ALGORITMOS
El estudio de los algoritmos se puede
dividir en dos grandes categorías :

 Análisis de algoritmos
 Diseño de algoritmos
PRINCIPIO DE
INVARIANZA
Dado un algoritmo y dos implementaciones I
1
y I
2

(maquinas distintas o códigos distintos) que tardan
T
1
(n) y T
2
(n) respectivamente, el principio de
invarianza afirma que existe una constante real c>0
y un numero natural n
0
tales que para todo n ≥ n
0

se verifica que T
1
(n) ≤ cT
2
(n).
PRINCIPIO DE INVARIANZA
 El tiempo de ejecución de dos implementaciones
distintas de un algoritmo dado no va a diferir mas
que en una constante multiplicativa.

 Un algoritmo tarda un tiempo del orden T(n) si
existe una constante real c>0 y una
implementación I del algoritmo que tarda menos
que cT(n), para todo tamaño n de entrada.

 El comportamiento de un algoritmo puede variar
notablemente para diferentes secuencias de
entrada. Suelen estudiarse tres casos para un
mismo algoritmo :

 Mejor caso
 Peor caso
 Caso medio


 El análisis de un algoritmo analiza casos
extremos: el mejor y el peor.

 El mejor caso, es aquel en el que el
algoritmo utiliza la menor cantidad de
recursos (tiempo, por ejemplo) para
solucionar el problema; mientras que el
peor caso es aquel en el que el algoritmo
utiliza la mayor cantidad de recursos para
encontrar la solución.



ANALISIS DE
ALGORITMOS
 Caso Peor: Máximo valor que puede alcanzar T(n)
para cualquier tamaño de entrada y en base al
número de operaciones.

 Caso Mejor: Es el valor mínimo que puede alcanzar
T(n) para cualquier tamaño de entrada y en base al
número de operaciones.

 Caso Medio: Es el valor más esperado o valor
promedio que puede alcanzar T(n) para cualquier
tamaño de entrada y en base al número de
operaciones.
ANALISIS DE
ALGORITMOS
2 / ) CP CM ( C + =
Por ejemplo para el algoritmo de clasificación por inserción :

 El mejor caso ocurre cuando el arreglo de entrada
está ordenado ya que no debe desplazar ningún
elemento, en este caso el tiempo del algoritmo es de
orden lineal;.

 El peor caso ocurre cuando el arreglo de entrada está
en orden inverso porque en cada iteración debe
desplazar todos los elementos que están antes del
elemento a insertar, en este caso, el tiempo del algoritmo
es de orden cuadrático.

 El caso medio ocurre cuando el arreglo esta
desordenado aleatoriamente


ANALISIS DE
ALGORITMOS
ALGORITMOS
 Un algoritmo es una secuencia de
operaciones o pasos perfectamente
definidos, ordenados y finitos que nos
llevan a la solución de un problema.

 Un algoritmo resuelve un problema
cuando consigue la solución deseada
para cualquier instancia de la clase de
problema.

 Para la solución de un problema se toma
en cuenta un algoritmo de un conjunto
de algoritmos, dependiendo de las
características particulares del problema
(algoritmo seleccionado).
 Tipos de Algoritmos
 Simple, fácil de codificar y depurar.
(algoritmos pequeños)
 Eficiente y robusto. (resolver el problema
con el menor uso de recursos)

 Consideraciones de los algoritmos:
 La forma en que se presenta el problema,
etc..
 Requieran menor espacio de
almacenamiento, que depende de la
estructura de datos utilizada.
 Requiera menos tiempo de
procesamiento del algoritmo.
 Costo de programación.
 Costo de procesamiento
TIPOS Y CONSIDERACIONES
EN LOS ALGORITMOS
 Consideramos en su diseño:

Condiciones del problema (espacio, tiempo).
Limitaciones que se tiene (maquina,
programa, etc).
DISEÑO DE ALGORITMOS
TECNICAS MAS UTILIZADAS EN
EL DISEÑO DE ALGORITMOS
 Dividir para conquistar
 Algoritmos backtracting
 Programación dinámica
 Algoritmos golosos
 Algoritmos geometricos
 Eficiencia: Determina la cantidad de recursos
computacionales consumidos por el algoritmo. El
tiempo y el espacio utilizados en dicha solución
miden la mayor o menor eficiencia de un
algoritmo.

 Para la evaluación de algoritmos se toma en
cuenta:

 La eficiencia en cuanto al uso de recursos de
computación.
 La calidad de la solución obtenida.
EVALUACION DE ALGORITMOS
 Elementos a ser tomados en cuenta:

Eficacia (fin que se busca).
Eficiencia (tiempo y espacio).
PARAMETROS DE EFICIENCIA
 Por lo que solo se tomara en cuenta el
evaluar a los algoritmos por eficiencia:
 Tasa de crecimiento en tiempo
 Tasa de crecimiento en espacio


 Tiempo de ejecución: Tiene que ver
con el tiempo que tarda un programa
para ejecutarse (tiempo de
procesamiento).


 Espacio de memoria: Estudia la
cantidad de espacio que es necesario
para las operaciones durante la
ejecución del programa (espacio de
almacenamiento y procesamiento).
ALGORITMIA
 Es la ciencia que permite evaluar los
resultados de diferentes factores
externos sobre los algoritmos
disponibles, de tal modo que permita
seleccionar el que se ajuste más a las
condiciones particulares.

 Es la ciencia que nos permite indicar
la forma de diseñar un nuevo
algoritmo para una tarea concreta.

 Se define como el estudio de los
algoritmos.
UNA SIMPLE MULTIPLICACION EN
ENSAMBLADOR
mov al, 5
mov bl,3
mul bl

mov ah,02h
mov al ,ax
int 21h
al  al * bl
Multiplicar Byte por byte

 Para multiplicar dos
números de un byte, el
multiplicando esta en el
registro AL y el multiplicador
es un byte en memoria o en
otro registro.

 Para la instrucción MUL BL,
la operación multiplica el
contenido del AL por el
contenido del BL. El
producto generado esta en
el registro AL.
Funcion Potencia(x, y)
si (y = 0) entonces
retornar 1
sino
resultadox
para i1 hasta y-1 hacer
resultadoresultado * x
finpara
finsi
retornar resultado
finPotencia
Ejemplo 1
Cuánto cuesta el algoritmo en
tiempo ?.. La comparación del si se
ejecuta siempre y supongamos que
y no es cero (lo cual va a pasar la
mayoría de las veces). Se ejecuta
una asignación y luego y-1 veces
una multiplicación.
Se calcula x elevado a y donde se requiere que x>0
x, y son enteros
Funcion Potencia(x, y)
si (y = 0) entonces
retornar 1
sino
resultadox
para i1 hasta y-1 hacer
resultadoresultado * x
finpara
finsi
retornar resultado
finPotencia
T= C1+ C2+(y-1)*(C3+C2)
Ejemplo 1
C1 costo de comparar dos números
C2 costo de realizar una asignación
C3 costo de realizar una multiplicación
Se calcula x elevado a y donde se requiere que x>0
x, y son enteros
Ejemplo 1
Funcion Potencia(x, y)
si (y = 0) entonces
retornar 1
sino
resultadox
para i1 hasta y-1 hacer
resultadoresultado * x
finpara
finsi
retornar resultado
finPotencia
Por ejemplo:

si queremos hacer 2 elevado 8 (2^7) el
algoritmo calcula:

2 elevado 7=2*2*2*2*2*2*2
Observemos que el algoritmo no
es eficiente ya que realiza
demasiadas multiplicaciones.
Ejemplo 2
Se calcula x elevado a y donde se requiere que x>0
x, y son enteros
Funcion Potencia2(x, y)
si (y = 0) entonces
retornar 1
sino
r1
si ( y > 1) entonces
rPotencia2(x, y/2)
rr* r
finsi
si ( y modulo 2 = 1 ) entonces
r r * x
finsi
finsi
retornar r
finPotencia
Ejemplo 2
Funcion Potencia2(x, y)
si (y = 0) entonces
retornar 1
sino
r1
si ( y > 1) entonces
rPotencia2(x, y/2)
rr* r
finsi
si ( y modulo 2 = 1 ) entonces
r r * x
finsi
finsi
retornar r
finPotencia
Se calcula x elevado a y donde se requiere que x>0
x, y son enteros
r 1
rPotencia (2, 1)
r1
r1 x 2 2
retornar 2
r2x24
r4x2 8
retornar 8
Potencia(2, 3)
Ejemplo 2
r  1
rpotencia (2, 3)
r1
rpotencia(2, 1)
r1
r1x2
retornar 2
r2x2
r 4x2
retornar 8
r 8x8
r 64 x 2
retornar 128
Potencia(2, 7)
Funcion Potencia2(x, y)
si (y = 0) entonces
retornar 1
sino
r1
si ( y > 1) entonces
rPotencia2(x, y/2)
rr* r
finsi
si ( y modulo 2 = 1 ) entonces
r r * x
finsi
finsi
retornar r
finPotencia
Para valores más grandes de y , la
diferencia entre el primer y el
segundo algoritmo se hace mucho
más notoria
ANALISIS DE TIEMPO EN
ALGORITMOS ITERATIVOS
 Los algoritmos iterativos son aquellos
que se basan en la ejecución de
ciclos que pueden ser de tipo
for_while_repeat_etc

 La gran mayoría de los algoritmos
tienen alguna parte iterativa y muchos
son puramente iterativos

 Analizar el costo en tiempo de estos
algoritmos implica entender cuantas
veces se ejecuta cada una de las
instrucciones del algoritmo y cual es
el costo de cada una de las
instrucciones.
Ejemplo 3
¿
=
n
i
c
1
1
Para i 1 hasta n hacer
instruccion
finpara
Donde C1 es el costo de la instrucción que
se ejecuta en el ciclo El resultado de la
sumatoria es n * C1 lo cual es evidente
porque la instrucción dentro del ciclo se
ejecuta n veces.
Ejemplo 4
para i 1 hasta n hacer
para j 3 hasta m hacer
instruccion
finpara
finpara
¿ ¿¿
= = =
÷ = ÷ =
n
i
n
i
m
j
c m n c m c
1 1 3
1 * ) 2 ( * 1 * ) 2 ( 1
Cuando los ciclos dependen uno
del otro podemos aplicar la
misma técnica
para i 1 hasta n hacer
para j i hasta n hacer
instruccion
finpara
finpara
Cuando los ciclos dependen uno
del otro podemos aplicar la
misma técnica
Ejemplo 5
para i 1 hasta n hacer
para j i hasta n hacer
instruccion
finpara
finpara
¿ ¿ ¿
= = =
+ ÷ =
n
i
n
i
n
i j
c i n c
1 1
1 * ) 1 ( 1
¿
=
= + ÷ =
n
i
i n c
1
1 * 1
¿ ¿ ¿
= = =
+ ÷ =
n
i
n
i
n
i
i n c
1 1 1
) 1 ( * 1
¿ ¿ ¿
= = =
+ ÷ =
n
i
n
i
n
i
i n c
1 1 1
) 1 ( * 1
)
2
) 1 ( *
* ( * 1 n
n n
n n c +
+
÷ =
)
2
) 1 ( *
* ( * 1 n
n n
n n c +
+
÷ =
)
2
( * 1
2
n n
c
+
=
)
2
( * 1
2
n n
c
+
=
Solución
Ejercicio 1
funcion buscar(a, c): entero
1. j1
2. mientras (a[j] <c) y (j <n) hacer
3. jj+1
4. finmientras
5. si a[j]= c entonces
6. retornar j
7. sino
8. retornar 0
9. finsi
finbuscar
 En la linea 1 se ejecuta 1 OE(asignacion)
 En la linea 2 se ejecuta la condicion del bucle con un total de 4 OE (dos
comparaciones, un acceso al vector y un AND )
 La linea 3 esta compuesta por un incremento y una asignacion(2 OE)
 La linea 5 esta formada por una condicion y un acceso al vector(2 OE)
 La linea 6 contiene un retorno(1 OE) si la condicion se cumple
 La linea 8 contiene un retorno (1 OE) cuando la condicion del SI anterior
es falsa
Tiempo de ejecución
OE: operaciones elementales
Caso mejor:
 Linea 1: 1
 Linea 2(solo la primera mitad): 2
 Linea 5 : 2
 Linea 6 : 1

T(n)= 1 + 2 + 2+1 = 6
Caso peor:
 Linea 1:
 Linea 2(bucle se repite n-1 veces hasta que
se cumple la segunda condicion):
 Linea 5 hasta la 8:
¿
÷
=
+ = + + + + + =
1
1
2 6 1 2 ) 4 ) 2 4 ( (( 1 ) (
n
i
n n T
funcion buscar(a, c): entero
1. j1
2. mientras (a[j] <c) y (j <n) hacer
3. jj+1
4. finmientras
5. si a[j]= c entonces
6. retornar j
7. sino
8. retornar 0
9. finsi
finbuscar
Caso medio:

En el caso medio el bucle se ejecutara un
numero de veces entre 0 y n-1 y vamos a
suponer que cada una de ellas tiene la
misma probabilidad de suceder.

El numero medio de veces que se
efectuara el bucle es de:
¿
÷
=
÷
=
1
0
2
1 1
n
i
n
n
i
Tenemos que:
¿
÷
=
+ = + + + + + =
2 / ) 1 (
1
3 3 1 2 ) 4 ) 2 4 ( (( 1 ) (
n
i
n n T
funcion buscar(a, c): entero
1. j1
2. mientras (a[j] <c) y (j <n) hacer
3. jj+1
4. finmientras
5. si a[j]= c entonces
6. retornar j
7. sino
8. retornar 0
9. finsi
finbuscar
Funcion valor (n)
para i1 hasta n hacer
para j1 hasta 20 hacer
auxj*2
auxaux*i+r
finpara
finpara
retornar aux
finvalor

Ejercicio 2
Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
Funcion valor (n)
para i1 hasta n hacer
para j1 hasta 20 hacer
auxj*2
auxaux*i+r
finpara
finpara
retornar aux
finvalor

SOLUCION 2
Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
¿¿ ¿
= = =
+ = + = +
n
i j
n
i
n c c c c c c
1
20
1 1
) 2 1 ( 20 ) 2 1 ( 20 ) 2 1 (
Ejercicio 3
procedimiento valor (n)
k0
para i1 hasta n hacer
para j1 hasta i hacer
kk+1
finpara
finpara
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
 el bucle exterior se realiza N veces, mientras que el interior se
realiza 1, 2, 3, ... N veces respectivamente.

 En total, 1 + 2 + 3 + ... + N = N*(1+N)/2
Solución 3
procedimiento valor (n)
k0
para i1 hasta n hacer
para j1 hasta i hacer
kk+1
finpara
finpara
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
2
2
) 1 (
1 ) ( c
n n
c n T
+
+ =
Ejercicio 4
procedimiento algoritmo (n)
k0
para i1 hasta n hacer
para ji hasta n hacer
kk+1
finpara
finpara
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
Solución 4
procedimiento algoritmo (n)
k0
para i1 hasta n hacer
para ji hasta n hacer
kk+1
finpara
finpara
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
Observación:

i j # iteraciones

1 1 2 3 4 4
2 2 3 4 3
3 3 4 2
4 4 1

 En total, 1 + 2 + 3 + ... + N = N*(1+N)/2
2
2
) 1 (
1 ) ( c
n n
c n T
+
+ =
Ejercicio 5
procedimiento algoritmo (n)
k0
para i1 hasta n hacer
para ji+1 hasta j ≤ n hacer
kk+1
finpara
finpara
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
Solución 5
procedimiento algoritmo (n)
k0
para i1 hasta n hacer
para ji+1 hasta j ≤ n hacer
kk+1
finpara
finpara
finvalor

Dado el siguiente algoritmo,
determine su caso medio, mejor y
peor caso.
Observación: n = 3

i j # iteraciones

1 2 3 2
2 3 1
3

Observación: n = 4

i j # iteraciones

1 2 3 4 3
2 3 4 2
3 4 1
4



2
2
)) 1 ( 1 )( 1 (
1 ) ( c
n n
c n T
(
¸
(

¸

÷ + ÷
+ =
2
2
) 1 (
1 ) ( c
n n
c n T
(
¸
(

¸

÷
+ =
Ejercicio 6
procedimiento algoritmo (n)
k1
para i1 hasta n hacer
para j1 hasta m hacer
kk*m
finpara
para k1 hasta n*m hacer
kk+1
finpara
finpara
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
Ejercicio 6
procedimiento algoritmo (n)
k1
para i1 hasta n hacer
para j1 hasta m hacer
kk*m
finpara
para k1 hasta n*m hacer
kk+1
finpara
finpara
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
¿ ¿ ¿
= = =
+ + =
n
i
m
j
m n
k
c c c n T
1 1
*
1
) 3 2 ( 1 ) (
)) * ( 3 2 ( 1 ) ( m n c m c n c n T + + =
Ejercicio 7
procedimiento algoritmo (n)
k1
para i1 hasta n hacer
para ji hasta n*n hacer
kk*2
finpara
finpara
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
Solución 7
procedimiento algoritmo (n)
k1
para i1 hasta n hacer
para ji hasta n*n hacer
kk*2
finpara
finpara
finvalor

Dado el siguiente algoritmo,
determine su caso medio, mejor
y peor caso.
Observación: n = 3

i j # iteraciones =24

1 1……9 9
2 2…9 8
3 3..9 7


para n=3, nxn = 9, # iteraciones =45

1+2+3+4+…+9 = n*n(n*n+1)/2
2 )
2
) 1 ) * )(( * (
2
) 1 * ( *
( 1 ) ( c
n n n n n n n n n n
c n T
+ ÷ ÷
÷
+
+ =
2 )
2
2
( 1 ) (
2 3
c
n n n
c n T
+ ÷
+ = 2 24 1 2 )
2
3 3 ) 3 ( 2
( 1
2 3
c c c c + =
+ ÷
+ =
Ejercicio 8
procedimiento algoritmo (n)
p1
para i1 hasta n hacer
para ji hasta n hacer
para kj hasta n hacer
pp+1
finpara
finpara
finpara
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
Ejercicio 9
Funcion valor (n)
para i1 hasta n hacer
para j1 hasta i hacer
si i < j entonces
aux i + j
si ( i + 2 < j ) entonces
auxaux*2
finsi
finsi
finpara
finpara
retornar aux
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
Solución 9
Funcion valor (n)
para i1 hasta n hacer
para j1 hasta i hacer
si i < j entonces
aux i + j
si ( i + 2 < j ) entonces
auxaux*2
finsi
finsi
finpara
finpara
retornar aux
finvalor

Dado el siguiente algoritmo,
determine su caso medio,
mejor y peor caso.
Observación: n = 3

i j # iteraciones =6

1 1 1<1 no
2 1 2 2<1 no
2<2 no
3 1 2 3 3<1 no
3<2 no
3<3 no


2 1
2
) 1 ( *
) ( c c
n n
n T +
+
=
t0
para i1 hasta n
para j1 hasta i
para kj hasta n
t t+1
finpara
finpara
finpara
Ejercicio 10
Halle el tiempo de ejecución
Solución 10
t0
para i1 hasta n
para j1 hasta i
para kj hasta n
t t+1
finpara
finpara
finpara
Halle el tiempo de ejecución
2 *
6
) 1 2 )( 1 (
1 ) (
1
2
c
n n n
c i n T
n
i
+ +
+ = =
¿
=
Para:

n=4, son 30 iteraciones

n=3, son 14 iteraciones
Funcion algoritmo(n ): entero
entero: n, r, i, j
r 0
para i  1 hasta n - 1 hacer
para j  i + 1 hasta n hacer
para k  1 hasta j hacer
r  r + 1
finpara
finpara
finpara
retornar r
finalgoritmo
Que valores devuelve la siguiente
función?
Ejercicio 11
Para

5 ……….r = 40
50……….r = 41650
100……..r = 333300

SOLUCION
Solución 11
funcion algoritmo(n ) : entero
entero: n, r, i, j
r 1
para i  1 hasta n hacer
para j  i + 1 hasta n hacer
para k  i + j - 1 hasta n hacer
r  r * 2
finpara
finpara
finpara
finalgoritmo
Que valores devuelve la siguiente
función?
Ejercicio 12
Para

3 ……….r = 8
5………. r = 8192
6………. r = 4194304
7…….. r = 0
:
n…….. r =0
SOLUCION
Solución 12
p  0
para i 1 hasta n
p  p + i*i
para j  1 hasta p
escribir (a[p, j])
finpara
finpara
Ejercicio 13
Halle la cantidad de iteraciones de ejecución
p  0
para i 1 hasta n
p  p + i*i
para j  1 hasta p
escribir (a[p, j])
finpara
finpara
Solución 13
Observación: n = 3

i p # iteraciones =6

1 1 1
2 5 5
3 14 14
4 30 30

total  50

1
2
+ (1
2
+2
2
)+( 1
2
+2
2
+3
2
)+( 1
2
+2
2
+3
2
+4
2
)
4(1
2
)+3(2
2
)+2(3
2
)+1(4
2
)
Halle la cantidad de
iteraciones de ejecución
p  0
para i 1 hasta n
p  p + i*i
para j  1 hasta p
escribir (a[p, j])
finpara
finpara
Solución 13
1
2
+ (1
2
+2
2
)+( 1
2
+2
2
+3
2
)+( 1
2
+2
2
+3
2
+4
2
)

4(1
2
)+3(2
2
)+2(3
2
)+1(4
2
)

n(1
2
)+(n-1)( 2
2
) + (n-2)( 3
2
)…..[n-(n-1)]( n
2
)

n(1
2
+2
2
+3
2
+…+n
2
) - n
2
(n+1)
2
/4 + n(n+1)(2n+1)/6

n(n)(n+1)(2n+1)/6 - n
2
(n+1)
2
/4 + n(n+1)(2n+1)/6

[n
2
(n+1)(2n+1)/6 + n(n+1)(2n+1)/6] - n
2
(n+1)
2
/4

[n(n+1)(2n+1)/6] (n +1) - n
2
(n+1)
2
/4

n(n+1)
2
(2n+1)/6 - n
2
(n+1)
2
/4
iteraciones= n (n+1)
2
[ (2n+1)/6 – n/4]
factorizando
Halle la cantidad de
iteraciones de
ejecución
p  0
para i 1 hasta n
p  p + i*i
para j  1 hasta p
escribir (a[p, j])
finpara
finpara
Solución 13
iteraciones= n (n+1)
2
[ (2n+1)/6 – n/4]
iteraciones= 4 (4+1)
2
[ (2(4)+1)/6 – 4/4]

Iteraciones = 50
Halle la cantidad de iteraciones de ejecución
PREGUNTA DE LABORATORIO
Pruebe(tome tiempos) los siguientes algoritmos iterativos usando la POO:

1. Búsqueda binaria que divida en tres partes el arreglo siempre
2. Búsqueda secuencial en una lista doble

En java y en C++ (no use colecciones o plantillas)

Luego informe usted de lo siguiente:

1. Pruebe el principio de invarianza, tomando tiempos de las
implementaciones en dos Pc’s distintas de distinto fabricante o en dos
sistemas operativos distintos
2. En base a los tiempos calculados ¿En que lenguaje son mas rápidas las
implementaciones?

Observación
• El trabajo puede ser realizado entre dos alumnos como máximo
• Enviar al correo zorroculto69@hotmail.com
PREGUNTA DE LABORATORIO
Pruebe(tome tiempos) los siguientes algoritmos iterativos usando la POO:

1. Búsqueda binaria
2. Búsqueda secuencial

En java
• usando plantillas
• usando arreglos

En C++
• usando plantillas
• usando arreglos

Luego informe usted de lo siguiente:

1. Los programas en plantillas son mas rápidos que los usan arreglos?
2. Las plantillas en java son mas rápidas que en C++ o al revés?
3. Halle su ecuación de tiempo de ejecución en el mejor, peor y caso
promedio para ambos algoritmos.
 No interesa tanto nivel de detalle como para
individualizar el costo de cada sentencia. Además,
esto haría el análisis dependiente del lenguaje de
programación y de la plataforma de ejecución.

 Es importante aceptar el principio de invarianza, que
establece que un mismo algoritmo puede ser
implementado con diferencia de factores constantes
en distintos lenguajes o plataformas.

 No es superado buscar la eficiencia, puede signicar
la diferencia entre obtener las soluciones del
problema o no. El avance del hardware no tiene tanto
impacto como el avance en los algoritmos.

 Se necesitan herramientas matemáticas que
cumplan con los criterios anteriores.
CONCLUSION
BRASSARD, G. /
BRATLEY, T. “Fundamentos
de Algoritmia”. Prentice
Hall. 1997
CAIRÓ,
Osvaldo.“Estructuras
de Datos”. McGraw-Hill.
1998
KRUSE, Robert L.
“Estructura de Datos y
Diseño de Programas”.
Prentice Hall.
ALLEN WEISS, Mark
“Estructura de Datos y
Algoritmos”. Addison Wesley
JOYANES AGUILAR,
Luis “Estructura de
Datos - Teoría”
McGraw-Hill.
AHO, Alfred V.
“Estructura de Datos y
algoritmos” Addison
Wesley.
BIBLIOGRAFIA
CEVALLOS, Francisco “JAVA
2 Curso de programación”
Alfa y Omega
BIBLIOGRAFIA
DEITEL Y DEITEL
“Como programar en JAVA”.
Prentice Hall. 2004
LIPSCHUTZ, Seymur Ph.D.
“Estructura de Datos”. Serie
SCHAUM. McGraw-Hill. 1987