SlideShare una empresa de Scribd logo
1 de 10
Descargar para leer sin conexión
“Análisis de Algoritmos”
1
“COMPLEJIDAD COMPUTACIONAL”
La complejidad computacional considera globalmente todos los posibles algoritmos para
resolver un problema dado.
Estamos interesados en la distinción que existe entre los problemas que pueden ser
resueltos por un algoritmo en tiempo polinómico y los problemas para los cuales no
conocemos ningún algoritmo polinómico, es decir, el mejor es no-polinómico.
La teoría de la NP-Completitud no proporciona un método para obtener algoritmos de
tiempo polinómico, ni dice que que estos algoritmos no existan. Lo que muestra es que
muchos de los problemas para los cuales no conocemos algoritmos polinómicos están
computacionalmente relacionados.
De esta forma se presentarán definiciones que pretenden distinguir entre los
problemas tratables (aquellos que no son tan duros) y los problemas
intratables (duros o que consumen mucho tiempo). La mayoría de estos
problemas ocurren como problemas de optimización combinatoria.
CLASIFICACIÓN DE PROBLEMAS
Los problemas matemáticos se pueden dividir en primera instancia en dos grupos:
• Problemas indecidibles: aquellos que no se pueden resolver mediante un
algoritmo.
• Problemas decidibles: aquellos que cuentan al menos con un algoritmo para su
cómputo.
Sin embargo, que un problema sea decididle no implica que se pueda encontrar su
solución, pues muchos problemas que disponen de algoritmos para su resolución
son inabordables para un computador por el elevado número de operaciones que
hay que realizar para resolverlos. Esto permite separar los problemas decidibles
en dos:
Intratables: aquellos para los que no es factible
obtener su solución.
Tratables: aquellos para los que existe al menos
un algoritmo capaz de resolverlo en un tiempo
razonable.
“Análisis de Algoritmos”
2
Problemas Intratables
Garey & Johnson, plantean una situación de intratabilidad interesante que describimos a
través del siguiente caso:
Si trabajas para una compañía que está pensando entrar a una nueva era globalizadora
de gobierno y tu jefe te propone que obtengas un método para determinar si o no
cualquier conjunto dado de especificaciones para un nuevo componente pueden ser
satisfechas de alguna manera y, si es así, se deberá construir el diseño que satisfaga
dichas expecificaciones. La realidad es que después de un tiempo comprobarás que no
hay manera de obtener tal método. De modo que tendrás dos alternativas:
1. Renunciar para evitar la pena de que te corran por inepto.
2. Esperar a que te corran por inepto. Sería muy penoso, pero tendrías que confesar
que no pudiste resolver el problema por falta de capacidad.
Para evitar la situación anterior tú podrías tratar de tomar una actitud de una persona más
valiente y demostrar que en realidad dicho método no se puede obtener. Si eso fuera así
entonces tú podrías ir con tu jefe y aclararle que el problema no lo resolviste porque no se
puede resolver: Es intratable.
Sin embargo, es muy probable que a tu jefe esta característica del problema le tenga sin
cuidado y, de todas maneras, te corran o tengas que renunciar.
Es decir regresarás a las alternativas: 1 y 2 antes citadas.
Una situación más prometedora, es tratar de probar que el problema no sólo es tan difícil
que no se puede resolver, sino que además pertenece a una clase de problemas tales
que cientos y miles de personas famosas e inteligentes, tampoco pudieron resolver. Aún
así, no estamos muy seguros aún de tu permanencia en la compañía!.
En realidad el conocimiento de que un problema es intratable es de gran utilidad en
problemas de tipo computacional. Dado que el problema completo es intratable, tu podrías
resolver el problema para ciertas instancias del mismo, o bien, resolver un problema
menos ambicioso. Por ejemplo, podrá conformarte con obtener un método para las
especificaciones de solo cierto tipo de componentes para determinados conjuntos de
entrada y no para "cualquier conjunto dado de especificaciones". Esto seguramente te
llevará a tener mejor relaciones con tu compañía.
En general, nos interesa encontrar el algoritmo más eficiente para resolver un problema
determinado. Desde ese punto de vista tendríamos que considerar todos los recursos
utilizados de manera que el algoritmo más eficiente sería aquél que consumiera menos
recursos. ¿Cuáles recursos? Si pensamos nuevamente que tu jefe te encarga que
obtengas el algoritmo más eficiente, es decir, el que consume menos recursos da pena de
que si no lo obtienes seas eliminado de la nomina de la compañía, estoy seguro, en que
pensarías en todos los recursos posibles (horas-hombre para construir el algoritmo,
tiempo de sintonización, tiempo requerido para obtener una solución, número de
procesadores empleados, cantidad de memoria requerida, etc.). Para simplificar un poco
la tarea, consideraremos que tu jefe te permite que la eficiencia la midas sobre un solo
recurso: El tiempo de ejecución. Pensemos por un momento que sólo se tiene una sola
máquina de modo que el número de procesadores no requiere de un análisis. ¿Qué le
“Análisis de Algoritmos”
3
pasó a tu jefe? ¿De pronto se volvió comprensivo contigo? En realidad los otros
parámetros los ha tomado en cuenta como costo directo del programa en cuestión. Esto
es en realidad lo que se hace en teoría de complejidad. Para el análisis de complejidad,
se considera por lo general la eficiencia sobre el tiempo, para un solo procesador en
cómputo secuencial; para cómputo paralelo se considera también el número de
procesadores.
Los algorimos han sido divididos como buenos o malos algoritmos. La comunidad
computacional acepta que un buen algoritmo es aquél para el cual existe un algoritmo
polinomial determinístico que lo resuelva. También se acepta que un mal algoritmo es
aquel para el cual dicho algoritmo simplemente no existe. Un problema se dice intratable,
si es muy difícil que un algoritmo de tiempo no polinomial lo resuelva. No obstante, esta
clasificación de algoritmos en buenos y malos puede resultar a veces engañosa, ya que
se podría pensar que los algoritmos exponenciales no son de utilidad práctica y que habrá
que utilizar solamente algoritmos polinomiales. Sin embargo se tiene el caso de los
métodos simplex y Branch and Bound, los cuales son muy eficientes para muchos
problemas prácticos. Desafortunadamente ejemplos como estos dos son raros, de modo
que es preferible seguir empleando como regla de clasificación en buenos y malos
algoritmos, la que lo hace dependiendo de si son o no polinomiales; todo esto con la
prudencia necesaria.
Problemas de Decisión
Aquí hemos hablado de problemas de optimización como aquél donde buscamos el
máximo o el mínimo de una función donde existen o no un conjunto de restricciones. Sin
embargo, un problema de optimización combinatoria puede también ser formulado de
manera más relajada como sigue:
Dado un problema de optimización, podemos encontrar el costo de la solución óptima.
Se sabe que dado un problema de optimización, se puede definir un problema de decisión
asociado a él, esto es, una pregunta que puede ser contestada por si o no. Por otro lado,
varios problemas computacionales bien conocidos son problemas de decisión. Entre los
problemas de decisión se pueden mencionar por ejemplo:
• El problema de paro (Halting Problem): dado un algoritmo y su entrada, ¿Parará
éste alguna vez?
• El problema de satisfactibilidad: dada una fórmula booleana, ¿Es ésta
satisfactible?
• El problema del circuito Hamiltoniano: dado un grafo G, ¿Hay un circuito en G que
visite todos los nodos exactamente una vez?.
La definición de problema de decisión a partir del problema de optimización permite
estudiar ambos tipos de problemas de una manera uniforme. Además, como se ha
puntualizado que un problema de decisión no es más difícil que el problema de
optimización original, cualquier resultado negativo probado sobre la complejidad del
problema de decisión será aplicable al problema de optimización también.
“Análisis de Algoritmos”
4
Se está interesado en clasificar los problemas de decisión de acuerdo a su complejidad.
Se denota por P a la clase de problemas de decisión que son polinomialmente acotados,
esto es, la clase de problemas de decisión que pueden ser solucionados en tiempo
polinomial. La clase P puede ser definida muy precisamente en términos de cualquier
formalismo matemático para algoritmos, como por ejemplo la Máquina de Turing.
Se puede decir que P es la clase de problemas de decisión relativamente fáciles, para los
cuales existe un algoritmo que los soluciona eficientemente.
Para una entrada dada, una "solución" es un objeto (por ejemplo, un grafo coloreado) que
satisface el criterio en el problema y justifica una respuesta afirmativa de si. Una "solución
propuesta" es simplemente un objeto del tipo apropiado, este puede o no satisfacer el
criterio. Informalmente se puede decir que NP es la clase de problemas de decisión para
los cuales una solución propuesta dada para una entrada dada, puede ser chequeada
rápidamente (en tiempo polinomial) para ver si ésta es realmente una solución, es decir, si
ésta satisface todos los requerimientos del problema.
Una solución propuesta puede ser descrita por una cadena de símbolos a partir de algún
conjunto finito. Simplemente se necesita alguna convención para describir grafos,
conjuntos, funciones, etc. usando estos símbolos. El tamaño de la cadena es el número
de símbolos en ella. Chequear una solución propuesta incluye chequear que la cadena
tenga sentido (esto es, que tenga una sintáxis correcta) como una descripción del tipo de
objeto requerido, también como chequear que ésta satisface el criterio del problema.
Algoritmos No Determinísticos
Un algoritmo no determinístico tiene dos fases:
Fase no Determinística: alguna cadena de caracteres, s, completamente arbitraria es
escrita a partir de algún lugar de memoria designado. Cada vez que el algoritmo corre, la
cadena escrita puede diferir (Esta cadena puede ser vista como una adivinación de la
solución para el problema, por lo que a esta fase se le da el nombre de fase de
adivinación, pero s también podría ser ininteligible o sin sentido).
Fase Determinística: Un algoritmo determinístico (es decir ordinario) siendo ejecutado.
Además de la entrada del problema de decisión, el algoritmo puede leer s, o puede
ignorarla. Eventualmente éste para con una salida de si o no, o puede entrar en un ciclo
infinito y nunca parar (véase ésta como la fase de chequear, el algoritmo determinístico
verifica s para ver si ésta es una solución para la entrada del problema de decisión).
El número de pasos llevados a cabo durante la ejecución de un algoritmo no
determinístico es definido como la suma de los pasos en ambas fases; esto es, el número
de pasos tomados para escribir s (simplemente el número de caracteres en s) más el
número de pasos ejecutados por la segunda fase determinística.
Normalmente cada vez que se corre un algoritmo con la misma entrada se obtiene la
misma salida. Esto no ocurre con algoritmos no determinísticos; para una entrada
particular x, la salida a partir de una corrida puede diferir de la salida de otra debido a que
ésta depende de s. aunque los algoritmos no determinísticos no son realistas (algoritmos
útiles en la práctica), ellos son útiles para clasificar problemas.
“Análisis de Algoritmos”
5
Se dice que un algoritmo no determinístico es polinomialmente acotado si hay un
polinomio p tal que para cada entrada de tamaño n para la cual la respuesta es si, hay
alguna ejecución del algoritmo que produce una salida si en cuando mucho p(n) pasos.
De esta forma se puede decir que: NP es la clase de problemas de decisión para los
cuales hay un algoritmo no determinístico acotado polinomialmente (el nombre de NP
viene de no determinístico polinomialmente acotado).
Un algoritmo ordinario (determinístico) para un problema de decisión es un caso especial
de un algoritmo no determinístico. En otras palabras, si A es un algoritmo determinístico
para un problema de decisión, entonces A es la segunda fase de un algoritmo no
determinístico. A simplemente ignora lo que fue escrito por la primera fase y procede con
su cálculo usual. Un algoritmo no determinístico puede hacer cero pasos en la primera
fase (escribiendo la cadena nula). Así, si A corre en tiempo polinomial, el algoritmo no
determinístico con A como su segunda fase corre también en tiempo polinomial. De lo
mencionado se deduce que P es un subconjunto propio de NP.
La gran pregunta es ¿ P = NP o es P un subconjunto propio de NP? Se cree que NP es
un conjunto mucho mayor que P, pero no hay un solo problema en NP para el cual éste
haya sido probado que el problema no está en P. No hay un algoritmo polinomialmente
acotado conocido para muchos problemas en NP, pero ningún límite inferior mayor que un
polinomio ha sido probado para estos problemas.
NP-completo es el término usado para describir los problemas de decisión que son los
más difíciles en NP en el sentido que, si hubiera un algoritmo polinomialmente acotado
para un problema NP-completo, entonces habría un algoritmo polinomialmente acotado
para cada problema en NP.
Algoritmos Determinísticos: Tiene la propiedad de que el resultado de cada operación,
se define en forma única.
Los problemas pueden clasificarse también atendiendo a su complejidad:
PROBLEMAS P, NP 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. Seria muy interesante encontrar alguna solución polinómica (o
mejor) que permitiera abordarlos.
Ejemplos: Todos los algoritmos a los que se les ha podido establecer su tiempo de
ejecución.
“Análisis de Algoritmos”
6
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). Los problemas de la
clase P son subconjunto de los de clase NP.
Ejemplos: Torres de Hanoi, Ordenación por el método Shell
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 se puede decir que algunos problemas se
encuentran 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.
Es más, si se descubriera una solución para los problemas NP-completos, esta sería
aplicable a todos los problemas NP y, por tanto, la clase NP desaparecería del mundo
científico al carecerse de problemas de ese tipo. Realmente, tras años de búsqueda
exhaustiva de dicha solución, es hecho ampliamente aceptado que no debe existir,
aunque nadie ha demostrado, todavía, la imposibilidad de su existencia.
La teoría de NP-completitud se basa en el concepto de transformación polinomial.
Transformación Polinomial: es una función que permite cambiar la representación de
problema D1 a otro problema D2 aplicando un algoritmo determinista de tiempo
polinomial.
Lo anterior se puede representar como ''D1 se transforma a D2'' o D1 µ D2.
Las transformaciones polinomiales son importantes porque sirven para determinar la
pertenencia de los problemas a las clases P y NP, y permiten definir la clase NP-
completo.
Si D1 se transforma a D2 y D2 pertenece a la clase P, entonces D1 también pertenece a
la clase P, porque, si para cambiar de D1 a D2 se utiliza un algoritmo de tiempo polinomial
y si D2 (ya que pertenece a la clase P) tiene un algoritmo de solución que se ejecuta en
tiempo polinomial, D1 debe tener asociado un algoritmo que lo resuelva también en
tiempo polinomial, y D1 debe pertenecer a la clase P.
“Análisis de Algoritmos”
7
P
NP (No Determinístico
Polinomial)
NP-COMPLETO
Existe un Algoritmo de
tiempo polinómico para su
resolución.
Sus mejores algoritmos
conocidos son no
deterministas.
Imposible encontrar un
algoritmo eficiente para
encontrar una solución
óptima.
El tiempo de ejecución de
estos algoritmos está dado
por un polinomio.
Puede aplicarse un
algoritmo polinómico para
comprobar si una posible
solución es válida o no
Se basan en el concepto de
Transformación Polinomial.
(D1 µ D2)
Ej: Factorial, búsqueda
secuencial, etc.
Ej: Torres de Hanoi,
Ordenación por el método
del Shell
Ej: Vendedor Viajero,
Mochila, etc.
“SOLUCIONES” A PROBLEMAS NP-COMPLETOS
1. Técnicas Heurísticas
2. Aproximaciones Polinomiales
1. Un algoritmo heurístico (o simplemente heurística) puede producir una buena
solución (puede que la óptima) pero también puede que no produzca ninguna
solución o dar una solución no muy buena. Normalmente, se basa en un
conocimiento intuitivo del programador sobre un determinado problema.
Ejemplo: Para el caso del vendedor viajero se tienen 2 heurísticas:
a. Realizar todas las combinaciones posibles
b. Iniciar un grafo con los nodos y sin las aristas e ir agregando las aristas de
menor costo que unen los vértices.
2. Aproximaciones Polinomiales: encontrar soluciones que se aproximen a la
solución óptima.
Siempre que se desea realizar una aproximación, existe un error relativo que
afecta a esta solución, el cual está dado por:
| opt(x) – c (sx) |
max{opt(x), c(sx)}
“Análisis de Algoritmos”
8
Problemas NP-Completos
1. Ciclo Hamiltoniano: es aquél que recorre todos los nodos en un camino simple.
Un Ciclo Hamiltoneano es aquél que recorre todos los nodos en un camino
simple.
Problema: Existe un ciclo simple en G que contenga a todos los vértices?
Un posible candidato para este problema puede ser verificado en tiempo
polinomial, luego este problema está en la categoría NP.
Consideremos el problema del ciclo Hamiltoniano “¿Tiene un grafo G un ciclo
Hamiltoniano? (Aquél que recorre todos los nodos en un camino simple) Un
posible candidato para este problema puede ser verificado en tiempo polinomial,
luego este problema está en la categoría NP.
Ejemplo:
“Análisis de Algoritmos”
9
2. Vendedor Viajero: Recorrer todos los vértices de manera que el costo sea
mínimo. No se debe pasar 2 veces por un mismo vértice. Se debe volver al punto
de partida.
• Se tiene un grafo completo (todos los arcos) con costos asociados a cada
arco. El vendedor desea hacer un “tour” (ciclo hamiltoniano) tal que el costo
sea mínimo.
Ejemplo:
15
30
20
25
50
45
10
35
40 55
5
4
3
1
2
A
F
D
B
C
E
4
3
3
5
7
21
9
2
35
1
“Análisis de Algoritmos”
10
3. Camino más largo: ¿Cuál es el camino simple más largo que conecta dos nodos
de un grafo?
4. Mochila: Se tiene una mochila con un peso máximo W y n objetos cada uno con
un peso específico y una ganancia asociada. La idea es maximizar el uso de la
mochila. Los objetos se pueden dividir para alcanzar el peso total.
5. Coloración: Existe una forma de asignar k colores a los vértices de un grafo de
modo que no hayan arcos conectando vértices del mismo color?
6. Laberinto: Se tiene una matriz de N x N con una casilla de entrada (1,1) y una
casilla de salida (n,n). ¿Cómo se puede llegar al final?
7. Secuenciamiento de trabajos: Se Tiene n tareas requieren un tiempo unitario en
ejecutarse, y un único procesador donde ejecutarlas. En cualquier instante T = 1,
2, ... se puede ejecutar una única tarea i. La ejecución de esta tarea provocará un
beneficio gi.

