Vous êtes sur la page 1sur 71

ALGORITMICA III

Introducción al Análisis Algorítmico

Docente: Carlos A. Ruiz De La Cruz Melo


Correo: zorroculto69@hotmail.com
EVALUACION SEGÚN SILABO

Concepto Porcentaje Compuesto


Promedio de 15% Evaluación permanente y
laboratorio continua

Promedio de 15% Evaluación permanente y


práctica continua

Proyecto 20% 100% Trabajo Final


Examen Parcial 25% 100% examen
Examen Final 25% 100% examen
EVALUACION PROPUESTA

Promedio final = (EP + EF + PROY+ PLAB) / 4

 EP: examen parcial


 EF: examen final
 PROY: promedio de informes (PROY=(I1+I2+I3)/3)
 PLAB: promedio de laboratorios (PLAB= (LAB1 + LAB2)/2 )
PROYECTO

1. Compilador
2. Reconocedor de rostros, firmas, huella digital
3. Estenografía
4. Criptografía
5. Juego
6. Sistema de información
PROYECTO
Tema especifico a elegir

I. Planteamiento metodológico
 Antecedentes
 Definición del problema
 Objetivos
 general
 especifico
 Justificación

II. Marco teórico


III. Estado del arte
IV. Desarrollo del problema
PROYECTO

 Grupo de 5 alumnos
 Se utiliza software como java o C++
 Evaluación:

1. Informe CERO Planteamiento del Problema


2. Primer informe Marco Teórico
3. Segundo informe Estado del Arte
4. Tercer informe Desarrollo e implementación
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
INTRODUCCION

Los algoritmos son mas importantes que


los Lenguajes de Programación

 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

N
 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 o el
numero de elementos en el array, para
una matriz, el número de elementos
que la componen, pues cada problema
acarrea su propia lógica y complejidad.
COMPLEJIDAD TEMPORAL
 La complejidad en función del tamaño de
entrada, no considera a la forma como se
presenta los datos, sino al conjunto en su
tamaño en sí.

2 8 10 15 24

Arreglo 24 8 2 15 10

n=5
24 15 10 8 2
COMPLEJIDAD TEMPORAL

 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.

TIEMPO MEMORIA
0x0000
0x0004
0x0006
0x0010
0x0014
 
 
 
COMPLEJIDAD TEMPORAL

 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: t1 es el tiempo que lleva
ejecutar la serie S1 de
S1 sentencias y t2 el que lleve
para i1 hasta n hacer la serie S2
S2
finpara

T(n) t1 + t2* n


TIEMPO DE
EJECUCION

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:

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
Benchmarking
 La técnica de benchmark considera una colección de
entradas típicas representativas de una carga de trabajo para
un programa.
 Técnica comparativa entre versiones de software
 El software sirve como indicador relativo para medir la
eficiencia de un algoritmo

Profiling
 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.
METODOS PARA MEDIR EL
TIEMPO DE EJECUCION

Análisis

 Consiste en agrupar las


entradas de acuerdo a su
tamaño, n, 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 I1 y I2
(maquinas distintas o códigos distintos) que tardan
T1(n) y T2(n) respectivamente, el principio de
invarianza afirma que existe una constante real c>0
y un numero natural n0 tales que para todo n ≥ n0
se verifica que T1 (n) ≤ cT2(n).
PRINCIPIO DE
INVARIANZA

Búsqueda n 1000 1700 20000


con listas Tiempo 4 5 80

Búsqueda
secuencial
Búsqueda n 1000 1700 20000
con arreglos tiempo 2 2.5 40
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.

 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
ANALISIS DE
ALGORITMOS
 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.

C  ( CM  CP ) / 2
ANALISIS DE
ALGORITMOS
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
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 Y CONSIDERACIONES
EN LOS ALGORITMOS

 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
DISEÑO DE ALGORITMOS

 Consideramos en su diseño:

Condiciones del problema (espacio, tiempo).


