Diseño de algoritmos
description
Transcript of Diseño de algoritmos
-
DISEO DE ALGORITMOS
-
Datos: Informacin que se utiliza y se almacena en cualquier programa.
Algoritmos: Secuencia, proceso o manera de manejar los datos.
-
Estructura de DatosSe trata de un conjunto de variables de un determinado tipo agrupadas y organizadas de alguna manera para representar un comportamiento. Lo que se pretende con las estructuras de datos es facilitar un esquema lgico para manipular los datos en funcin del problema que haya que tratar y el algoritmo para resolverlo. En algunos casos la dificultad para resolver un problema radica en escoger la estructura de datos adecuada. Y, en general, la eleccin del algoritmo y de las estructuras de datos que manipular estarn muy relacionadas. .
-
Anlisis de AlgoritmosEs una herramienta para hacer la evaluacin de un diseo.Permite establecer la calidad de un programa y compararlo con otros programas que resuelven un mismo problema.Suponga que existen dos programas P1 y P2 para resolver el mismo problema. Cul de los dos es mejor?.
-
Anlisis de AlgoritmosSolucin:
Desarrollar (Implementar) ambos programas y medir el tiempo que cada uno de ellos consume para resolver el problema. Modificar los datos de entrada, promediar al final su desempeo para establecer su comportamiento en el caso promedio.
-
Anlisis de AlgoritmosProblemas:
Pueden existir muchos algoritmos para resolver el problema.Costoso y casi imposible implementar todos los programas.Modificacin de los datos puede ser una labor sin sentido.
-
Anlisis de AlgoritmosObjetivo:Establecer una medida de la calidad de los algoritmos, que permita compararlos sin la necesidad de implementarlosEsto implica asociar a cada algoritmo una funcin matemtica que mida su eficiencia.Adems del tiempo de ejecucin, para medir la eficiencia se debe considerar la cantidad de memoria utilizada por el programa.
-
Tiempo de ejecucin de un algoritmosPara tener una medida del tiempo de ejecucin de un programa, se debe pensar en los factores que tienen influencia en dicho valor.Velocidad de procesamiento.El compilador utilizado (calidad del cdigo generado).La estructura del algoritmo.Cules de estos factores no son inherentes a la solucin?.
-
Tiempo de ejecucin de un algoritmosAdems de la estructura del algoritmo, se debe tener en cuenta que el numero de datos con los cuales trabaja un programa influye en su tiempo de ejecucin.Un programa de ordenamiento de un arreglo, se demora menos en ordenar 100 elementos que 500.El tiempo de ejecucin de un algoritmo debe medirse en funcin del tamao de los datos de entrada que debe procesar.
-
Tiempo de ejecucin de un algoritmos Se define como el tiempo empleado por el algoritmo A en procesar una entrada de tamao n y producir una solucin al problema. El ideal es encontrar una funcin matemtica que describiera de manera exacta TA(n). Sin embargo, en muchos casos, el calculo de esta funcin no se puede realizar, ya que depende de otro factor no considerado y que es casi imposible de medir: la calidad de la entrada.
-
Tiempo de ejecucin de un algoritmos Ejemplo: Consideremos el algoritmo utilizado para determinar si un determinado elemento se encuentra en un vector de n posiciones.
// elem: es el elemento buscadoi=0;while ((i
-
Tiempo de ejecucin de un algoritmosAnlisis puramente terico.Verificar la influencia que tienen los datos especficos de la entrada (no solamente su cantidad).Supongamos que fijamos N = 6 y que la evaluacin de cada lnea del programa toma t microsegundos.Consideremos el vector siguiente:
-
Tiempo de ejecucin de un algoritmosSi elem = 5, cuantos microsegundos consume
i = 0;t ms.((0
-
Tiempo de ejecucin de un algoritmosSi elem = 9, cuantos microsegundos consume
i = 0;t ms.((0
-
Tiempo de ejecucin de un algoritmosAunque se conozca el tamao de los datos de entrada, es imposible para muchos problemas determinar el tiempo de ejecucin para cada una de las posibles entradas.Por esta razn se debe trabajar con el tiempo utilizado por el algoritmo en el peor de los caos ya que es mucho ms fcil definir este pero caso.Con este antecedente se redefine TA(n). TA(n) = Tiempo que se demora el algoritmo A en el peor de los caos, para encontrar una solucin a un problema de tamao n.
-
Tiempo de ejecucin de un algoritmosPara el ejemplo anterior cual es el pero caso?
Concepto de Complejidad.
-
ComplejidadLa idea detrs del concepto de complejidad es tratar de encontrar una funcin f(n), fcil de calcular y conocida, que acote el crecimiento de la funcin de tiempo, para poder decir TA(n) crece aproximadamente como f o, ms exacto En ningn caso TA(n) se comportar peor que f al aumentar el tamao del problema.
-
ComplejidadA modo de ejemplo se pueden mencionar algunas funciones tpicas de complejidad de algoritmos (dicho de otra forma que acotan superiormente el comportamiento del tiempo de ejecucin).
2n, n3, n2, nlog(n), n
Cul es la grfica de cada una de ellas?
-
Complejidad
Grfico1
5000
5010
50.301029995720.6020599913
50.477121254731.4313637642
50.602059991342.4082399653
50.698970004353.4948500217
50.778151250464.6689075023
50.8450980475.9156862801
50.90308998787.2247198959
50.954242509498.588182585
511010
51.04139268521111.4553195367
51.0791812461212.9501749526
51.11394335231314.48126358
51.14612803571416.0457924995
51.17609125911517.6413688858
51.20411998271619.2659197225
51.23044892141720.9176316634
51.25527250511822.5949050919
51.2787536011924.2963184181
51.30102999572026.0205999133
f(n) = 5
f(n) = log(n)
f(n) = n
f(n) = nlog(n)
n
f(n)
Hoja1
05000
15010
250.301029995720.6020599913
350.477121254731.4313637642
450.602059991342.4082399653
550.698970004353.4948500217
650.778151250464.6689075023
750.8450980475.9156862801
850.90308998787.2247198959
950.954242509498.588182585
10511010
1151.04139268521111.4553195367
1251.0791812461212.9501749526
1351.11394335231314.48126358
1451.14612803571416.0457924995
1551.17609125911517.6413688858
1651.20411998271619.2659197225
1751.23044892141720.9176316634
1851.25527250511822.5949050919
1951.2787536011924.2963184181
2051.30102999572026.0205999133
Hoja1
f(n) = 5
f(n) = log(n)
f(n) = n
f(n) = nlog(n)
n
f(n)
Hoja2
Hoja3
-
Complejidad
Grfico2
0
1
4
9
16
25
36
49
64
81
100
121
144
169
196
225
256
289
324
361
400
f(n) = n^2
n
f(n)
Hoja1
0500001
1501012
250.301029995720.602059991344
350.477121254731.431363764298
450.602059991342.40823996531616
550.698970004353.49485002172532
650.778151250464.66890750233664
750.8450980475.915686280149128
850.90308998787.224719895964256
950.954242509498.58818258581512
105110101001024
1151.04139268521111.45531953671212048
1251.0791812461212.95017495261444096
1351.11394335231314.481263581698192
1451.14612803571416.045792499519616384
1551.17609125911517.641368885822532768
1651.20411998271619.265919722525665536
1751.23044892141720.9176316634289131072
1851.25527250511822.5949050919324262144
1951.2787536011924.2963184181361524288
2051.30102999572026.02059991334001048576
Hoja1
f(n) = n^2
n
f(n)
Hoja2
f(n) = 2 ^ n
n
f(n)
Hoja3
Grfico3
1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
f(n) = 2 ^ n
n
f(n)
Hoja1
0500001
1501012
250.301029995720.602059991344
350.477121254731.431363764298
450.602059991342.40823996531616
550.698970004353.49485002172532
650.778151250464.66890750233664
750.8450980475.915686280149128
850.90308998787.224719895964256
950.954242509498.58818258581512
105110101001024
1151.04139268521111.45531953671212048
1251.0791812461212.95017495261444096
1351.11394335231314.481263581698192
1451.14612803571416.045792499519616384
1551.17609125911517.641368885822532768
1651.20411998271619.265919722525665536
1751.23044892141720.9176316634289131072
1851.25527250511822.5949050919324262144
1951.2787536011924.2963184181361524288
2051.30102999572026.02059991334001048576
Hoja1
f(n) = n^2
n
f(n)
Hoja2
f(n) = 2 ^ n
n
f(n)
Hoja3
-
Complejidad Un problema se denomina Tratable si existe un algoritmo de complejidad polinomial para resolverlo. En caso contrario se denomina Intratable.
Esta clasificacin es importante porque, cuando el tamao del problema aumenta, los algoritmos de complejidad polinomial dejan de ser utilizables de manera gradual.
-
Complejidad Los algoritmos para resolver problemas intratables, explotan de un momento a otro, volvindose completamente incapaces para llegar a una respuesta al problema planteado.
El caso limite de los problemas Intratables son los problemas Indecibles, son problemas para los cuales no existen algoritmos que los resuelvan.
-
Complejidad
Complejidad205010020050010001000n0.02 s.0.05 s.0.1 s.0.2 s.0.5 s.1 s.1000n*log(n)0.09 s.0.3 s.0.6 s.1.5 s.4.5 s.10 s.100n20.04 s.0.25 s.1 s.4 s.25 s.2 m.10n30.02 s.1 s.10 s.1 m.21 m.2.7 h.nlog(n)0.4 s.1.1 h.220 das125 SiglosXXXXXX
2n/30.001 s.0.1 s.2.7 h.3*104 SiglosXXXXXX
2n1 s.35 Aos3*104 SiglosXXXXXXXXX
3n58 m.2*109 siglosXXXXXXXXX
-
Notacin AsintticaOperacin elemental: es aquella operacin cuyo tiempo de ejecucin se puede acotar superiormente por una constante que solamente depender de la implementacin particular usada: de la maquina, del lenguaje, del compilador, etc.Ejemplo de estas operaciones son: suma, resta, multiplicacin, asignacin, acceso a arreglos, etc. Aunque en rigor el tiempo de una multiplicacin no es el mismo que el tiempo de la suma, pero difieren en una constante multiplicativa.
-
Notacin AsintticaLa eficiencia de un algoritmo se mide mediante las operaciones elementales, ms especficamente del nmero de operaciones elementales que se deben ejecutar.Anlisis del Peor Caso: se define como el mximo costo (operaciones elementales) de aplicar el algoritmo a un problema de tamao n.Este anlisis se suele aplicar para casos extremos en los que interesa saber cuanto, como mximo, va a costar la aplicacin del algoritmo.
-
Notacin AsintticaAlgunas reglas bsicas para realizar dicho conteo:Operaciones bsicas (+, -, *, =, ): Una unidad de tiempo, o alguna constante.Operaciones de entrada / salida: Otra unidad de tiempo, o una constante diferente.Ciclos Para (for): Se pueden expresar como la sumatoria, con los lmites del ciclo.Si y Case: Estudiar lo que puede ocurrir. Mejor caso y peor caso segn la condicin.Llamadas a procedimientos: Una constante de la llamada ms el tiempo del procedimiento.
-
Notacin AsintticaLa notacin asinttica nos permite realizar simplificaciones sustanciales aun cuando estemos interesados en medir algo ms tangible que el tiempo de ejecucin, tal como es el nmero de veces que se ejecuta una instruccin dentro del programa.
Se denomina notacin asinttica porque trata acerca del comportamiento de funciones en el lmite, esto quiere decir, para valores suficientemente grandes de su parmetro. Esto hace que los valores pequeos de las entradas no sean interesantes.
Dicho de otra manera, estamos interesados en las tasas de crecimientos en lugar de los valores concretos.
-
Notacin AsintticaLa notacin (o grande) o cota superior es la encargada de dar una cota para el peor caso y determinar las acotaciones superiores lo ms exactamente posible para valores crecientes de la entrada.
Por lo tanto se puede asegurar que conociendo la cota superior, ningn tiempo empleado en resolver el problema dado ser de un orden superior al de la cota. Se conoce como el orden del peor caso.
La notacin asinttica clasifica las funciones de tiempo de los algoritmos para que puedan ser comparadas.
-
Notacin Asinttica
-
Notacin Asinttica
-
Notacin Asinttica
-
Notacin AsintticaQue puede decir de las funciones.
-
Notacin Asinttica
-
Notacin Asinttica
-
Hugo Araya CarrascoNotacin Asinttica
Hugo Araya Carrasco
-
Notacin Asinttica