Más contenido relacionado

La actualidad más candente

Registros de control y estados de la CPU
Registros de control y estados de la CPURegistros de control y estados de la CPU
Registros de control y estados de la CPUIvan Porras
 
Administración de procesos en el S.O.
Administración de procesos en el S.O.Administración de procesos en el S.O.
Administración de procesos en el S.O.Carlos Solano
 
TAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSTAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSxinithazangels
 
1.1 Definición y concepto de los S.O
1.1 Definición y concepto de los S.O1.1 Definición y concepto de los S.O
1.1 Definición y concepto de los S.Olupita zume
 
Modelo iterativo
Modelo iterativoModelo iterativo
Modelo iterativotim100492
 
Fases de desarrollo de un programa...
Fases de desarrollo de un programa... Fases de desarrollo de un programa...
Fases de desarrollo de un programa... grachika
 
Dfd ejercicios 2017__01
Dfd ejercicios 2017__01Dfd ejercicios 2017__01
Dfd ejercicios 2017__01Don Augusto
 
programacion en lenguaje ensamblador con NASM
programacion en lenguaje ensamblador con NASMprogramacion en lenguaje ensamblador con NASM
programacion en lenguaje ensamblador con NASMフ乇丂ひ丂
 
Conceptos Unidad 1 Lenguajes Automatas Introducción a la Teoría de Lenguaje...
Conceptos Unidad 1 Lenguajes Automatas Introducción  a  la Teoría de Lenguaje...Conceptos Unidad 1 Lenguajes Automatas Introducción  a  la Teoría de Lenguaje...
Conceptos Unidad 1 Lenguajes Automatas Introducción a la Teoría de Lenguaje...Hugo Alberto Rivera Diaz
 
Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema Lis Pater
 
Tareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientosTareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientosnenyta08
 
PLANIFICACION DE PROCESO
PLANIFICACION DE PROCESOPLANIFICACION DE PROCESO
PLANIFICACION DE PROCESOgladysmamani
 
Cuadro comparativo modelos para el desarrollo de software
Cuadro comparativo modelos para el desarrollo de softwareCuadro comparativo modelos para el desarrollo de software
Cuadro comparativo modelos para el desarrollo de softwarepaoaboytes
 
Arquitectura flujo de datos(filtros y tuberías)
Arquitectura flujo de datos(filtros y tuberías)Arquitectura flujo de datos(filtros y tuberías)
Arquitectura flujo de datos(filtros y tuberías)katherine revelo gomez
 

La actualidad más candente (20)

Registros de control y estados de la CPU
Registros de control y estados de la CPURegistros de control y estados de la CPU
Registros de control y estados de la CPU
 
Administración de procesos en el S.O.
Administración de procesos en el S.O.Administración de procesos en el S.O.
Administración de procesos en el S.O.
 
Requerimientos del software
Requerimientos del software Requerimientos del software
Requerimientos del software
 
Analizador léxico
Analizador léxicoAnalizador léxico
Analizador léxico
 
TAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSTAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOS
 
1.1 Definición y concepto de los S.O
1.1 Definición y concepto de los S.O1.1 Definición y concepto de los S.O
1.1 Definición y concepto de los S.O
 
