diseño de algoritmos

36
DISEÑO DE ALGORITMOS

Upload: hawkman07

Post on 14-Nov-2015

23 views

Category:

Documents


1 download

DESCRIPTION

Esxplicación de como realizar un algoritmo programacional

TRANSCRIPT

  • 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