Вы находитесь на странице: 1из 73

ALGORITMICA III

Docente: Carlos A. Ruiz De La Cruz Melo


Correo: zorroculto69@hotmail.com
zorroculto69@gmail.com
Introduccin al Anlisis Algortmico
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
Anlisis de algoritmos
Anlisis de estructuras de control
Anlisis de estructuras de datos
Divide y vencers
Algoritmos de clasificacin y bsqueda
Mtodos de dispersin y colisin

SEGUNDA PARTE
Algoritmos de retroceso
Algoritmos voraces
Programacin dinmica
Algoritmos geomtricos
Programacin paralela
Algoritmos probabilsticos
Los algoritmos son mas importantes que
los Lenguajes de Programacin
INTRODUCCION

Independiente : Del LP y de la mquina.
Definido : De pasos claros y concretos.
Finito : En el nmero de pasos que usar.
Preciso : Cada paso arroja un clculo correcto.
Recibe datos : Debe poseer datos de entrada y salida
INTRODUCCION
Existen muchas alternativas de
solucin algortmica para un problema
y estas alternativas pueden diferir por:
Nmero de pasos
Estructuras
Como existen muchas alternativas de solucin para un problema,
se debe seleccionar el algoritmo ms eficiente, el mejor conjunto
de pasos, el que tarde menos en ejecutarse, que tenga menos
lneas de cdigo.
COMPLEJIDAD
ALGORITMICA
El estudio de los casos en el cual se
requieren ciertas operaciones
matemticas que establecen la
eficiencia terica del algoritmo se
denomina Complejidad Algortmica.
COMPLEJIDAD
ALGORITMICA
No esta referido a la dificultad para disear
algoritmos.

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

La complejidad temporal es la medida del
tiempo para la ejecucin de un programa.

La complejidad espacial es la cantidad de
espacio de almacenamiento para realizar una
operacin.

Lo relevante es la medida de la complejidad
temporal en trminos 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
ejecucin: Tiempo de cmputo
necesario para ejecutar algn
programa.
Complejidad Espacial: Memoria que
utiliza un programa para su ejecucin
COMPLEJIDAD
TEMPORAL
Suele ser la mas importante en la que
para cada problema determinaremos
una medida N, que llamaremos tamao
de la entrada o nmero de datos a
procesar por el programa, intentaremos
hallar respuestas en funcin 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 nmero de
elementos que la componen, pues cada
problema acarrea su propia lgica y
complejidad.
N
COMPLEJIDAD TEMPORAL
La complejidad en funcin en tamao de
entrada, no considera a la forma como se
presenta los datos, sino al conjunto en su
tamao en s.

Es la funcin que da el tiempo y/o espacio
utilizado por el algoritmo en funcin del
tamao 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 funcin T(N) que da el
tiempo y/o espacio necesario para la
ejecucin del algoritmo, en funcin del
tamao de los datos de entrada N.

n T(n)
TIEMPO DE
EJECUCION
El tiempo de Ejecucin
de un programa se
mide en funcin de N
En la mayora de los problemas el tiempo de
procesamiento de un algoritmo existente, se
duplica cuando se aumenta en una unidad el
nmero de parmetros variables del problema.
TIEMPO DE EJECUCION
La funcin T(n) se puede medir fsicamente (ejecutando
el programa, reloj en mano ), o calcularse sobre el
cdigo contando instrucciones a ejecutar y multiplicando
por el tiempo requerido por cada instruccin.
Asi , un trozo sencillo de programa
como:

S1
para i1 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
Prcticamente 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 ms 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 algn caso
promedio" o ms frecuente.
METODOS PARA MEDIR EL
TIEMPO DE EJECUCION
La tcnica de benchmark considera una coleccin de entradas
tpicas representativas de una carga de trabajo para un programa
Consiste en asociar a cada instruccin de un programa un nmero
que representa la fraccin del tiempo total tomada para ejecutar
esa instruccin particular. Una de las tcnicas ms conocidas (e
informal) es la Regla 90-10 , que afirma que el 90% del tiempo de
ejecucin se invierte en el 10% del cdigo.
Benchmarking
Profiling
METODOS PARA MEDIR EL
TIEMPO DE EJECUCION
Anlisis
Consiste en agrupar las entradas de acuerdo a su tamao,
y estimar el tiempo de ejecucin del programa en entradas
de ese tamao, T(n) . Esta es la tcnica que se estudiar
en el curso.
ESTUDIO DE
ALGORITMOS
El estudio de los algoritmos se puede
dividir en dos grandes categoras :

Anlisis de algoritmos
Diseo de algoritmos
PRINCIPIO DE
INVARIANZA
Dado un algoritmo y dos implementaciones I
1
y I
2