Modelo iterativo
Modelo iterativoModelo iterativo
Modelo iterativo
 
Fases de desarrollo de un programa...
Fases de desarrollo de un programa... Fases de desarrollo de un programa...
Fases de desarrollo de un programa...
 
Dfd ejercicios 2017__01
Dfd ejercicios 2017__01Dfd ejercicios 2017__01
Dfd ejercicios 2017__01
 
Metodología Rup
Metodología RupMetodología Rup
Metodología Rup
 
Modelo cascada
Modelo cascadaModelo cascada
Modelo cascada
 
Mitos del software
Mitos del softwareMitos del software
Mitos del software
 
programacion en lenguaje ensamblador con NASM
programacion en lenguaje ensamblador con NASMprogramacion en lenguaje ensamblador con NASM
programacion en lenguaje ensamblador con NASM
 
Arquitectura harvard
Arquitectura harvardArquitectura harvard
Arquitectura harvard
 
Conceptos Unidad 1 Lenguajes Automatas Introducción a la Teoría de Lenguaje...
Conceptos Unidad 1 Lenguajes Automatas Introducción  a  la Teoría de Lenguaje...Conceptos Unidad 1 Lenguajes Automatas Introducción  a  la Teoría de Lenguaje...
Conceptos Unidad 1 Lenguajes Automatas Introducción a la Teoría de Lenguaje...
 
Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema
 
Tareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientosTareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientos
 
PLANIFICACION DE PROCESO
PLANIFICACION DE PROCESOPLANIFICACION DE PROCESO
PLANIFICACION DE PROCESO
 
Cuadro comparativo modelos para el desarrollo de software
Cuadro comparativo modelos para el desarrollo de softwareCuadro comparativo modelos para el desarrollo de software
Cuadro comparativo modelos para el desarrollo de software
 
Arquitectura flujo de datos(filtros y tuberías)
Arquitectura flujo de datos(filtros y tuberías)Arquitectura flujo de datos(filtros y tuberías)
Arquitectura flujo de datos(filtros y tuberías)
 

Similar a Clasificacion de los problemas

Tema1 faa 16_17
Tema1 faa 16_17Tema1 faa 16_17
Tema1 faa 16_17alexray100
 
Actividad iv aplicar algoritmos a problemas (reparado)
Actividad iv aplicar algoritmos a problemas (reparado)Actividad iv aplicar algoritmos a problemas (reparado)
Actividad iv aplicar algoritmos a problemas (reparado)javier170497
 
Algoritmos Voraces (Greedy)
Algoritmos Voraces (Greedy)Algoritmos Voraces (Greedy)
Algoritmos Voraces (Greedy)luzenith_g
 
Chapter 1 General Problem-Solving Concepts
Chapter 1 General Problem-Solving ConceptsChapter 1 General Problem-Solving Concepts
Chapter 1 General Problem-Solving ConceptsCarlos M. Sandoval
 
Complejidad de problemas
Complejidad de problemasComplejidad de problemas
Complejidad de problemasrodrigoalseco
 
1.3 elaborar algoritmos de la solución de un problema.
1.3 elaborar algoritmos de la solución de un problema.1.3 elaborar algoritmos de la solución de un problema.
1.3 elaborar algoritmos de la solución de un problema.carolina peña
 
portafolio de informatica
portafolio de informaticaportafolio de informatica
portafolio de informaticabeyiima
 
