Análisis de Algoritmos
María Fernanda Mora Alba
Luis Manuel Román García
26 de agosto del 2015
The main subject of my talk is perhaps most directly indicated by simply asking two questions: first, is it harder to multiply than to add? And second, why?
-Alan Cobham, 1964
Contenido
- P, NP, NP-completo, NP-duro
- Inserción Directa vs Mezcla Directa
- Mínima n
- Grandes valores de n
- Tabla de complejidad
P, NP, NP-completo, NP-duro
Motivación
Everyone who could appreciate a symphony would be Mozart; everyone who could follow a step-by-step argument would be Gauss; everyone who could recognize a good investment strategy would be Warren Buffett.
- Aaronson, MIT
- La Teoría de la Complejidad (computacional) estudia qué tan difícil/fácil es resolver un problema
- Puede volverse muy técnica pero los conceptos básicos son muy intuitivos
- Nos permite entender el problema P vs NP sin necesidad de tener conocimientos matemáticos/formales
- Los problemas en Complejidad vienen en pares: Search Version and Verification Version
Preliminares: Teoría de la Complejidad
Búsqueda
Entrada: lista de números
Salida: Lista , que es el ordenamiento de
Verificación
Entrada: listas de números
y
Salida: "Sí" si es la versión ordenada de . "NO" si no.
Problema: Ordenamiento
6
1
3
4
Desordenado
6
1
1
6
1
Paso
1
6
1
3
6
2
3
6
3
6
3
1
1
3
3
1
3
4
4
6
4
6
4
6
4
5
3
4
4
3
O
Entrada: lista de números
Salida: Sublistas y de en donde la suma de es igual a la suma de . Adicionalmente una lista del mismo tamaño de que indica en qué sublista quedó cada elemento
Entrada: listas de números y
Salida: "Sí" si las sublistas correspondientes a suman mismo. "No" si no.
Problema: Partición de números
Búsqueda
Verificación
Entrada: gráfica con nodos y aristas y un conjunto de colores
Salida: Lista del mismo tamaño de tal que ningún nodo adyacente tenga el mismo color
Entrada: gráfica con nodos y aristas y una lista que asigna colores a los nodos
Salida: "Sí" si todos los nodos adyacentes tienen colores diferentes. "No" si no.
Problema: Coloración de gráficas
Búsqueda
Verificación
Clase
Un problema está en si su Versión de Búsqueda tiene una solución rápida (i.e., se resuelve en tiempo polimonial, i.e. existe un algoritmo que lo resuelve en tiempo para alguna )
Ejemplos:
- Álgebra Lineal: Multiplicación de matrices, Cálculo de determinante de una matriz, Factorización LU de matrices
- Teoría de números: Máximo común divisor
- Teoría de Gráficas: Ruta más corta, conectividad
Clase
Un problema está en si su Versión de Verificación tiene una solución rápida (i.e., se verifica en tiempo polimonial, i.e. existe un algoritmo que lo resuelve en tiempo para alguna )
Si la versión de Búsqueda de un problema tiene una solución rápida, entonces su versión de Verificación también, pues si podemos resolver la forma general del problema, podemos resolver casos particulares del mismo
Equivale a preguntarnos si:
¿Existen problemas cuya versión de verificación se puede resolver fácilmente (i.e. eficientemente, en tiempo polinomial) pero cuya versión de búsqueda no?
¿ ( ) ?
Problema: Ordenamiento
- Ambas versiones: Búsqueda y Verificación pueden resolverse fácilmente.
- Veremos dos algoritmos de Ordenamiento: Inserción Directa y Mezcla Directa.
- Entonces el problema de Ordenamiento está en y en .
Problemas: Partición de números y Coloración
- La versión de Verificación pueden resolverse fácilmente.
- A la fecha no se conocen algoritmos que resuelvan rápidamente la versión de Búsqueda.
- Estos problemas están en pero no se sabe si están en .
- Hay problemas que pueden ser traducidos a otros problemas de tal forma que al tener una solución eficiente a los segundos, se tiene una solución a los primeros.
- Existe una clase de problemas tal que cualquier problema en puede ser traducido rápidamente a un problema de esta clase.
- De modo que si encontramos una solución eficiente para un problema de esta clase, hemos encontrado un solución eficiente a todos los problemas en
- Esta clase de problemas son los
- Un problema es "al menos tan difícil como los problemas más difíciles en " -> resolver un parece implausible
- Se confunden con "non-polynomial" (se sospecha, pero no ha sido probado; si fuera así, entonces )
- Ejemplos: Problema del agente viajero
- No todos los problemas están contenidos en
- A los problemas que sí están en se les denomina
- Vimos que si logramos resolver cualquier problema l entonces logramos resolver la versión de Búsqueda de todos los problemas en
- Si además restringimos nuestro conjunto sólo a los esto significa que si tenemos una solución eficiente a la versión de Verificación, siempre podremos encontrar una solución a su versión de Búsqueda
¿Cómo esto resolvería el problema ?
- Entonces, bastaría con poder verificar soluciones a un problema y no sería necesario buscar una solución del problema en todo el espacio de búsqueda, pues siempre podríamos encontrar una solución "eficiente".
¿Cómo esto resolvería el problema ?
Gráficamente:
Un poco de humor...
Inserción Directa vs Mezcla Directa
Inserción Directa
def inser_sort(array):
N = array.size
for i in range(1, N):
aux = array[i]
k = i - 1
while (k >= 0) == True & (aux < array[k]) == True:
array[k + 1] = array[k]
k = k - 1
array[k + 1] = aux
return array
Mezcla Directa
def sort(L,R):
NL = L.size
NR = R.size
answer = np.empty(0)
i = 0
j = 0
k = 0
while (i < NL) == True & (j < NR) == True:
if L[i] <= R[j]:
answer = np.hstack([answer, L[i]])
k = k + 1
i = i + 1
else:
answer = np.hstack([answer, R[j]])
k = k + 1
j = j + 1
if i < NL:
answer = np.hstack([answer, L[i::]])
elif j < NR:
answer = np.hstack([answer, R[j::]])
return answer
Ordenamiento
Mezcla Directa
def mix(array):
N = array.size
if N == 1:
return array
return sort(mix(array[0:N/2]), mix(array[N/2:N])
Mezcla
En vivo
Aquí pueden probar nuestro código.
Análisis teórico
Inserción
El peor caso corre en un tiempo de n el número de elementos a ordenar.
El peor caso corre en un tiempo de n el número de elementos a ordenar.
Mezcla
Análisis teórico
Buscamos n tal que
donde
siempre que
Comparativo
Comparativo
Mínima n
Encontrar
Solución
Solución (¿Única?)
Solución (¿Única?)
Soluciones
-0.096704034
0.103657816
14.324727836
Encontrar
Solución
Solución (¿Única?)
Soluciones
1.039392
15.425424
Grandes valores de n
Grandes Valores de n
En esta sección se compara el desempeño de los algoritmos de ordenamiento de inserción directa y mezcla para grandes valores de n.
Mezcla
- 100,000
- 1,000,000
- 10,000,000
9.9338 seg.
1315.5625 seg.
198485.84985 seg.
55.13 hr.
21.92 min.
Grandes Valores de n
Inserción
- 10,000
- 100,000
- 1,000,000
46.15705 seg.
4624.5704 seg.
77.07 min.
Tabla de complejidad
Tabla: tiempos de solución
Gracias
Análisis de Algoritmos - Presentación 1
By Sophie Germain
Análisis de Algoritmos - Presentación 1
Presentación para la clase de Algoritmos
- 1,376