Sie sind auf Seite 1von 35

Instituto Politécnico Nacional

Complejidad
Computacional
Problemas
P y NP
Algoritmos
Computacionales
Unidad Profesional Interdisciplinaria de
Ingeniería y Ciencias Sociales y
Administrativas

“La técnica al
servicio de la patria”
Complejidad Computacional – Problemas P y NP
Computabilidad
• Dado un determinado problema, se
puede generar un algoritmo
computacional el cual puede ser
ejecutado en un definido tiempo, con
una cantidad de recursos.

2
Complejidad Computacional

Complejidad Computacional – Problemas P y NP


 Se encarga de estudiar la complejidad inherente
de la solución de un problema por medio de la
computadora.
 Los elementos para determinar su grado de
complejidad dependerán del tiempo, numero de
operaciones básicas y cantidad de recursos
requeridos para dar solución al problema.
 Tiene como objetivo el lograr generar algoritmos
efectivos que disminuyan al menos uno de los
elementos establecidos para su medición (tiempo,
numero de operaciones, recursos requeridos).

3
 Cuando inicia la computación todos los problemas que se

Complejidad Computacional – Problemas P y NP


resolvían eran polinomiales (se puede representar la
solución por medio de un polinomio, se relaciona
linealmente con el tamaño o cantidad de variables a
procesar.).
 Polinomio – “Expresión compuesta de dos o más términos
algebraicos unidos por los signos más o menos. Los de dos o
tres términos reciben los nombres especiales de binomio y
trinomio, respectivamente”.
 Real Academia Española
 Esto quiere decir que los problemas eran sencillos,
cálculos, procesos de altas, bajas y cambios, etc. Donde
se puede medir el tiempo que tardaría en ejecutarse un
algoritmo en el peor de los casos.
 Conforme paso el tiempo, se fueron haciendo las
computadoras de uso mas general, empezando a apoyar
a cualquier tipo de empresa y proceso dentro de esta.
 Entonces los especialistas se dieron cuenta que había problemas que

Complejidad Computacional – Problemas P y NP


no se cumplían la siguiente afirmación: “para una entrada de datos
‘n’ en el peor de los casos el tiempo de ejecución se puede expresar
con un polinomio O(nk)”.
 Esto quiere decir que los problemas más complejos que los
polinomiliales no se puede determinar el tiempo limite superior para
el peor de los casos .
 Quiere decir que el tiempo para dar la solución, puede se mucho
(tardar mucho tiempo). Tiene que ver con el numero de operaciones
requeridas que va directamente en aumento factorial o exponencial
con relación al numero de variables.
 En otras palabras si aumentan las entradas o las variables; aumenta
factorial o exponencialmente el tiempo requerido (numero de
operaciones) para dar solución al problema. El algoritmo no se puede
tener un tiempo de ejecución razonable .
 Se pensó que con procesadores mas potentes se podría enfrentar
este tipo de problemas, pero esto hasta la fecha no ha sido del todo
verdadero.
Complejidad Computacional – Problemas P y NP
• La complejidad esta dada por la
cantidad de operaciones básicas que
deben realzarse, desde el estado inicial
hasta alcanzar un estado final, en
función del tamaño de la entrada.

6
Función de trabajo

Complejidad Computacional – Problemas P y NP


Como y se vio en la presentación del Tema 1.5:
• Es la energía mínima (trabajo) requerida por un programa
(grupo de operaciones básicas) para lograr su objetivo (solución
a un problema).
• Dos variables X y Y están asociadas de tal forma que al asignar
un valor a X (variable independiente) entonces, por
alguna regla o correspondencia, se asigna automáticamente
un valor a Y, se dice que Y es una función (unívoca) de X.
• Dominio constituye los valores permitidos en que tome la
variable X. El cambio de valores que toma X durante un periodo
o ejecución se le denomina recorrido