Actividad iv aplicar algoritmos a problemas (pasar ya a carpeta)
Actividad iv aplicar algoritmos a problemas (pasar ya a carpeta)Actividad iv aplicar algoritmos a problemas (pasar ya a carpeta)
Actividad iv aplicar algoritmos a problemas (pasar ya a carpeta)beyiima
 
Presentación optimizacion de sistema
Presentación optimizacion de sistemaPresentación optimizacion de sistema
Presentación optimizacion de sistemaDiRossalez
 
Programacion dinamica
Programacion dinamicaProgramacion dinamica
Programacion dinamicaJosé Padrón
 
resolucion de problemas: Algoritmos y programas
resolucion de problemas: Algoritmos y programas resolucion de problemas: Algoritmos y programas
resolucion de problemas: Algoritmos y programas panchofronteras
 
Introducción al curso Fundamentos de Programación Misión TIC 2022
Introducción al curso Fundamentos de Programación Misión TIC 2022Introducción al curso Fundamentos de Programación Misión TIC 2022
Introducción al curso Fundamentos de Programación Misión TIC 2022Richard Eliseo Mendoza Gafaro
 
Actividad IV Aplicar algoritmos a problemas
Actividad IV Aplicar algoritmos a problemasActividad IV Aplicar algoritmos a problemas
Actividad IV Aplicar algoritmos a problemasgamma_destro
 

Similar a Clasificacion de los problemas (20)

Tema1 faa 16_17
Tema1 faa 16_17Tema1 faa 16_17
Tema1 faa 16_17
 
Cap1.3
Cap1.3Cap1.3
Cap1.3
 
Actividad iv aplicar algoritmos a problemas (reparado)
Actividad iv aplicar algoritmos a problemas (reparado)Actividad iv aplicar algoritmos a problemas (reparado)
Actividad iv aplicar algoritmos a problemas (reparado)
 
Algoritmos Voraces (Greedy)
Algoritmos Voraces (Greedy)Algoritmos Voraces (Greedy)
Algoritmos Voraces (Greedy)
 
Chapter 1 General Problem-Solving Concepts
Chapter 1 General Problem-Solving ConceptsChapter 1 General Problem-Solving Concepts
Chapter 1 General Problem-Solving Concepts
 
Complejidad de problemas
Complejidad de problemasComplejidad de problemas
Complejidad de problemas
 
1.3 elaborar algoritmos de la solución de un problema.
1.3 elaborar algoritmos de la solución de un problema.1.3 elaborar algoritmos de la solución de un problema.
1.3 elaborar algoritmos de la solución de un problema.
 
portafolio de informatica
portafolio de informaticaportafolio de informatica
portafolio de informatica
 
Actividad iv aplicar algoritmos a problemas (pasar ya a carpeta)
Actividad iv aplicar algoritmos a problemas (pasar ya a carpeta)Actividad iv aplicar algoritmos a problemas (pasar ya a carpeta)
Actividad iv aplicar algoritmos a problemas (pasar ya a carpeta)
 
Presentación optimizacion de sistema
Presentación optimizacion de sistemaPresentación optimizacion de sistema
Presentación optimizacion de sistema
 
Programacion dinamica
Programacion dinamicaProgramacion dinamica
Programacion dinamica
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Elaboracion de algoritmos
Elaboracion de algoritmosElaboracion de algoritmos
Elaboracion de algoritmos
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Vivi Reinoso
Vivi ReinosoVivi Reinoso
Vivi Reinoso
 
resolucion de problemas: Algoritmos y programas
resolucion de problemas: Algoritmos y programas resolucion de problemas: Algoritmos y programas
resolucion de problemas: Algoritmos y programas
 
Exposicion (1)
Exposicion (1)Exposicion (1)
Exposicion (1)
 
Introducción al curso Fundamentos de Programación Misión TIC 2022
Introducción al curso Fundamentos de Programación Misión TIC 2022Introducción al curso Fundamentos de Programación Misión TIC 2022
Introducción al curso Fundamentos de Programación Misión TIC 2022
 
Actividad IV Aplicar algoritmos a problemas
Actividad IV Aplicar algoritmos a problemasActividad IV Aplicar algoritmos a problemas
Actividad IV Aplicar algoritmos a problemas
 

Más de Johnfornerod

Clase 2 y 3 buenas practicas de manufactura
Clase 2 y 3 buenas practicas de manufacturaClase 2 y 3 buenas practicas de manufactura
Clase 2 y 3 buenas practicas de manufacturaJohnfornerod
 
Clase 1 aplicación de normas y procedimiento de higiene personal
Clase 1 aplicación de normas y procedimiento de higiene personalClase 1 aplicación de normas y procedimiento de higiene personal
Clase 1 aplicación de normas y procedimiento de higiene personalJohnfornerod
 
1 clase analisis algoritmos
1 clase   analisis algoritmos1 clase   analisis algoritmos
1 clase analisis algoritmosJohnfornerod
 
Recorrido de grafos 2da parte
Recorrido de grafos 2da parteRecorrido de grafos 2da parte
Recorrido de grafos 2da parteJohnfornerod
 
Recorrido de grafos 1ra parte
Recorrido de grafos 1ra parteRecorrido de grafos 1ra parte
Recorrido de grafos 1ra parteJohnfornerod
 
Clasificacion de los problemas
Clasificacion de los problemasClasificacion de los problemas
Clasificacion de los problemasJohnfornerod
 
Algoritmos de busqueda
Algoritmos de busquedaAlgoritmos de busqueda
Algoritmos de busquedaJohnfornerod
 

Más de Johnfornerod (10)

Clase 2 y 3 buenas practicas de manufactura
Clase 2 y 3 buenas practicas de manufacturaClase 2 y 3 buenas practicas de manufactura
Clase 2 y 3 buenas practicas de manufactura
 
Clase 1 aplicación de normas y procedimiento de higiene personal
Clase 1 aplicación de normas y procedimiento de higiene personalClase 1 aplicación de normas y procedimiento de higiene personal
Clase 1 aplicación de normas y procedimiento de higiene personal
 
Catedra grafos
Catedra grafosCatedra grafos
Catedra grafos
 
1 clase analisis algoritmos
1 clase   analisis algoritmos1 clase   analisis algoritmos
1 clase analisis algoritmos
 
