clasificacion de los problemas

5
25-06-2014 1 Complejidad de Algoritmos ¿Cuándo proporciona un algoritmo una solución SATISFACTORIA a un problema? Primero, debe producir siempre la respuesta correcta. Segundo, deberá ser eficiente. ¿Cómo se puede analizar la eficiencia de los algoritmos? Una medida de eficiencia es el tiempo que requiere un ordenador para resolver un problema utilizando un algoritmo para valores de entrada de un tamaño específico. Una segunda medida es la cantidad de memoria que se necesita de nuevo para valores de entrada de un tamaño dado. Una tercera medida sería estabilidad: un ordenamiento estable mantiene el orden relativo que tenían originalmente los elementos con claves iguales. Un análisis del tiempo requerido para resolver un problema de un tamaño particular está relacionado con la complejidad en tiempo del algoritmo y un análisis de la memoria de ordenador requerida involucra la complejidad en espacio del algoritmo. Obviamente, es importante saber si un algoritmo producirá su respuesta en un milisegundo, en un minuto o en un millón de años y de manera similar debemos tener suficiente memoria disponible para poder resolver el problema.

Upload: johnfornerod

Post on 31-Jul-2015

28 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Clasificacion de los problemas

25-06-2014

1

Complejidad de Algoritmos

¿Cuándo proporciona un algoritmo una solución SATISFACTORIA a un problema?

Primero, debe producir siempre la respuesta correcta. Segundo, deberá ser eficiente.

¿Cómo se puede analizar la eficiencia de los algoritmos?

Una medida de eficiencia es el tiempo que requiere un ordenador para resolver un

problema utilizando un algoritmo para valores de entrada de un tamaño específico. Una segunda

medida es la cantidad de memoria que se necesita de nuevo para valores de entrada de un tamaño

dado. Una tercera medida sería estabilidad: un ordenamiento estable mantiene el orden relativo que

tenían originalmente los elementos con claves iguales.

Un análisis del tiempo requerido para resolver un problema de un tamaño particular está

relacionado con la complejidad en tiempo del algoritmo y un análisis de la memoria de ordenador

requerida involucra la complejidad en espacio del algoritmo. Obviamente, es importante saber si un

algoritmo producirá su respuesta en un milisegundo, en un minuto o en un millón de años y de manera

similar debemos tener suficiente memoria disponible para poder resolver el problema.

Page 2: Clasificacion de los problemas

25-06-2014

2

Las consideraciones sobre complejidad en espacio están ligadas a las estructuras de

datos usadas en la implementación del algoritmo.

La complejidad en el tiempo de un algoritmo se puede expresar en términos del número

de operaciones que realiza el algoritmo cuando los datos de entrada tienen un tamaño particular.

(comparación de enteros, sumas, multiplicaciones, etc.)

La complejidad se describe en términos del número de operaciones requeridas en lugar del

tiempo de cálculo real, debido a que distintos ordenadores necesitan tiempos diferentes para realizar

las mismas operaciones básicas. Cada algoritmo se comporta de modo diferente de acuerdo a cómo

se le entregue la información; por eso es conveniente estudiar su comportamiento en casos extremos,

como cuando los datos están prácticamente ordenados o muy desordenados.

Complejidad del peor caso.- Por comportamiento de un algoritmo en el peor caso entendemos el

mayor número de operaciones que hace falta para resolver el problema dad utilizando el algoritmo

para unos datos de entrada de un determinado tamaño. Los análisis del peor caso nos dicen cuántas

operaciones tienen que realizar los algoritmos para garantizar que producirán una solución.

Complejidad del caso promedio.- En este tipo de análisis de complejidad se busca el número

promedio de operaciones realizadas para solucionar un problema considerando todas las posibles

entradas de un tamaño determinado. El análisis de la complejidad del caso promedio es

generalmente mucho más complicado que el análisis del peor caso.

Page 3: Clasificacion de los problemas