Limitaciones que se tiene (maquina,
programa, etc).
TECNICAS MAS UTILIZADAS EN
EL DISEÑO DE ALGORITMOS

 Dividir para conquistar


 Algoritmos backtracting
 Programación dinámica
 Algoritmos golosos
 Algoritmos geometricos
EVALUACION DE ALGORITMOS
 Elementos a ser tomados en cuenta:

Eficacia (fin que se busca).


Eficiencia (tiempo y espacio).

 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.
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
Multiplicar Byte por byte

 Para multiplicar
números de un byte, el
dos
al  al * bl
multiplicando esta en el
registro AL y el multiplicador
es un byte en memoria o en
mov al, 5
otro registro.
mov bl,3
mul bl
 Para la instrucción MUL BL,
la operación multiplica el
mov ah,02h
contenido del AL por el
mov al ,ax
contenido del BL. El
int 21h
producto generado esta en
el registro AL.
Ejemplo 1
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 Cuánto cuesta el algoritmo en
finsi tiempo ?.. La comparación del si se
retornar resultado ejecuta siempre y supongamos que
finPotencia 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.
Ejemplo 1
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 T= C1+ C2+(y-1)*(C3+C2)
resultadox
para i1 hasta y-1 hacer
resultadoresultado * x
finpara
finsi
retornar resultado
finPotencia

C1 costo de comparar dos números


C2 costo de realizar una asignación
C3 costo de realizar una multiplicación
Ejemplo 1 Observemos que el algoritmo no
es eficiente ya que realiza
demasiadas multiplicaciones.
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

Para y = 8
Total = 6 multiplicaciones
Ejemplo 2
Se calcula x elevado a y donde se requiere que x>0
x, y son enteros

1. funcion Potencia2(x, y)
2. si (y = 0) entonces
3. retornar 1
4. sino
5. r1
6. si ( y > 1) entonces
7. rPotencia2(x, y/2)
8. rr* r
9. finsi
10. si ( y modulo 2 = 1 ) entonces
11. r r * x
12. finsi
13. finsi
14. retornar r
15. finPotencia
Ejemplo 2
Se calcula x elevado a y donde se requiere que x>0
x, y son enteros

1. funcion Potencia2(x, y) Potencia(2, 3)


2. si (y = 0) entonces
r 1 (5)
3. retornar 1
rPotencia (2, 1) (7)
4. sino
5. r1 r1 (5)
6. si ( y > 1) entonces r1 x 2 2 (11)
7. rPotencia2(x, y/2) retornar 2 (14)
8. rr* r
9. finsi
10. si ( y modulo 2 = 1 ) entonces r2x24 (8)
11. r r * x r4x2 8 (11)
12. finsi retornar 8 (14)
13. finsi
14. retornar r
15. finPotencia
Para y =3
tenemos 3 multiplicaciones
Ejemplo 2 Potencia(2, 7)

r1 (5)
rpotencia (2, 3) (7)
1. funcion Potencia2(x, y)
2. si (y = 0) entonces r1 (5)
3. retornar 1 rpotencia(2, 1) (7)
4. sino
5. r1 r1 (5)
6. si ( y > 1) entonces r1x2 (11)
7. rPotencia2(x, y/2) retornar 2 (14)
8. rr* r r2x2 (8)
9. finsi r 4x2 (11)
10. si ( y modulo 2 = 1 ) entonces retornar 8 (14)
11. r r * x
12. finsi r 8x8 (8)
13. finsi r 64 x 2 (11)
14. retornar r retornar 128 (14)
15. finPotencia

Para y = 7
Total = 5 multiplicaciones
Ejemplo 2
Para valores más grandes de y , la
diferencia entre el primer y el
segundo algoritmo se hace mucho
más notoria