Catedra grafos
Catedra grafosCatedra grafos
Catedra grafos
 
Recorrido de grafos 2da parte
Recorrido de grafos 2da parteRecorrido de grafos 2da parte
Recorrido de grafos 2da parte
 
Recorrido de grafos 1ra parte
Recorrido de grafos 1ra parteRecorrido de grafos 1ra parte
Recorrido de grafos 1ra parte
 
Clasificacion de los problemas
Clasificacion de los problemasClasificacion de los problemas
Clasificacion de los problemas
 
Algoritmos de busqueda
Algoritmos de busquedaAlgoritmos de busqueda
Algoritmos de busqueda
 
Cd algoritmoos
Cd algoritmoosCd algoritmoos
Cd algoritmoos
 

Clasificacion de los problemas

  • 1. “Análisis de Algoritmos” 1 “COMPLEJIDAD COMPUTACIONAL” La complejidad computacional considera globalmente todos los posibles algoritmos para resolver un problema dado. Estamos interesados en la distinción que existe entre los problemas que pueden ser resueltos por un algoritmo en tiempo polinómico y los problemas para los cuales no conocemos ningún algoritmo polinómico, es decir, el mejor es no-polinómico. La teoría de la NP-Completitud no proporciona un método para obtener algoritmos de tiempo polinómico, ni dice que que estos algoritmos no existan. Lo que muestra es que muchos de los problemas para los cuales no conocemos algoritmos polinómicos están computacionalmente relacionados. De esta forma se presentarán definiciones que pretenden distinguir entre los problemas tratables (aquellos que no son tan duros) y los problemas intratables (duros o que consumen mucho tiempo). La mayoría de estos problemas ocurren como problemas de optimización combinatoria. CLASIFICACIÓN DE PROBLEMAS Los problemas matemáticos se pueden dividir en primera instancia en dos grupos: • Problemas indecidibles: aquellos que no se pueden resolver mediante un algoritmo. • Problemas decidibles: aquellos que cuentan al menos con un algoritmo para su cómputo. Sin embargo, que un problema sea decididle no implica que se pueda encontrar su solución, pues muchos problemas que disponen de algoritmos para su resolución son inabordables para un computador por el elevado número de operaciones que hay que realizar para resolverlos. Esto permite separar los problemas decidibles en dos: Intratables: aquellos para los que no es factible obtener su solución. Tratables: aquellos para los que existe al menos un algoritmo capaz de resolverlo en un tiempo razonable.
  • 2. “Análisis de Algoritmos” 2 Problemas Intratables Garey & Johnson, plantean una situación de intratabilidad interesante que describimos a través del siguiente caso: Si trabajas para una compañía que está pensando entrar a una nueva era globalizadora de gobierno y tu jefe te propone que obtengas un método para determinar si o no cualquier conjunto dado de especificaciones para un nuevo componente pueden ser satisfechas de alguna manera y, si es así, se deberá construir el diseño que satisfaga dichas expecificaciones. La realidad es que después de un tiempo comprobarás que no hay manera de obtener tal método. De modo que tendrás dos alternativas: 1. Renunciar para evitar la pena de que te corran por inepto. 2. Esperar a que te corran por inepto. Sería muy penoso, pero tendrías que confesar que no pudiste resolver el problema por falta de capacidad. Para evitar la situación anterior tú podrías tratar de tomar una actitud de una persona más valiente y demostrar que en realidad dicho método no se puede obtener. Si eso fuera así entonces tú podrías ir con tu jefe y aclararle que el problema no lo resolviste porque no se puede resolver: Es intratable. Sin embargo, es muy probable que a tu jefe esta característica del problema le tenga sin cuidado y, de todas maneras, te corran o tengas que renunciar. Es decir regresarás a las alternativas: 1 y 2 antes citadas. Una situación más prometedora, es tratar de probar que el problema no sólo es tan difícil que no se puede resolver, sino que además pertenece a una clase de problemas tales que cientos y miles de personas famosas e inteligentes, tampoco pudieron resolver. Aún así, no estamos muy seguros aún de tu permanencia en la compañía!. En realidad el conocimiento de que un problema es intratable es de gran utilidad en problemas de tipo computacional. Dado que el problema completo es intratable, tu podrías resolver el problema para ciertas instancias del mismo, o bien, resolver un problema menos ambicioso. Por ejemplo, podrá conformarte con obtener un método para las especificaciones de solo cierto tipo de componentes para determinados conjuntos de entrada y no para "cualquier conjunto dado de especificaciones". Esto seguramente te llevará a tener mejor relaciones con tu compañía. En general, nos interesa encontrar el algoritmo más eficiente para resolver un problema determinado. Desde ese punto de vista tendríamos que considerar todos los recursos utilizados de manera que el algoritmo más eficiente sería aquél que consumiera menos recursos. ¿Cuáles recursos? Si pensamos nuevamente que tu jefe te encarga que obtengas el algoritmo más eficiente, es decir, el que consume menos recursos da pena de que si no lo obtienes seas eliminado de la nomina de la compañía, estoy seguro, en que pensarías en todos los recursos posibles (horas-hombre para construir el algoritmo, tiempo de sintonización, tiempo requerido para obtener una solución, número de procesadores empleados, cantidad de memoria requerida, etc.). Para simplificar un poco la tarea, consideraremos que tu jefe te permite que la eficiencia la midas sobre un solo recurso: El tiempo de ejecución. Pensemos por un momento que sólo se tiene una sola máquina de modo que el número de procesadores no requiere de un análisis. ¿Qué le
  • 3. “Análisis de Algoritmos” 3 pasó a tu jefe? ¿De pronto se volvió comprensivo contigo? En realidad los otros parámetros los ha tomado en cuenta como costo directo del programa en cuestión. Esto es en realidad lo que se hace en teoría de complejidad. Para el análisis de complejidad, se considera por lo general la eficiencia sobre el tiempo, para un solo procesador en cómputo secuencial; para cómputo paralelo se considera también el número de procesadores. Los algorimos han sido divididos como buenos o malos algoritmos. La comunidad computacional acepta que un buen algoritmo es aquél para el cual existe un algoritmo polinomial determinístico que lo resuelva. También se acepta que un mal algoritmo es aquel para el cual dicho algoritmo simplemente no existe. Un problema se dice intratable, si es muy difícil que un algoritmo de tiempo no polinomial lo resuelva. No obstante, esta clasificación de algoritmos en buenos y malos puede resultar a veces engañosa, ya que se podría pensar que los algoritmos exponenciales no son de utilidad práctica y que habrá que utilizar solamente algoritmos polinomiales. Sin embargo se tiene el caso de los métodos simplex y Branch and Bound, los cuales son muy eficientes para muchos problemas prácticos. Desafortunadamente ejemplos como estos dos son raros, de modo que es preferible seguir empleando como regla de clasificación en buenos y malos algoritmos, la que lo hace dependiendo de si son o no polinomiales; todo esto con la prudencia necesaria. Problemas de Decisión Aquí hemos hablado de problemas de optimización como aquél donde buscamos el máximo o el mínimo de una función donde existen o no un conjunto de restricciones. Sin embargo, un problema de optimización combinatoria puede también ser formulado de manera más relajada como sigue: Dado un problema de optimización, podemos encontrar el costo de la solución óptima. Se sabe que dado un problema de optimización, se puede definir un problema de decisión asociado a él, esto es, una pregunta que puede ser contestada por si o no. Por otro lado, varios problemas computacionales bien conocidos son problemas de decisión. Entre los problemas de decisión se pueden mencionar por ejemplo: • El problema de paro (Halting Problem): dado un algoritmo y su entrada, ¿Parará éste alguna vez? • El problema de satisfactibilidad: dada una fórmula booleana, ¿Es ésta satisfactible? • El problema del circuito Hamiltoniano: dado un grafo G, ¿Hay un circuito en G que visite todos los nodos exactamente una vez?. La definición de problema de decisión a partir del problema de optimización permite estudiar ambos tipos de problemas de una manera uniforme. Además, como se ha puntualizado que un problema de decisión no es más difícil que el problema de optimización original, cualquier resultado negativo probado sobre la complejidad del problema de decisión será aplicable al problema de optimización también.
  • 4. “Análisis de Algoritmos” 4 Se está interesado en clasificar los problemas de decisión de acuerdo a su complejidad. Se denota por P a la clase de problemas de decisión que son polinomialmente acotados, esto es, la clase de problemas de decisión que pueden ser solucionados en tiempo polinomial. La clase P puede ser definida muy precisamente en términos de cualquier formalismo matemático para algoritmos, como por ejemplo la Máquina de Turing. Se puede decir que P es la clase de problemas de decisión relativamente fáciles, para los cuales existe un algoritmo que los soluciona eficientemente. Para una entrada dada, una "solución" es un objeto (por ejemplo, un grafo coloreado) que satisface el criterio en el problema y justifica una respuesta afirmativa de si. Una "solución propuesta" es simplemente un objeto del tipo apropiado, este puede o no satisfacer el criterio. Informalmente se puede decir que NP es la clase de problemas de decisión para los cuales una solución propuesta dada para una entrada dada, puede ser chequeada rápidamente (en tiempo polinomial) para ver si ésta es realmente una solución, es decir, si ésta satisface todos los requerimientos del problema. Una solución propuesta puede ser descrita por una cadena de símbolos a partir de algún conjunto finito. Simplemente se necesita alguna convención para describir grafos, conjuntos, funciones, etc. usando estos símbolos. El tamaño de la cadena es el número de símbolos en ella. Chequear una solución propuesta incluye chequear que la cadena tenga sentido (esto es, que tenga una sintáxis correcta) como una descripción del tipo de objeto requerido, también como chequear que ésta satisface el criterio del problema. Algoritmos No Determinísticos Un algoritmo no determinístico tiene dos fases: Fase no Determinística: alguna cadena de caracteres, s, completamente arbitraria es escrita a partir de algún lugar de memoria designado. Cada vez que el algoritmo corre, la cadena escrita puede diferir (Esta cadena puede ser vista como una adivinación de la solución para el problema, por lo que a esta fase se le da el nombre de fase de adivinación, pero s también podría ser ininteligible o sin sentido). Fase Determinística: Un algoritmo determinístico (es decir ordinario) siendo ejecutado. Además de la entrada del problema de decisión, el algoritmo puede leer s, o puede ignorarla. Eventualmente éste para con una salida de si o no, o puede entrar en un ciclo infinito y nunca parar (véase ésta como la fase de chequear, el algoritmo determinístico verifica s para ver si ésta es una solución para la entrada del problema de decisión). El número de pasos llevados a cabo durante la ejecución de un algoritmo no determinístico es definido como la suma de los pasos en ambas fases; esto es, el número de pasos tomados para escribir s (simplemente el número de caracteres en s) más el número de pasos ejecutados por la segunda fase determinística. Normalmente cada vez que se corre un algoritmo con la misma entrada se obtiene la misma salida. Esto no ocurre con algoritmos no determinísticos; para una entrada particular x, la salida a partir de una corrida puede diferir de la salida de otra debido a que ésta depende de s. aunque los algoritmos no determinísticos no son realistas (algoritmos útiles en la práctica), ellos son útiles para clasificar problemas.
  • 5. “Análisis de Algoritmos” 5 Se dice que un algoritmo no determinístico es polinomialmente acotado si hay un polinomio p tal que para cada entrada de tamaño n para la cual la respuesta es si, hay alguna ejecución del algoritmo que produce una salida si en cuando mucho p(n) pasos. De esta forma se puede decir que: NP es la clase de problemas de decisión para los cuales hay un algoritmo no determinístico acotado polinomialmente (el nombre de NP viene de no determinístico polinomialmente acotado). Un algoritmo ordinario (determinístico) para un problema de decisión es un caso especial de un algoritmo no determinístico. En otras palabras, si A es un algoritmo determinístico para un problema de decisión, entonces A es la segunda fase de un algoritmo no determinístico. A simplemente ignora lo que fue escrito por la primera fase y procede con su cálculo usual. Un algoritmo no determinístico puede hacer cero pasos en la primera fase (escribiendo la cadena nula). Así, si A corre en tiempo polinomial, el algoritmo no determinístico con A como su segunda fase corre también en tiempo polinomial. De lo mencionado se deduce que P es un subconjunto propio de NP. La gran pregunta es ¿ P = NP o es P un subconjunto propio de NP? Se cree que NP es un conjunto mucho mayor que P, pero no hay un solo problema en NP para el cual éste haya sido probado que el problema no está en P. No hay un algoritmo polinomialmente acotado conocido para muchos problemas en NP, pero ningún límite inferior mayor que un polinomio ha sido probado para estos problemas. NP-completo es el término usado para describir los problemas de decisión que son los más difíciles en NP en el sentido que, si hubiera un algoritmo polinomialmente acotado para un problema NP-completo, entonces habría un algoritmo polinomialmente acotado para cada problema en NP. Algoritmos Determinísticos: Tiene la propiedad de que el resultado de cada operación, se define en forma única. Los problemas pueden clasificarse también atendiendo a su complejidad: PROBLEMAS P, NP 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. Seria muy interesante encontrar alguna solución polinómica (o mejor) que permitiera abordarlos. Ejemplos: Todos los algoritmos a los que se les ha podido establecer su tiempo de ejecución.
  • 6. “Análisis de Algoritmos” 6 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). Los problemas de la clase P son subconjunto de los de clase NP. Ejemplos: Torres de Hanoi, Ordenación por el método Shell 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 se puede decir que algunos problemas se encuentran 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. Es más, si se descubriera una solución para los problemas NP-completos, esta sería aplicable a todos los problemas NP y, por tanto, la clase NP desaparecería del mundo científico al carecerse de problemas de ese tipo. Realmente, tras años de búsqueda exhaustiva de dicha solución, es hecho ampliamente aceptado que no debe existir, aunque nadie ha demostrado, todavía, la imposibilidad de su existencia. La teoría de NP-completitud se basa en el concepto de transformación polinomial. Transformación Polinomial: es una función que permite cambiar la representación de problema D1 a otro problema D2 aplicando un algoritmo determinista de tiempo polinomial. Lo anterior se puede representar como ''D1 se transforma a D2'' o D1 µ D2. Las transformaciones polinomiales son importantes porque sirven para determinar la pertenencia de los problemas a las clases P y NP, y permiten definir la clase NP- completo. Si D1 se transforma a D2 y D2 pertenece a la clase P, entonces D1 también pertenece a la clase P, porque, si para cambiar de D1 a D2 se utiliza un algoritmo de tiempo polinomial y si D2 (ya que pertenece a la clase P) tiene un algoritmo de solución que se ejecuta en tiempo polinomial, D1 debe tener asociado un algoritmo que lo resuelva también en tiempo polinomial, y D1 debe pertenecer a la clase P.
  • 7. “Análisis de Algoritmos” 7 P NP (No Determinístico Polinomial) NP-COMPLETO Existe un Algoritmo de tiempo polinómico para su resolución. Sus mejores algoritmos conocidos son no deterministas. Imposible encontrar un algoritmo eficiente para encontrar una solución óptima. El tiempo de ejecución de estos algoritmos está dado por un polinomio. Puede aplicarse un algoritmo polinómico para comprobar si una posible solución es válida o no Se basan en el concepto de Transformación Polinomial. (D1 µ D2) Ej: Factorial, búsqueda secuencial, etc. Ej: Torres de Hanoi, Ordenación por el método del Shell Ej: Vendedor Viajero, Mochila, etc. “SOLUCIONES” A PROBLEMAS NP-COMPLETOS 1. Técnicas Heurísticas 2. Aproximaciones Polinomiales 1. Un algoritmo heurístico (o simplemente heurística) puede producir una buena solución (puede que la óptima) pero también puede que no produzca ninguna solución o dar una solución no muy buena. Normalmente, se basa en un conocimiento intuitivo del programador sobre un determinado problema. Ejemplo: Para el caso del vendedor viajero se tienen 2 heurísticas: a. Realizar todas las combinaciones posibles b. Iniciar un grafo con los nodos y sin las aristas e ir agregando las aristas de menor costo que unen los vértices. 2. Aproximaciones Polinomiales: encontrar soluciones que se aproximen a la solución óptima. Siempre que se desea realizar una aproximación, existe un error relativo que afecta a esta solución, el cual está dado por: | opt(x) – c (sx) | max{opt(x), c(sx)}
  • 8. “Análisis de Algoritmos” 8 Problemas NP-Completos 1. Ciclo Hamiltoniano: es aquél que recorre todos los nodos en un camino simple. Un Ciclo Hamiltoneano es aquél que recorre todos los nodos en un camino simple. Problema: Existe un ciclo simple en G que contenga a todos los vértices? Un posible candidato para este problema puede ser verificado en tiempo polinomial, luego este problema está en la categoría NP. Consideremos el problema del ciclo Hamiltoniano “¿Tiene un grafo G un ciclo Hamiltoniano? (Aquél que recorre todos los nodos en un camino simple) Un posible candidato para este problema puede ser verificado en tiempo polinomial, luego este problema está en la categoría NP. Ejemplo:
  • 9. “Análisis de Algoritmos” 9 2. Vendedor Viajero: Recorrer todos los vértices de manera que el costo sea mínimo. No se debe pasar 2 veces por un mismo vértice. Se debe volver al punto de partida. • Se tiene un grafo completo (todos los arcos) con costos asociados a cada arco. El vendedor desea hacer un “tour” (ciclo hamiltoniano) tal que el costo sea mínimo. Ejemplo: 15 30 20 25 50 45 10 35 40 55 5 4 3 1 2 A F D B C E 4 3 3 5 7 21 9 2 35 1
  • 10. “Análisis de Algoritmos” 10 3. Camino más largo: ¿Cuál es el camino simple más largo que conecta dos nodos de un grafo? 4. Mochila: Se tiene una mochila con un peso máximo W y n objetos cada uno con un peso específico y una ganancia asociada. La idea es maximizar el uso de la mochila. Los objetos se pueden dividir para alcanzar el peso total. 5. Coloración: Existe una forma de asignar k colores a los vértices de un grafo de modo que no hayan arcos conectando vértices del mismo color? 6. Laberinto: Se tiene una matriz de N x N con una casilla de entrada (1,1) y una casilla de salida (n,n). ¿Cómo se puede llegar al final? 7. Secuenciamiento de trabajos: Se Tiene n tareas requieren un tiempo unitario en ejecutarse, y un único procesador donde ejecutarlas. En cualquier instante T = 1, 2, ... se puede ejecutar una única tarea i. La ejecución de esta tarea provocará un beneficio gi.