La variable X, a la que se asignan libremente valores se denomina variable independiente, mientras que
a la variable cuyos valores dependen de la X se llama variables dependientes.
Clases Complejidad

Complejidad Computacional – Problemas P y NP


En resumen se puede decir que:
Un problema Polinomial (P) – Es aquel cuya solución
algorítmica se pude simular, de tal forma que se pueda
obtener con concierto grado de exactitud, el número de
operaciones y tiempo que se llevaría para resolver el
problema en el peor de los casos. Se dice que son
problemas tratables.
Un problema No Polinomial (NP) – Es aquel en que
aumenta factorial o exponencialmente el numero de
operaciones en relación directa al aumento de variables
a procesar. Lo que provoca que no se pueda simular y
obtener con cierto grado de exactitud el numero de
operaciones y tiempo requerido para resolver el
problema en el peor de los casos ya que tiende a infinito
y por eso se denominan problemas intratables.

8
Complejidad Computacional – Problemas P y NP
Clases Complejidad
Pseudopolinomial
• Un problema es pseudopolinomial si la complejidad
del mismo es polinomial en función del valor de las
entradas y no del tamaño de las entradas.
• En otras palabras es pseudopolinomial si la
complejidad va en función de los valores que puede
tomar una variable y no en el numero de datos a
procesar.

9
NP- completo (NPC).
• Son aquellos problemas cuyo status es
desconocido pero se cree no tienen
soluciones polinomiales.
• Hasta ahora no se ha encontrado solución
polinomial para ninguno de ellos.
• Se puede probar que: si un problema NP-
completo tiene solución polinomial, todos
la tendrían.

10
NP- completo (NPC).

Complejidad Computacional – Problemas P y NP


• No todos los problemas pueden ser resueltos computacionalmente,
el desarrollo de la teoría computacional ha ido íntimamente ligada al
desarrollo de la lógica matemática. Esto ha sido así por la decibilidad
(si podemos encontrar una fórmula, método o algoritmo que nos
permita decidir si cierta cadena pertenece a una estructura) de los
distintos sistemas lógicos como cuestión fundamental. En otras
palabras si un problema matemático no puede ser resuelto , tampoco
podrá ser resuelto computacionalmente.
• Por ejemplo una ecuación diofántica, este fue propuesto por Hilbert
en 1900, como pregunta si había un procedimiento efectivo que
determine si una ecuación diofántica tenia o no solución. En 1970
Matiyasevich demostró que este problema no tenia solución.

Ecuaciones Diofántica – Tambien llamadas ecuaciones dificiles. No todas las ecuaciones diofánticas tienen
un método (algoritmo) que permita resolverlas de manera sistemática. Es más, la mayoría no lo tienen. La
búsqueda de un método de resolución para ecuaciones concretas ha sido, durante mucho tiempo, objeto de
estudio por matemáticos de la talla de Euler o Lagrange, y más recientemente de Minkowski o Chevalley.
La búsqueda de un algoritmo general para la resolución de ecuaciones diofánticas sigue siendo,
actualmente, un problema abierto. En la célebre lista de 21 problemas que Hilbert propuso en el congreso
de Matemáticas de 1900, éste figura con el número 10. La resolución de este tipo de ecuaciones no tiene un
interés meramente matemático. En mecánica cuántica, debido a la naturaleza discreta de sus fenómenos, se
presentan con frecuencia este tipo de ecuaciones que requieren de soluciones enteras.
11
Complejidad Computacional – Problemas P y NP
Notación Asintótica
• La O (mayúscula) representa en tiempo de
ejecución de un algoritmo (programa)
• Por lo tanto se pueden observar diversos tipos
de algoritmos tales como:

O(n) - Lineal
O(n2) - Cuadrático
O(n lg n) - Logarítmico

12
Notación formal

Complejidad Computacional – Problemas P y NP