25-06-2014

3

La complejidad del algoritmo se denota según la notación Big-O.

Las expresiones Big-O no tienen constantes o términos de orden bajo. Esto se debe a

que cuando N es muy grande, las constantes y los términos mas bajos no existen (un método

constante será más rápido que uno lineal y este será más rápido que uno cuadrático).

Por ejemplo, O(n) significa que el algoritmo tiene una complejidad lineal. En otras

palabras, toma 10 veces más tiempo en operar un set de 100 datos que en hacerlo con un set de 10

items. Si la complejidad fuera O(n2) entonces tomaría 100 veces más tiempo en operar 100 items

que en hacerlo con 10.

Complejidad Terminología

O(1) Complejidad constante

O(log n) Complejidad logarítmica

O(n) Complejidad lineal

O(n log n) Complejidad n log n

O(n^b) Complejidad polinómica

O(b^n) Complejidad exponencial

O(n!) Complejidad factorial

Page 4: Clasificacion de los problemas

25-06-2014

4

Problemas Tratables, Intratables y NP-completos

Clase P.- Los algoritmos de complejidad polinómica se dice que son tratables en el sentido

de que suelen ser abordables en la práctica. Los problemas para los que se conocen algoritmos con

esta complejidad se dice que forman la clase P. Aquellos problemas para los que la mejor solución

que se conoce es de complejidad superior a la polinómica, se dice que son problemas intratables.

Clase NP.- Algunos de estos problemas intratables pueden caracterizarse por el curioso

hecho de que puede aplicarse un algoritmo polinómico para comprobar si una posible solución es

válida o no. Esta característica lleva a un método de resolución no determinista consistente en aplicar

heurísticos para obtener soluciones hipotéticas que se van desestimando (o aceptando) a ritmo

polinómico. Los problemas de esta clase se denominan NP (la N de no-deterministas y la P de

polinómicos).

Clase NP-completos.- Se conoce una amplia variedad de problemas de tipo NP, de los

cuales destacan algunos de ellos de extrema complejidad. Gráficamente podemos decir que algunos

problemas se hayan en la "frontera externa" de la clase NP. Son problemas NP, y son los peores

problemas posibles de clase NP. Estos problemas se caracterizan por ser todos "iguales" en el

sentido de que si se descubriera una solución P para alguno de ellos, esta solución sería fácilmente

aplicable a todos ellos. Actualmente hay un premio de prestigio equivalente al Nobel reservado para el

que descubra semejante solución.

Page 5: Clasificacion de los problemas

25-06-2014

5

El algoritmo requiere menos de O(n²) comparaciones y cambios en el pero caso. Aunque es fácil

desarrollar intuitivamente el sentido de cómo funciona el algoritmo, es bastante difícil analizar su

tiempo de ejecución pero los estimados difieren entre O(nlog2n) a O(n1.5) dependiendo de los

detalles de implementación

Dependiendo en la elección de la secuencia de saltos, Shell sort a probado tener un tiempo de

ejecución en el peor caso igual a O(n2), O(n3/2), O(n4/3) o O(nlog2n) o posiblemente mejores

tiempos de ejecución aún no probados. La existencia de una implementación que tenga una

complejidad O(nlogn) en el peor caso para el Shell sort aún se mantiene como una pregunta

abierta a la investigación.

El tamaño del set de datos usado tiene un impacto significativo en la eficiencia del algoritmo.

Algunas implementaciones de este algoritmo tienen una función que permite calcular el tamaño

óptimo del set de datos para un array determinado.

La secuencia de salto que fue sugerida inicialmente por Donald Shell fue comenzar con N/2 y

posteriormente disminuir a la mitad el salto hasta que llegue a 1. Esta secuencia provee una

mejora de desempeño sobre los algoritmos cuadráticos como el método por inserción pero puede

ser cambiada levemente para disminuir aún mas el tiempo de ejecución en el peor y el caso

promedio.