y multiplicaciones resultado
1. funcion Potencia2(x, y)
2. si (y = 0) entonces 8 4 256
3. retornar 1 9 5 512
4. sino
5. r1 10 5 1024
6. si ( y > 1) entonces 15 7 32768
7. rPotencia2(x, y/2)
8. rr* r 20 6 1048576
9. finsi
10. si ( y modulo 2 = 1 ) entonces
11. r r * x
12. finsi
13. finsi
14. retornar r
15. finPotencia
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

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
Para i 1 hasta n hacer porque la instrucción dentro del ciclo se
instruccion ejecuta n veces.
finpara

 c1
i 1
Ejemplo 4 Cuando
Cuandoloslosciclos
ciclosdependen
dependenuno uno
del
delotro
otropodemos
podemosaplicar
aplicarlala
misma
mismatécnica
técnica
para i 1 hasta n hacer
para j 3 hasta m hacer
instruccion
finpara
finpara

n m n

 c1   (m  2) * c1  n * (m  2) * c1
i 1 j 3 i 1

para i 1 hasta n hacer


para j i hasta n hacer
instruccion
finpara
finpara
Ejemplo 5  c1* (n * n 
n * (n  1)
 n)
2
para i 1 hasta n hacer
para j i hasta n hacer
n * (n  1)
instruccion  c1* (n * n   n)
finpara 2
finpara
n2  n
n n n  c1* ( )
  c1  (n  i  1) * c1
2
i 1 j i i 1 n2  n
n  c1* ( )
 c1*  n  i  1  2
i 1
n n n
 c1* ( n   i  1)
i 1 i 1 i 1
n n n Solución
 c1* ( n   i  1)
i 1 i 1 i 1
Ejercicio 1
funcion buscar(a, c): entero Tiempo de ejecución
1. j1 OE: operaciones elementales
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
funcion buscar(a, c): entero
Caso mejor: 1. j1
 Linea 1: 1 2. mientras (a[j] <c) y (j <n) hacer
 Linea 2(solo la primera mitad): 2 3. jj+1
 Linea 5 : 2 4. finmientras
 Linea 6 : 1 5. si a[j]= c entonces
6. retornar j
T(n)= 1 + 2 + 2+1 = 6 7. sino
8. retornar 0
9. finsi
finbuscar
Caso peor:
 Linea 1:
 Linea 2(bucle se repite n-1 veces hasta que
se cumple la segunda condicion):
 Linea 5 hasta la 8:

n 1
T (n)  1  ((  (4  2)  4)  2  1  6n  2
i 1
funcion buscar(a, c): entero
Caso medio: 1. j1
2. mientras (a[j] <c) y (j <n) hacer
En el caso medio el bucle se ejecutara un 3. jj+1
numero de veces entre 0 y n-1 y vamos a 4. finmientras
suponer que cada una de ellas tiene la 5. si a[j]= c entonces
misma probabilidad de suceder. 6. retornar j
7. sino
El numero medio de veces que se 8. retornar 0
efectuara el bucle es de: 9. finsi
finbuscar
n 1
1 n 1
i
i 0 n

2

Tenemos que:

( n 1) / 2
T (n)  1  ((  (4  2)  4)  2  1  3n  5
i 1
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.

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

n 20 n

 (c1  c2)   20(c1  c2)  20(c1  c2)n


i 1 j 1 i 1
Ejercicio 3
Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.

procedimiento valor (n)


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

 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

n(1  n)
T (n)  c1  c2
2
Ejercicio 4
Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.

procedimiento algoritmo (n)


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

procedimiento algoritmo (n)


Observación:
k0
para i1 hasta n hacer
i j # iteraciones
para ji hasta n hacer
kk+1
1 1234 4
finpara
2 234 3
finpara
3 34 2
finvalor
4 4 1

 En total, 1 + 2 + 3 + ... + N = N*(1+N)/2

n(1  n)
T (n)  c1  c2
2
Ejercicio 5
Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.

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
Solución 5 Observación: n = 3

Dado el siguiente algoritmo, i j # iteraciones


determine su caso medio, mejor y
peor caso. 1 23 2
2 3 1
procedimiento algoritmo (n) 3
k0
para i1 hasta n hacer Observación: n = 4
para ji+1 hasta j ≤ n hacer
kk+1 i j # iteraciones
finpara
finpara 1 234 3
finvalor 2 34 2
3 4 1
 (n  1)(1  (n  1))  4
T (n)  c1    c2
 2 

 (n  1)n 
T (n)  c1    c2
 2 
Ejercicio 6
Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.

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
Ejercicio 6
Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.

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 n m n*m
finpara
finvalor
T (n)  c1   ( c2   c3)
i 1 j 1 k 1

T (n)  c1  n(c 2m  c3(n * m))


Ejercicio 7
Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.

procedimiento algoritmo (n)


k1
para i1 hasta n hacer
para ji hasta n*n hacer
kk*2
finpara
finpara
finvalor
Solución 7
Observación: n = 3
Dado el siguiente algoritmo,
determine su caso medio, mejor
i j # iteraciones =24
y peor caso.

1 1……9 9
procedimiento algoritmo (n)
2 2…9 8
k1
3 3..9 7
para i1 hasta n hacer
para ji hasta n*n hacer
kk*2
para n=3, nxn = 9, # iteraciones =45
finpara
finpara
1+2+3+4+…+9 = n*n(n*n+1)/2
finvalor

n * n(n * n  1) (n * n  n)(( n * n  n)  1)
T (n)  c1  (  )c 2
2 2

2n 3  n 2  n 2(3)3  32  3
T (n)  c1  ( )c 2  c1  ( )c2  c1  24c2
2 2
Ejercicio 8
Dado el siguiente algoritmo, determine su caso medio, mejor y peor
caso.

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
Ejercicio 9
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 i hacer
si i < j entonces
aux i + j
si ( i + 2 < j ) entonces
auxaux*2
finsi
finsi
finpara
finpara
retornar aux
finvalor
Solución 9
Observación: n = 3
Dado el siguiente algoritmo,
determine su caso medio, i j # iteraciones =6
mejor y peor caso.
1 1 1<1 no
Funcion valor (n) 2 1 2 2<1 no
para i1 hasta n hacer 2<2 no
para j1 hasta i hacer 3 1 23 3<1 no
si i < j entonces 3<2 no
aux i + j 3<3 no
si ( i + 2 < j ) entonces
auxaux*2
finsi
finsi
finpara
finpara
retornar aux
finvalor n * (n  1)
T ( n)  c1  c 2
2
Ejercicio 10
Halle el tiempo de ejecución

t0
para i1 hasta n
para j1 hasta i
para kj hasta n
t t+1
finpara
finpara
finpara
Solución 10
Halle el tiempo de ejecución

t0
para i1 hasta n
para j1 hasta i
para kj hasta n
t t+1
finpara
finpara
finpara
Para:
n
n(n  1)( 2n  1)
T ( n)   i  2 n=4, son 30 iteraciones
i 1 6
n=3, son 14 iteraciones
CONCLUSION
 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.

 Se necesitan herramientas matemáticas que


cumplan con los criterios anteriores.
BIBLIOGRAFIA

BRASSARD, G. / ALLEN WEISS, Mark


BRATLEY, T. “Fundamentos “Estructura de Datos y
de Algoritmia”. Prentice Algoritmos”. Addison Wesley
Hall. 1997

CAIRÓ, JOYANES AGUILAR,


Osvaldo.“Estructuras Luis “Estructura de
de Datos”. McGraw-Hill. Datos - Teoría”
1998 McGraw-Hill.

KRUSE, Robert L. AHO, Alfred V.


“Estructura de Datos y “Estructura de Datos y
Diseño de Programas”. algoritmos” Addison
Prentice Hall. Wesley.
BIBLIOGRAFIA
CEVALLOS, Francisco “JAVA
2 Curso de programación”
Alfa y Omega

DEITEL Y DEITEL
“Como programar en JAVA”.
Prentice Hall. 2004

LIPSCHUTZ, Seymur Ph.D.


“Estructura de Datos”. Serie
SCHAUM. McGraw-Hill. 1987

Vous aimerez peut-être aussi