• Formalmente, T esta en función de:
A - Tiempo de ejecución total para el algoritmo A
L - Lenguaje utilizado para el desarrollo
M – Características de la computadora en donde se ejecuta el algoritmo.

Así mismo las letras siguientes representan:


V – Tipo o Clase de complejidad
F – función (representación del algoritmo), también se representa con
minúscula f
O – tiempo de ejecución (complejidad)

• Entonces el tiempo de ejecución (O - complejidad) de A se


expresa como:
V = O(f)
• En el caso de procesamiento en paralelo se define como:
O(T(A,L1,M1) U O(T(A,L2,M2)) U O(T(A,L3,M3))
U ...

13
Función de la tasa de crecimiento
Observe que entre mayor numero de procesos requeridos para

Complejidad Computacional – Problemas P y NP


dar solución al problema mayor complejidad computacional
Tipos de problemas P

Complejidad Computacional – Problemas P y NP


Tiempo
Tiempo

Datos Datos
O(1) – Complejidad O(log n)– Complejidad
Constante Logarítmica
Búsqueda binaria, Quick
Sort, Shell sort
Tiempo

Tiempo

Datos Datos
O(n)– Complejidad
O( np )– Complejidad
Lineal
Búsqueda lineal
Polinómica
Burbuja,
Tipos de problemas NP

Complejidad Computacional – Problemas P y NP


Tiempo

Datos
O( cn )– Complejidad
Exponencial
Problema de las 8 Reinas
Tiempo

Datos
O( n1 )– Complejidad Factorial
Agente viajero
Travelling Salesman Problem (TSP)
Análisis asintótico de funciones

Complejidad Computacional – Problemas P y NP


Por lo general se analizar el tiempo requerido para un algoritmo y el espacio
requerido para una estructura de datos

Análisis de tiempo de ejecución de distintos algoritmos con un numero de entrada


de datos pequeño.

Representación de las líneas (curvas) que describen la función de diferentes


algoritmos.

pp 17
Análisis asintótico de funciones

Complejidad Computacional – Problemas P y NP


Análisis de tiempo de ejecución de distintos algoritmos con un
numero de entrada de datos pequeño.

Representación de las líneas (curvas) que describen la función de


diferentes algoritmos.
Problema de decisión
• Se dice que un problema de decisión es P si puede ser resuelto en

Complejidad Computacional – Problemas P y NP


una maquina de Turing indeterministica en un tiempo polinomio.
• En otro punto de vista todo algoritmo tiene que ver con
decisiones. Efectuar decisiones que tienen como respuesta SI o
NO. Si cumple tal o cual situación se efectúa una seria de
operaciones y si no cumple efectúa una serie diferente de
operaciones .
• El problema inicia cuando:
– El numero de consideraciones aumenta para decidir que
camino tomar (si se cumple con que … y además se tiene que
…. y se encuentra dentro de ……..).
– Los procesos cambian según los valores de las variables (si es
A se realiza ….., Si es A1 se realiza …., si es AB se realiza….).
– Varia el número de iteración y llamados a procesos diferentes
en función a los valores de las variables ( X’ se ejecuta el
proceso Z , si es menor se efectúa el proceso W, si se
encuentra entre el rango … se ejecuta el proceso Y,….
• Mientras mas decisiones y bifurcaciones tenga un algoritmo en
función a las decisiones que tiene que tomar, mayor será su
complejidad. 19
Problema de decisión

Complejidad Computacional – Problemas P y NP


• Un problema de decisión cuya respuesta es SI, tiene
asociado un subconjunto Y (yes) de actividades, la
cual forma parte del conjunto de actividades del
algoritmo X.
• Si la respuesta es No tiene que realizar otro
conjunto de actividades N (No). siendo
complemento del subconjunto Y.

N
X
Y

20
Problema de optimización

Complejidad Computacional – Problemas P y NP


• Evaluación: Determina los valores u operaciones de
una solución optima.
• Optimización: Encontrar los valores mínimos y
máximos para la solución optima al problema.
• Decisión: Para cada valor valido que pueda tomar
una variable, debe haber un proceso de solución
factible de ejecutarse.
• Localización: Para cada valor valido que pueda
tomar una variable, se debe poder localizar y seguir
el proceso de solución a ejecutarse.
• Certificado: Dada una instancia de SI se puede
verificar el tiempo de ejecución de forma
polinomial.
21
Complejidad Computacional – Problemas P y NP
• ¿Que importancia tiene el saber si un
problema esta en P o NP?.
• ¿Cómo se puede dar una solución a los
problemas NP?

22
Solución a problemas NP

Complejidad Computacional – Problemas P y NP


• El objetivo es comprender la
composición del problema (que
elementos lo conforman) y lograr
reducciones, de tal forma que cada
reducción pueda ser tratado como un
problema polinomial, a esto se le
denomina reducción polinomial.

23
Complejidad Computacional – Problemas P y NP
Solución a problemas NP

• Los problemas NP, son problemas tan complejos que


jamás se obtendrá la solución ideal. Lo que se hace es
expresar una aproximación a la solución ideal.
• Se crea o diseña un algoritmo que se aproxime a los
resultados deseados. Para esto se necesita:
• Conocer el proceso para tratar el problema.
• Establecer el resultado que se aproximen a la
solución esperada.
 Especificar todos los elementos necesarios para
llegar al resultado.

24
Complejidad Computacional – Problemas P y NP
Solución a problemas NP

• La solución optima para lo problemas No


Polinomiales (NP) es dividir el problema
en partes de tal manera que los tamaños
sean computacionalmente factibles de
solucionar.
• Y se define un punto de unión entre los
grupos, esto facilita la solución.
• Y la representación clásica a este tipo de
problemas se presenta con el problema
del agente viajero.

25
Solución a problemas NP

Complejidad Computacional – Problemas P y NP


El problema del Agente Viajero
Se tiene que un agente viajero debe recorrer todas las
capitales de los estados de la republica mexicana
(incluido el DF), para repartir sus productos, la pregunta
sería ¿Cuál es la mejor ruta que debe seleccionar el
agente para cumplir óptimamente con su misión.
Esto es que se recorra en el menor tiempo, con el menor
gasto posible y que toque todos los puntos indicados.
Para llegar de un punto a otro se representa como 2!. (ida
y vuelta).
Cuando se tienen 4 puntos a tocar se representa 4! (ida y
vuelta). Si solo se quiere obtener las formas posibles
como se pueden llegar a los cuatro puntos se represente
(4!)/2 (grafo dirigido).
26
Solución a problemas NP

Complejidad Computacional – Problemas P y NP


El Problema del agente viajero
La formula para determinar la complejidad es n! (factorial)
Por ejemplo una ruta entre dos nodos es:
2!, esto es igual 1 * 2 = 2.
Si se hace dirigido el grafo seria n!/2:
(2!)/2 = (1*2)/2 = 2/2 = 1
Que pasa si se desea encontrar la ruta para tocar las 32 ciudades
principales de la república mexicana, seria:
32! = 2.6313083693369353016721801216e+35
Si hacemos el grafo dirigido se tendría:
32!/2=1.3156541846684676508360900608e+35
Son tantas las posibilidades y cálculos requeridos
computacionalmente que se convierte en un problema No
polinomial (NP).
27
Solución a problemas NP

Complejidad Computacional – Problemas P y NP


El Problema del agente viajero
• Esto es, el tiempo que se llevaría resolver el problema
costaría quizá más de los beneficios que arrojaría, o tal
vez el obtener la solución tardaría mucho.
• Para resolverlos se debe tomar en cuenta los costos,
tiempo, desgaste del coche, etc, que tomaría el escoger
una u otra ruta.
• Muchas veces la diferencia de llegar del punto A al D por
una u otra ruta es mínima.

A
C

B
D

Solución de problemas
Complejidad Computacional – Problemas P y NP
Solución a problemas NP
El Problema del agente viajero
Para solucionar este tipo de problemas se formar grupos.
A cada unión de nodos (ruta, arco que une a dos nodos) se le
asigna un valor, este puede se puede medir en litros de
gasolina, kilometraje, tiempo o cualquier otra unidad de
medida.
Se agrupan los nodos normalmente por cercanía (nodos zona
norte, centro y sur) y se establece un punto de unión o
conexión entre los grupos.
El problema se ha simplificado ahora se tienen tres grupos con
11!, 10! Y 11!.
A su vez se puede subdividir un grupo en subgrupos. Tantas
veces como la complejidad del problema disminuya y ayude a
la solución.
Complejidad Computacional – Problemas P y NP
Problemas intratables
• Se dice que un problema es intratable si no
es posible definir un algoritmo eficiente para
resolver el problema.
• Cuando no es posible lograr reducciones,
de tal forma que cada reducción pueda ser
tratado como un problema polinomial .

Camino hamiltoniano . Grafo, en donde se visita a todos los vértices del


gafo una sola vez. 30
Complejidad Computacional – Problemas P y NP
Heuristica
• El objetivo es encontrar algoritmos que
tengan un eficiente tiempo de
ejecución y utilización de recursos;
generando una solución óptima.

31
Complejidad Computacional – Problemas P y NP
Noción algorítmica
• Es una técnica auxiliar para la solución de problemas
cíclicos e iterativos
• Un algoritmo es una sucesión de eventos o pasos
bien establecidos que tienen la finalidad de dar
solución a una problemática.
• Un algoritmo generalmente se representa por
símbolos (nomenclatura clara e identificable).
• El tratamiento a un problema no es una tarea fácil,
ya que depende del tipo de problema y de las
variables internas y externas que lo afectan.

32
Complejidad Computacional – Problemas P y NP
Noción Algorítmica
La noción algorítmica establece que hay que conocer el
problema de tal forma y con tanta profundidad y
detalle que con gran facilidad se pueda:
 Describir
 Esquematizar - Representar cada una de sus
partes y variables (conocer el comportamiento
del problema).

La visión analítica es aplicada en forma intuitiva por


muchas personas (hacerla consciente). Fuertemente
ligada a los conocimientos y experiencia del
individuo.

33
Heu
rísti
ca

Complejidad Computacional – Problemas P y NP


La mayoría de los problemas a los que se enfrenta
el Informático son del tipo Polinomial (P), esto es
que se pueden representar por medio de un
polinomio, por ejemplo: y2- 2x + 2

Sin embargo existen otro tipos de problemas los


No Polinomiales (NP), esto es, que no se pueden
representar por medio de un polinomio.

Para mas información ver la presentación del


tema 1.5 Complejidad computacional

34
• Sznajdleder Pablo, Algoritmos a fondo, Editorial
Alfaomega,México 2012.

• Baase Sara, Van Gelder Allen, Algoritmos computacionales,


Introducción al análisis y diseño, Editorial Addison Wesley,
Tercera edición, México 2002, págs. 686, ISBN 970-6-0142-8.

BIBLIOGRAFÍA
• Brassard G., Bratley P., Fundamentos de Algoritmia, Editorial
Prentice Hall, México 1997, págs. 608, ISBN 84-89660-00-X.

• López Gustavo, Jeder Ismael, Vega Augusto, Análisis y Diseño de


Algoritmos, Implementación en C y Pascal, Editorial Alfaomega,
México 2009, págs. 309, ISBN 978-987-23113-9-1.

• Sisa Alberto Jaime, Estructura de datos y algoritmos, con énfasis


en programación orientada a objetos, Editorial Prentice Hall,
México 2002, págs. 310, ISBN 958-699-044-3.

35

Das könnte Ihnen auch gefallen