(maquinas distintas o cdigos 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 ejecucin 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
implementacin I del algoritmo que tarda menos
que cT(n), para todo tamao 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 anlisis 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 solucin.



ANALISIS DE
ALGORITMOS
Caso Peor: Mximo valor que puede alcanzar T(n)
para cualquier tamao de entrada y en base al
nmero de operaciones.

Caso Mejor: Es el valor mnimo que puede alcanzar
T(n) para cualquier tamao de entrada y en base al
nmero de operaciones.

Caso Medio: Es el valor ms esperado o valor
promedio que puede alcanzar T(n) para cualquier
tamao de entrada y en base al nmero de
operaciones.
ANALISIS DE
ALGORITMOS
2 / ) CP CM ( C + =
Por ejemplo para el algoritmo de clasificacin por insercin :

El mejor caso ocurre cuando el arreglo de entrada
est ordenado ya que no debe desplazar ningn
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 iteracin debe
desplazar todos los elementos que estn antes del
elemento a insertar, en este caso, el tiempo del algoritmo
es de orden cuadrtico.

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 solucin de un problema.

Un algoritmo resuelve un problema
cuando consigue la solucin deseada
para cualquier instancia de la clase de
problema.

Para la solucin de un problema se toma
en cuenta un algoritmo de un conjunto
de algoritmos, dependiendo de las
caractersticas particulares del problema
(algoritmo seleccionado).
Tipos de Algoritmos
Simple, fcil de codificar y depurar.
(algoritmos pequeos)
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 programacin.
Costo de procesamiento
TIPOS Y CONSIDERACIONES
EN LOS ALGORITMOS
Consideramos en su diseo:

Condiciones del problema (espacio, tiempo).
Limitaciones que se tiene (maquina,
programa, etc).
DISEO DE ALGORITMOS
TECNICAS MAS UTILIZADAS EN
EL DISEO DE ALGORITMOS
Dividir para conquistar
Algoritmos backtracting
Programacin dinmica
Algoritmos golosos
Algoritmos geometricos
Eficiencia: Determina la cantidad de recursos
computacionales consumidos por el algoritmo. El
tiempo y el espacio utilizados en dicha solucin
miden la mayor o menor eficiencia de un
algoritmo.

Para la evaluacin de algoritmos se toma en
cuenta:

La eficiencia en cuanto al uso de recursos de
computacin.
La calidad de la solucin 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 ejecucin: 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
ejecucin 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 ms a las
condiciones particulares.

Es la ciencia que nos permite indicar
la forma de disear 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
nmeros de un byte, el
multiplicando esta en el
registro AL y el multiplicador
es un byte en memoria o en
otro registro.

Para la instruccin MUL BL,
la operacin 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
resultadox
para i1 hasta y-1 hacer
resultadoresultado * x
finpara
finsi
retornar resultado
finPotencia
Ejemplo 1
Cunto cuesta el algoritmo en
tiempo ?.. La comparacin del si se
ejecuta siempre y supongamos que
y no es cero (lo cual va a pasar la
mayora de las veces). Se ejecuta
una asignacin y luego y-1 veces
una multiplicacin.
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
resultadox
para i1 hasta y-1 hacer
resultadoresultado * x
finpara
finsi
retornar resultado
finPotencia
T= C1+ C2+(y-1)*(C3+C2)
Ejemplo 1
C1 costo de comparar dos nmeros
C2 costo de realizar una asignacin
C3 costo de realizar una multiplicacin
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
resultadox
para i1 hasta y-1 hacer
resultadoresultado * 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
r1
si ( y > 1) entonces
rPotencia2(x, y/2)
rr* 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
r1
si ( y > 1) entonces
rPotencia2(x, y/2)
rr* 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
rPotencia (2, 1)
r1
r1 x 2 2
retornar 2
r2x24
r4x2 8
retornar 8
Potencia(2, 3)
Ejemplo 2
r 1
rpotencia (2, 3)
r1
rpotencia(2, 1)
r1
r1x2
retornar 2
r2x2
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
r1
si ( y > 1) entonces
rPotencia2(x, y/2)
rr* r
finsi
si ( y modulo 2 = 1 ) entonces
r r * x
finsi
finsi
retornar r
finPotencia
Para valores ms grandes de y , la
diferencia entre el primer y el
segundo algoritmo se hace mucho
ms notoria
ANALISIS DE TIEMPO EN
ALGORITMOS ITERATIVOS
Los algoritmos iterativos son aquellos
que se basan en la ejecucin de
ciclos que pueden ser de tipo
for_while_repeat_etc

La gran mayora 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 instruccin que
se ejecuta en el ciclo El resultado de la
sumatoria es n * C1 lo cual es evidente
porque la instruccin 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 tcnica
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 tcnica
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
+
=
Solucin
Ejercicio 1
funcion buscar(a, c): entero
1. j1
2. mientras (a[j] <c) y (j <n) hacer
3. jj+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 ejecucin
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. j1
2. mientras (a[j] <c) y (j <n) hacer
3. jj+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. j1
2. mientras (a[j] <c) y (j <n) hacer
3. jj+1
4. finmientras
5. si a[j]= c entonces
6. retornar j
7. sino
8. retornar 0
9. finsi
finbuscar
Funcion valor (n)
para i1 hasta n hacer
para j1 hasta 20 hacer
auxj*2
auxaux*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 i1 hasta n hacer
para j1 hasta 20 hacer
auxj*2
auxaux*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)
k0
para i1 hasta n hacer
para j1 hasta i hacer
kk+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
Solucin 3
procedimiento valor (n)
k0
para i1 hasta n hacer
para j1 hasta i hacer
kk+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)
k0
para i1 hasta n hacer
para ji hasta n hacer
kk+1
finpara
finpara
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
Solucin 4
procedimiento algoritmo (n)
k0
para i1 hasta n hacer
para ji hasta n hacer
kk+1
finpara
finpara
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
Observacin:

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)
k0
para i1 hasta n hacer
para ji+1 hasta j n hacer
kk+1
finpara
finpara
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
Solucin 5
procedimiento algoritmo (n)
k0
para i1 hasta n hacer
para ji+1 hasta j n hacer
kk+1
finpara
finpara
finvalor

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

i j # iteraciones

1 2 3 2
2 3 1
3

Observacin: 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)
k1
para i1 hasta n hacer
para j1 hasta m hacer
kk*m
finpara
para k1 hasta n*m hacer
kk+1
finpara
finpara
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
Ejercicio 6
procedimiento algoritmo (n)
k1
para i1 hasta n hacer
para j1 hasta m hacer
kk*m
finpara
para k1 hasta n*m hacer
kk+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)
k1
para i1 hasta n hacer
para ji hasta n*n hacer
kk*2
finpara
finpara
finvalor

Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.
Solucin 7
procedimiento algoritmo (n)
k1
para i1 hasta n hacer
para ji hasta n*n hacer
kk*2
finpara
finpara
finvalor

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

i j # iteraciones =24

1 19 9
2 29 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)
p1
para i1 hasta n hacer
para ji hasta n hacer
para kj hasta n hacer
pp+1
finpara
finpara
finpara
finvalor

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

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

Dado el siguiente algoritmo,
determine su caso medio,
mejor y peor caso.
Observacin: 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 +
+
=
t0
para i1 hasta n
para j1 hasta i
para kj hasta n
t t+1
finpara
finpara
finpara
Ejercicio 10
Halle el tiempo de ejecucin
Solucin 10
t0
para i1 hasta n
para j1 hasta i
para kj hasta n
t t+1
finpara
finpara
finpara
Halle el tiempo de ejecucin
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
funcin?
Ejercicio 11
Para

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

SOLUCION
Solucin 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
funcin?
Ejercicio 12
Para

3 .r = 8
5. r = 8192
6. r = 4194304
7.. r = 0
:
n.. r =0
SOLUCION
Solucin 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 ejecucin
p 0
para i 1 hasta n
p p + i*i
para j 1 hasta p
escribir (a[p, j])
finpara
finpara
Solucin 13
Observacin: 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 ejecucin
p 0
para i 1 hasta n
p p + i*i
para j 1 hasta p
escribir (a[p, j])
finpara
finpara
Solucin 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
ejecucin
p 0
para i 1 hasta n
p p + i*i
para j 1 hasta p
escribir (a[p, j])
finpara
finpara
Solucin 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 ejecucin
PREGUNTA DE LABORATORIO
Pruebe(tome tiempos) los siguientes algoritmos iterativos usando la POO:

1. Bsqueda binaria que divida en tres partes el arreglo siempre
2. Bsqueda 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 Pcs distintas de distinto fabricante o en dos
sistemas operativos distintos
2. En base a los tiempos calculados En que lenguaje son mas rpidas las
implementaciones?

Observacin
El trabajo puede ser realizado entre dos alumnos como mximo
Enviar al correo zorroculto69@hotmail.com
PREGUNTA DE LABORATORIO
Pruebe(tome tiempos) los siguientes algoritmos iterativos usando la POO:

1. Bsqueda binaria
2. Bsqueda 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 rpidos que los usan arreglos?
2. Las plantillas en java son mas rpidas que en C++ o al revs?
3. Halle su ecuacin de tiempo de ejecucin en el mejor, peor y caso
promedio para ambos algoritmos.
No interesa tanto nivel de detalle como para
individualizar el costo de cada sentencia. Adems,
esto hara el anlisis dependiente del lenguaje de
programacin y de la plataforma de ejecucin.

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 matemticas 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
Diseo de Programas.
Prentice Hall.
ALLEN WEISS, Mark
Estructura de Datos y
Algoritmos. Addison Wesley
JOYANES AGUILAR,
Luis Estructura de
Datos - Teora
McGraw-Hill.
AHO, Alfred V.
Estructura de Datos y
algoritmos Addison
Wesley.
BIBLIOGRAFIA
CEVALLOS, Francisco JAVA
2 Curso de programacin
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

Вам также может понравиться