PPP - Algoritmos

246

Transcript of PPP - Algoritmos

Page 1: PPP - Algoritmos

PPP

February �� ����

Page 2: PPP - Algoritmos

Contents

� Introducci�on ���� Algoritmos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

����� An�alisis de algoritmos � � � � � � � � � � � � � � � � � � � � ������ Dise�no de algoritmos � � � � � � � � � � � � � � � � � � � � � ��

��� Modelos computacionales � � � � � � � � � � � � � � � � � � � � � � ������� M�aquina de Turing � � � � � � � � � � � � � � � � � � � � � � ������� Maquina RAM de costo �jo � � � � � � � � � � � � � � � � � ������� Maquina RAM de costo variable � � � � � � � � � � � � � � �

��� Un problema b�asico elevando un n�umero a una potencia� � � � � ����� Resumen y aspectos clave � � � � � � � � � � � � � � � � � � � � � � ���� Ejercicios � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

� Algoritmos iterativos ����� Algoritmos iterativos � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� Sort por burbujeo � � � � � � � � � � � � � � � � � � � � � � ������� Insert sort � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

��� Orden de un algoritmo � � � � � � � � � � � � � � � � � � � � � � � � ����� Notacion �O� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� O�g�n�� � � � � � � � � � � � � � � � � � � � � � � � � � � � ������� ��g�n�� � � � � � � � � � � � � � � � � � � � � � � � � � � � ������� ��g�n�� � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

��� El problema de la distancia m�inima en el plano � � � � � � � � � � ������� Soluci�on iterativa � � � � � � � � � � � � � � � � � � � � � � � ������� An�alisis � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

�� Resumen y puntos clave � � � � � � � � � � � � � � � � � � � � � � � ����� Ejercicios � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

� Algoritmos Recursivos ����� Algoritmos recursivos � � � � � � � � � � � � � � � � � � � � � � � � ����� Recurrencias � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� El m�etodo de sustituci�on � � � � � � � � � � � � � � � � � � � ������� El m�etodo iterativo � � � � � � � � � � � � � � � � � � � � � � ������ El teorema maestro de las recurrencias � � � � � � � � � � � ������� Otras herramientas � � � � � � � � � � � � � � � � � � � � � � ��

Page 3: PPP - Algoritmos

��� Ejemplos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ������� Ejemplo I� �Messier� � � � � � � � � � � � � � � � � � � � � � ������� Ejemplo II � � � � � � � � � � � � � � � � � � � � � � � � � � ��

��� C�alculo de n�umeros de Fibonacci � � � � � � � � � � � � � � � � � � ������� Soluci�on recursiva � � � � � � � � � � � � � � � � � � � � � � ������� Solucion iterativa � � � � � � � � � � � � � � � � � � � � � � � ������� Una soluci�on mejor � � � � � � � � � � � � � � � � � � � � � � ������� Conclusiones � � � � � � � � � � � � � � � � � � � � � � � � � �

�� Resumen y puntos clave � � � � � � � � � � � � � � � � � � � � � � � ���� Ejercicios � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

� Divide � Conquer ����� Divide � Conquer � � � � � � � � � � � � � � � � � � � � � � � � � � ����� Merge Sort � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� Propiedades � � � � � � � � � � � � � � � � � � � � � � � � � � ������ Optimizaciones y trucos � � � � � � � � � � � � � � � � � � � ������ Resumen MergeSort � � � � � � � � � � � � � � � � � � � � � �

��� El problema de la selecci�on � � � � � � � � � � � � � � � � � � � � � ������ Cribas � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ������ Eligiendo el pivote � � � � � � � � � � � � � � � � � � � � � � ������ Particionando � � � � � � � � � � � � � � � � � � � � � � � � � �

��� Problemas no tan simples Como multiplicar dos n�umeros � � � � ������ Dividir para conquistar la multiplicaci�on � � � � � � � � � � ������ El m�etodo de Gauss � � � � � � � � � � � � � � � � � � � � � �

�� El problema de los puntos mas cercanos� Segunda parte � � � � � ����� An�alisis � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

��� Resumen y puntos clave � � � � � � � � � � � � � � � � � � � � � � � ����� Ejercicios � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

Algoritmos Aleatorizados �� Algoritmos aleatorizados � � � � � � � � � � � � � � � � � � � � � � � �

���� Algoritmos tipo Las Vegas � � � � � � � � � � � � � � � � � � ����� Algoritmos tipo Montecarlo � � � � � � � � � � � � � � � � � �

�� Quick Sort � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ����� Fundamentos de Quick Sort � � � � � � � � � � � � � � � � � ������ Algoritmo para particionar el vector � � � � � � � � � � � � ������ An�alisis de QuickSort � � � � � � � � � � � � � � � � � � � � ������ La ventaja del algoritmo aleatorizado � � � � � � � � � � � ����� Resumen QuickSort � � � � � � � � � � � � � � � � � � � � � ��

�� El problema de los puntos mas cercanos en el plano� Parte �� � � ������ Algoritmos aleatorizados incrementales � � � � � � � � � � � ������ El algoritmo � � � � � � � � � � � � � � � � � � � � � � � � � ������ Analisis � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

�� Testeando primalidad � � � � � � � � � � � � � � � � � � � � � � � � ������ Algoritmo por fuerza bruta � � � � � � � � � � � � � � � � � ������ Algoritmo por fuerza bruta mejorado � � � � � � � � � � � � ��

Page 4: PPP - Algoritmos

���� El pequenio teorema de Fermat � � � � � � � � � � � � � � � ������ Algoritmo aleatorizado tipo Montecarlo � � � � � � � � � � ��

� Resumen y puntos clave � � � � � � � � � � � � � � � � � � � � � � � ���� Ejercicios � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

Sort ����� Algoritmos de Sort � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� Algoritmos no recursivos � � � � � � � � � � � � � � � � � � � ������� Algoritmos recursivos � � � � � � � � � � � � � � � � � � � � ��

��� HeapSort � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ������� Heaps � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ������� HeapSort � � � � � � � � � � � � � � � � � � � � � � � � � � � �

��� L�imite inferior de los algoritmos de sort � � � � � � � � � � � � � � ����� Algoritmos de sort lineales � � � � � � � � � � � � � � � � � � � � � � ��

����� Counting Sort � � � � � � � � � � � � � � � � � � � � � � � � � ������� Radix Sort � � � � � � � � � � � � � � � � � � � � � � � � � � ��

�� Resumen y puntos clave � � � � � � � � � � � � � � � � � � � � � � � ����� Ejercicios � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

� Grafos ���� Grafos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���� Introducci�on a la Teor�ia de Grafos � � � � � � � � � � � � � � � � � �

����� Grafos y Grafos Dirigidos � � � � � � � � � � � � � � � � � � ������ V�ertices adyacentes � � � � � � � � � � � � � � � � � � � � � ������� Grafos pesados � � � � � � � � � � � � � � � � � � � � � � � � ������� Grado de un v�ertice � � � � � � � � � � � � � � � � � � � � � ������ Caminos y ciclos � � � � � � � � � � � � � � � � � � � � � � � ������� Ciclo Hamiltoniano � � � � � � � � � � � � � � � � � � � � � � ������� Ciclo Euleriano � � � � � � � � � � � � � � � � � � � � � � � � ������� Grafo ac�ilico � � � � � � � � � � � � � � � � � � � � � � � � � ������� Grafo conexo � � � � � � � � � � � � � � � � � � � � � � � � � �������� Componentes conexos� �arboles y bosques � � � � � � � � � �������� Grafos fuertemente conexos y componentes fuertemente

conexos � � � � � � � � � � � � � � � � � � � � � � � � � � � � �������� Grafo dirigido ac�iclico� �GDA� � � � � � � � � � � � � � � � �������� Grafos Isomorfos � � � � � � � � � � � � � � � � � � � � � � � �������� Subgrafos y grafo inducido � � � � � � � � � � � � � � � � � � �������� Grafos completos� Cliques� � � � � � � � � � � � � � � � � � ��������� Conjunto independiente � � � � � � � � � � � � � � � � � � � ��������� Grafo bipartito � � � � � � � � � � � � � � � � � � � � � � � � ��������� Grafo complemento� Grafo transpuesto � � � � � � � � � � � ��������� Grafos planares� Formas planares � � � � � � � � � � � � � � ��������� Tamanios � � � � � � � � � � � � � � � � � � � � � � � � � � � ��������� Grafos dispersos � � � � � � � � � � � � � � � � � � � � � � � ���

��� Representaci�on de Grafos � � � � � � � � � � � � � � � � � � � � � � �������� Matriz de adyacencias � � � � � � � � � � � � � � � � � � � � ���

Page 5: PPP - Algoritmos

����� Lista de Adyacencias � � � � � � � � � � � � � � � � � � � � � ������ Algoritmos para Grafos � � � � � � � � � � � � � � � � � � � � � � � ��

����� BFS � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ������� DFS � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

�� Resumen y puntos clave � � � � � � � � � � � � � � � � � � � � � � � ������ Ejercicios � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

� Programaci�on din�amica ������ Introducci�on a la programaci�on din�amica � � � � � � � � � � � � � � ���

����� Caracter�isticas de un problema de programaci�on din�amica ������ Multiplicaci�on en cadena de matrices � � � � � � � � � � � � � � � � ���

����� Aproximaci�on por fuerza bruta � � � � � � � � � � � � � � � �������� Soluci�on por programaci�on din�amica � � � � � � � � � � � � ���

��� El problema de todas las distancias m�inimas en un grafo � � � � � �������� De�nici�on del problema � � � � � � � � � � � � � � � � � � � �������� Soluci�on por programaci�on din�amica � � � � � � � � � � � � �������� Primera soluci�on � � � � � � � � � � � � � � � � � � � � � � � �������� Algoritmo de Floyd Warshall � � � � � � � � � � � � � � � � ���

��� El problema de la subsecuencia com�un de m�axima longitud � � � ������� Soluci�on por programaci�on din�amica � � � � � � � � � � � � ������� An�alisis � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

�� Resumen y puntos clave � � � � � � � � � � � � � � � � � � � � � � � ������ Ejercicios � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

� Algoritmos Golosos ������ Algoritmos golosos� principios� � � � � � � � � � � � � � � � � � � � ���

����� Fundamentos � � � � � � � � � � � � � � � � � � � � � � � � � ������ El problema de la selecci�on de actividades � � � � � � � � � � � � � ���

����� Ejemplo � � � � � � � � � � � � � � � � � � � � � � � � � � � � �������� Algoritmo goloso para la selecci�on de actividades � � � � � �������� An�alisis � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

��� El problema de los caminos m�inimos �parte II� � � � � � � � � � � �������� Algoritmo de Dijkstra para caminos m�inimos � � � � � � � �������� Mecanismo de relajaci�on � � � � � � � � � � � � � � � � � � � �������� El algoritmo de de Dijkstra � � � � � � � � � � � � � � � � � �������� Validaci�on � � � � � � � � � � � � � � � � � � � � � � � � � � � ������ An�alisis � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

��� El problema del �arbol generador m�inimo � � � � � � � � � � � � � � �������� Algoritmo de Kruskal � � � � � � � � � � � � � � � � � � � � �������� An�alisis � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

�� Resumen y puntos clave � � � � � � � � � � � � � � � � � � � � � � � ����� Ejercicios � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

Page 6: PPP - Algoritmos

�� Estructuras de datos avanzadas ������ Revisi�on de alguna estructuras de datos simples � � � � � � � � � � ��

������ Pilas � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �������� Colas � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �������� Listas � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �������� Arboles Binarios � � � � � � � � � � � � � � � � � � � � � � � ������� Arboles AVL � � � � � � � � � � � � � � � � � � � � � � � � � ��

���� An�alisis amortizado � � � � � � � � � � � � � � � � � � � � � � � � � ������� M�etodo de agregacion � � � � � � � � � � � � � � � � � � � � ������� M�etodo contable � � � � � � � � � � � � � � � � � � � � � � � �������� M�etodo de los potenciales � � � � � � � � � � � � � � � � � � ��

���� Heaps Binomiales � � � � � � � � � � � � � � � � � � � � � � � � � � � �������� Arboles Binomiales � � � � � � � � � � � � � � � � � � � � � � ��������� Estructura de un Heap Binomial � � � � � � � � � � � � � � ��������� Implementaci�on � � � � � � � � � � � � � � � � � � � � � � � � ��������� Implementaci�on de las operaciones � � � � � � � � � � � � � ���

���� Heaps de Fibonacci � � � � � � � � � � � � � � � � � � � � � � � � � � ����� Resumen de Heaps � � � � � � � � � � � � � � � � � � � � � � � � � � ������ Union Find � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

������ Implementaci�on usando listas � � � � � � � � � � � � � � � � ��������� Segunda Implementaci�on usando listas � � � � � � � � � � � ��������� Implementaci�on usando Forests � � � � � � � � � � � � � � � ���

���� Hash Tables � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �������� Operaciones � � � � � � � � � � � � � � � � � � � � � � � � � � �������� Resoluci�on de colisiones � � � � � � � � � � � � � � � � � � � ��������� Funciones de Hashing � � � � � � � � � � � � � � � � � � � � ���

���� Resumen y puntos clave � � � � � � � � � � � � � � � � � � � � � � � ������� Ejercicios � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

�� Complejidad ������ Introducci�on � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

������ Reducciones � � � � � � � � � � � � � � � � � � � � � � � � � � ������� Fundamentos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

������ El problema del viajante � � � � � � � � � � � � � � � � � � � ������� Complejidad � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

������ La clase P de problemas � � � � � � � � � � � � � � � � � � � ��������� La �eclase NP de problemas � � � � � � � � � � � � � � � � � ��������� La clase de problemas NP Completos � � � � � � � � � � � � ��������� La clase de problemas No NP � � � � � � � � � � � � � � � � ���

���� Reducciones � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��������� Ejemplo I � � � � � � � � � � � � � � � � � � � � � � � � � � � ��������� Ejemplo II� � � � � � � � � � � � � � � � � � � � � � � � � � � ���

��� Algunos problemas NP Completos � � � � � � � � � � � � � � � � � �������� SAT � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �������� � SAT �SAT � � SAT� � � � � � � � � � � � � � � � � � � � � �������� Programaci�on Lineal Entera �SAT � PLE� � � � � � � � � ���

Page 7: PPP - Algoritmos

����� Vertex Cover �� SAT � VC� � � � � � � � � � � � � � � � � ������� Conjunto Independiante �VC � IS� � � � � � � � � � � � � � �������� Clique �IS � Clique� � � � � � � � � � � � � � � � � � � � � � �������� Partici�on Entera �VC � IP� � � � � � � � � � � � � � � � � � ���

���� T�ecnicas pa�era demostrar que un problema es NP Completo � � � ��������� Restricci�on � � � � � � � � � � � � � � � � � � � � � � � � � � ��������� Reemplazo local � � � � � � � � � � � � � � � � � � � � � � � ��������� Recomendaciones � � � � � � � � � � � � � � � � � � � � � � � ���

���� Teor�ia formal del los problemas NP Completos � � � � � � � � � � �������� M�aquinas de Turing No Determin�isticas � � � � � � � � � � ��������� El teorema de Cook � � � � � � � � � � � � � � � � � � � � � ���

���� Resumen y puntos clave � � � � � � � � � � � � � � � � � � � � � � � ������� Ejercicios � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

�� ��� Sorting Networks ������� Sort utilizando varios procesadores � � � � � � � � � � � � � � � � � ������� Sorting Networks � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

������ Principio de paralelismo � � � � � � � � � � � � � � � � � � � ��������� An�alisis de redes de ordenamiento � � � � � � � � � � � � � ��������� Ejemplo I � � � � � � � � � � � � � � � � � � � � � � � � � � � ��������� Ejemplo II � � � � � � � � � � � � � � � � � � � � � � � � � � ���

���� El principio del � � � � � � � � � � � � � � � � � � � � � � � � � � � � ������� Construcci�on de una red de ordenamiento � � � � � � � � � � � � � ���

������ Secuencias Bit�onicas � � � � � � � � � � � � � � � � � � � � � ��������� Bitonic Sorter � � � � � � � � � � � � � � � � � � � � � � � � � ��������� Merger � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��������� Sorting Network � � � � � � � � � � � � � � � � � � � � � � � ���

��� Resumen y puntos clave � � � � � � � � � � � � � � � � � � � � � � � ������� Ejercicios � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

�� Aproximaci�on y Heur�isticas ������� Introducci�on � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ������� Algoritmos de aproximaci�on � � � � � � � � � � � � � � � � � � � � � ���

������ Tasa de aproximaci�on � � � � � � � � � � � � � � � � � � � � ��������� Tasa de error � � � � � � � � � � � � � � � � � � � � � � � � � ��������� Aproximando problemas de optimizaci�on � � � � � � � � � � ���

���� Vertex Cover �VC� � � � � � � � � � � � � � � � � � � � � � � � � � � ��������� La heur�istica del dos por uno � � � � � � � � � � � � � � � � ��������� La heur�istica golosa � � � � � � � � � � � � � � � � � � � � � ���

���� Aproximaciones y reducciones � � � � � � � � � � � � � � � � � � � � ������ El problema del centro equidistante � � � � � � � � � � � � � � � � � ���

����� Aproximaci�on golosa � � � � � � � � � � � � � � � � � � � � � �������� Tasa de aproximaci�on � � � � � � � � � � � � � � � � � � � � ��

���� El problema del viajante � � � � � � � � � � � � � � � � � � � � � � � ��������� Aproximaci�on para el problema Euclideano del viajante � ���

���� Otros problemas � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

Page 8: PPP - Algoritmos

������ K Coloring � � � � � � � � � � � � � � � � � � � � � � � � � � ��������� Arboles de decision � � � � � � � � � � � � � � � � � � � � � � ��������� Clique � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��������� Set Cover � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

���� Resumen y puntos clave � � � � � � � � � � � � � � � � � � � � � � � ���

�� Indices ������� Indice de algoritmos � � � � � � � � � � � � � � � � � � � � � � � � � ������� Indice Tematico � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

Page 9: PPP - Algoritmos

Chapter �

Introducci�on

��� Algoritmos

�Un algoritmo es un conjunto de pasos claramente de�nidos que a partirde una cierta entrada �input� produce una determinada salida �out�put���

Algoritmos y programas Debemos distinguir algoritmo de programa� unalgoritmo es independiente del lenguaje en el cual se programa� de la m�aquina enla cual se implemente y de otras restricciones que hacen a la puesta en operaci�ondel algoritmo� Desde el punto de vista del estudio de los algoritmos los mismospueden considerarse como entidades matem�aticas abstractas independientes derestricciones tecnol�ogicas�

Validaci�on de un algoritmo Un algoritmo es correcto si el resultado queproduce siempre resuelve un determinado problema a partir de una entradav�alida� Demostrar ya sea en forma rigurosa o intuitiva que un algoritmo escorrecto es el primer paso indispensable en el an�alisis de un algoritmo� A estafase del an�alisis de algoritmos se la conoce como validaci�on del algoritmo�Los algoritmos que no son correctos a veces pueden ser �utiles si� por ejemplo�producen una respuesta aproximada a un problema particularmente dif�icil enforma e�ciente�

Importante El primer paso en todo an�alisis de un algoritmo es valid arlo� es decir� demostrar que el algoritmo es correcto�

Algoritmos determin�isticos Un algoritmo es determin�istico si la respuestaque produce se puede conocer a partir de los datos de entrada� Un algoritmo es

Page 10: PPP - Algoritmos

no determin�istico cuando no es determin�istico� Que un algoritmo sea o no seadetermin�istico no aporta dato alguno sobre la correcci�on del algoritmo�

El estudio de los algoritmos se puede dividir en dos grandes categor�ias elan�alisis de algoritmos y el disenio de algoritmos�

����� An�alisis de algoritmos

El an�alisis de algoritmos mediante el uso de herramientas como por ejemplo laevaluaci�on de costos intenta determinar que tan e�ciente es un algoritmo pararesolver un determinado problema� En general el aspecto mas interesante aanalizar de un algoritmo es su costo�

Costo de tiempo

Suele ser el mas importante� indica cuanto tiempo insume un determinado algor itmo para encontrar la soluci�on a un problema� se mide en funci�on de la cantidado del tamanio de los datos de entrada�

Costo de espacio

Mide cuanta memoria �espacio� necesita el algoritmo para funcionar correcta mente�

Consideremos por un momento un programa que juega al ajedrez� el programafuncionar en base a un �unico algoritmo que se llama SearchBestMove� Quedevuelve para una posici�on de piezas dada cual es la mejor movida para uncierto bando �blancas o negras�� Con este algoritmo el programa es sencillo�dependiendo de quien empiece lo �unico que debe hacer es aplicar el algoritmocada vez que le toque� esperar la movida del contrario y luego aplicar el algoritmoa la nueva posici�on� Pensemos ahora en el algoritmo SearchBestMove� estealgoritmo para ser �optimo deber�ia analizar todas las posibles jugadas� todas lasposibles respuestas a dichas jugadas y asi sucesivamente� formando un �arbol dejugadas posibles del cual selecciona la jugada que produce mejor resultado �nal�Este aunque funcione en forma ultra veloz tiene un grave problema de espacio�no hay memoria su�ciente en ninguna m�aquina construida por el hombre paraalmacenar todas las posibles combinaciones de jugadas�

Importante El an�alisis del costo de un algoritmo comprende el costoen tiempo y en espacio�

Page 11: PPP - Algoritmos

����� Dise�no de algoritmos

El disenio de algoritmos se encarga de encontrar cual es el mejor algoritmopara un problema determinado� en general existen algunos paradigmas b�asicosque pueden aplicarse para encontrar un buen algoritmo� Es claro que esta esuna tarea dif�icil que requiere de conocimientos espec�i�cos y de una habilidadparticular� Algunas de las t�ecnicas mas utilizadas en el disenio de algoritmosson las siguientes

� Dividir para conquistar�

� Algoritmos aleatorizados�

� Programaci�on din�amica�

� Algoritmos golosos �Greedy��

� Algoritmos de heur�isticos�

� Reducci�on a otro problema conocido�

� Uso de estructuras de datos que solucionen el problema�

��� Modelos computacionales

Para poder estudiar en detalle un algoritmo debemos �jar un marco en el cualpodamos probar y analizar un algoritmo� asi como tambi�en que permita com parar dos algoritmos entre s�i� Este ambiente necesario para el estudio de losalgoritmos se conoce como modelo computacional��

����� M�aquina de Turing

La m�aquina de Turing es el mas b�asico de los modelos computacionales y fuepropuesta por el c�elebre matem�aticoAlan Turing� La m�aquina de Turing manejatres s�imbolos que llamaremos �a� � �b� y �espacio�� Adem�as cuenta con unamemoria in�nita que puede verse como una cinta in�nita� La m�aquina es capazde leer en cada paso un s�imbolo de la cinta� escribir el mismo u otro s�imbolo enla cinta y avanzar o retroceder una posici�on� Por lo tanto podemos representarun programa para la m�aquina de Turing como un aut�omata de estados �nitosdonde cada estado tiene la siguiente notaci�on�

Ver �gura �

��

Page 12: PPP - Algoritmos

Donde s� es el s�imbolo que la m�aquina lee de la cinta �a� � �b� o ��� � s� esel s�imbolo que la m�aquina escribe en la cinta en la misma posici�on donde ley�os� y el �� o � indica si se avanza o se retrocede una posici�on en la cinta� La�echa indica cual es el estado hacia el cual se desplaza la m�aquina� que podr�iaser el mismo estado donde estaba antes�

Aunque en principio pueda parecer increible cualquier problema que puedaresolver una computadora puede ser resuelto en la m�aquina de Turing� Esto fuedemostrado oportunamente por Alan Turing y no es tema de esta materia�

Importante Cualquier problema que una computadora pueda resolverpuede resolverse en una m�aquina de Turing�

Ejemplo � En algun lugar de la cinta se pueden encontrar dos o mas �a�seguidas� Copiar una �b� a continuaci�on de la �ultima �a��

Ej ��aaa��� � ����aaab��

Ejemplo � Ejemplo � Copiar todas las�a� de la memoria a continuacin delas �b��

Ej ����aaa����bbbbb��� � ��������bbbbbaaa���

��

Page 13: PPP - Algoritmos

Considerando al s�imbolo �a� como un ��� y al smbolo �b� como un ��� lam�aquina de Turing es capaz de realizar operaciones aritm�eticas� Como sumar�restar multiplicar� dividir etc� Si representamos los caracteres de alguna formabinaria la m�aquina es capaz de trabajar con strings� �nalmente podr�iamos llegara conjeturar que la m�aquina es capaz de realizar cualquier operaci�on con unamemoria binaria y por ende es capaz de operar como cualquier computadora�

Costos En la m�aquina de Turing los costos se pueden medir de la siguienteforma

Costo de tiempo Es la cantidad de transiciones �cambios de estado que real iza la m�aquina�� contando tambien aquellas transiciones que parten de un estadoy vuelven al mismo�

Por ejemplo nuestro programa para la mquina de Turing del ejemplo �� Parael caso �aaaaa��� insume transiciones y la cinta queda de la forma �aaaab��

Costo de espacio Se puede medir como la cantidad de estados del programa�Cada estado en la m�aquina de Turing representa una cierta memoria� por loque medir la cantidad de estados es una buena forma de medir el costo espacial

��

Page 14: PPP - Algoritmos

de un algoritmo� Nuestro primer algoritmo para la m�aquina de Turing tiene �estados�

En la m�aquina de Turing el an�alisis de la e�ciencia de un algoritmo pasapor averiguar si no existe un programa que pueda resolver el mismo problemaen forma mas r�apida �empleando menos transiciones� o bien utilizando menosespacio �menor cantidad de estados��

La m�aquina de Turing ofrece varias ventajas desde el punto de vista del estu dio de algoritmos� En primer lugar es un ambiente computacional completoya que como demostrara Alan Turing cualquier problema computacionalmentesolucionable puede resolverse usando una m�aquina de Turing� En segundo lugarel modelo que plantea es ideal para el c�alculo de costos de algoritmos ya sea entiempo como en espacio� Lamentablemente la m�aquina de Turing es un modelopoco pr�actico ya que al ser demasiado abstracta programar resulta extrema damente complejo� Adem�as no es una buena referencia para la obtenci�on deprogramas �reales� ya que un programa hecho para la m�aquina de Turing notiene relaci�on alguna con un programa realizado en un lenguaje de prop�osito gen eral� Es por esto que destacando la nobleza de la m�aquina de Turing pasamosa otros modelos un tanto mas cercanos a la realidad�

����� Maquina RAM de costo �jo

La m�aquinaRAM proviene de Random Access Memory� Y es una m�aquina idealmuy similar a una computadora actual aunque con algunas simpli�caciones� Losprogramas de la m�aquina RAM se almacenan en memoria �en la m�aquina deTuring los programas no se almacenan �� Puede suponerse que todos los accesosa memoria tienen el mismo costo �en tiempo� y que todas las instruccionestienen un costo constante e id�entico �en tiempo�� El set de instrucciones dela mquina RAM est�a compuesto por la gran mayor�ia de las instrucciones quepodemos encontrar en un lenguaje de alto nivel� Un programa para la m�aquinaRAM se escribe en un pseudoc�odigo especial en el cual vamos a adoptar algunasconvenciones b�asicas�

Las llaves solo son necesarias si su ausencia afecta la claridad del c�odigo� Lospasajes de par�ametros a una funci�on se hacen por valor� El acceso a un elementode un arreglo cuesta lo mismo que el acceso a una variable�

El algoritmo � tiene instrucciones de las cuales se ejecutan unicamente ��Por lo tanto el costo del programa en tiempo es de C ��� siendo C una constanteque indica cuanto tiempo tarda en ejecutarse una instrucci�on� El espacio quenecesita el programa es el espacio coupado por las variables A y B� Es decir� �Ec siendo Ec el espacio que ocupa una variable�

�Por lo menos no se almacenan en la memoria de la m�aquina�cinta�

��

Page 15: PPP - Algoritmos

Algorithm � Este es un ejemplo

y � � �� AsignacionA��� � � �� Asignacion a un elemento de un vector�� if then elseif n � � thenX � w

elseX � y

end if�� ciclo whilewhile n � � don� n� �

end while�� ciclo forfor i � � to �� doA�i� � �

end for

Algorithm � Ejemplo simple

a� �b� a � if b �� thena� �

elsea� �

end if

��

Page 16: PPP - Algoritmos

La mquina RAM de costo �jo es mucho mas realista que la m�aquina de Turingya que puede verse como� claramente� a partir de un algoritmo escrito para lam�aquina RAM podemos desarrollar un algoritmo escrito en C � Pascal u otrolenguaje para una computadora actual� Este acercamiento a la realidad enel c�odigo de la m�aquina RAM no se evidencia en cuanto al costo ya que elmodelo planteado en el cual todas las instrucciones tienen un costo �jo no esreal ya que hay algunas instrucciones que son claramente mas costosas que otras�por ejemplo una multiplicaci�on insume mas tiempo que una suma en cualquiercomputadora�

����� Maquina RAM de costo variable

En la m�aquina RAM de costo variable cada instrucci�on Ii tiene asociado un costoCi que le es propio y que depende del costo de implementar dicha instrucci�on�

Algorithm � Ejemplo simple II

a� �b� a � if b �� thena� �

elsea� �

end if

Este programa cuesta ahora

� �C� � � �C� � � �C�

Donde�

C� � costo de una asignaci���o�n�

C� � costo de una multiplicaci���o�n�

C � costo de comparar dos n���u�meros�

El costo del espacio en la mquina RAM de costo variable es igual al de lam�aquina RAM de costo �jo�

Claramente observamos que pese a ganar claridad en cuanto a la escriturade programas perdemos precisi�on y se hace msa complejo el c�alculo de costos�Mas adelante veremos algunas herramientas que permitan simpli�car el c�alculode dichos costos�

Page 17: PPP - Algoritmos

Importante A partir de este momento adoptaremos como base parael an�alisis de los algoritmos que estudiaremos la m�aquina RAM de costovariable�

��� Un problema b�asico� elevando un n�umero auna potencia�

Supongamos que estamos utilizando un modelo de m�aquina RAM �de costovariable� en la cual no disponemos de una instrucci�on que eleve un n�umeroa una potencia� como s�i disponemos de una instrucci�on que multiplique a unn�umero por otro podemos escribir el siguiente algoritmo�

Algorithm � Potencia�x�y� Calcula xy

Require� x � �if y �� � then

return �elseresult � xfor I � � to y � � doresult� result � x

end forend ifreturn result

Cu�anto cuesta el algoritmo en tiempo �� La comparaci�on del if se ejecutasiempre� y supongamos que y no es cero �lo cual va a pasar la mayor�ia de lasveces�� Se ejecuta una asignaci�on y luego y � � veces una multiplicaci�on�

T � C� �C� � �y � �� � �C� �C��

C� � costo de comparar dos nmeros�

C� � costo de realizar una asignacion�

C � costo de realizar una multiplicacion�

Observemos que el algoritmo no es e�ciente ya que realiza demasiadas multi plicaciones� por ejemplo si queremos hacer �� el algoritmo calcula�

�� � � � � � � � � � � � � � � � �

Cuando podr�ia hacer

��

Page 18: PPP - Algoritmos

A � � � �����

B � A �A����

C � B �B����

Con lo cual en lugar de � multiplicaciones se utilizan solamente tres� Podemosescribir entonces el siguiente algoritmo�

Algorithm Potencia��x�y� Calcula xy

Require� x � �if y �� � then

return �end ifr� �if y � � thenr � Potencia��x� y���r � r � r

end ifif y mod � �� � thenr � r � x

end ifreturn r

Veamos que pasa con Potencia������

r � �

� �

r � Potencia��� �

r� � �

� �

r� � Potencia��� ��

r � ��

y �� �

y � � � �

r � ���

return �

r� � ���

y � � � �

r� � � � �

return ��

��

Page 19: PPP - Algoritmos

r � � � �

y � � � �

r � �� � �

return ����

Como podemos ver el algoritmo es recursivo y en nuestro ejemplo para y � �realiz�o multiplicaciones� Contra las seis que har�iamos en el algoritmo tradi cional� Para valores mas grandes de y la diferencia entre el primer y el segundoalgoritmo se hace mucho mas notoria�

Calcular el costo de nuestro nuevo algoritmo es uno de los temas a desarrollaren las pr�oximas clases�

��� Resumen y aspectos clave

El prop�osito de esta clase fue introducir el estudio de los algoritmos� explicandoen que consiste el an�alisis y el disenio de los algoritmos� Dentro del an�alisis dealgoritmos explicamos la necesidad de contar con un modelo computacionalque permita calcular el costo de un algoritmo� Vimos que el costo de un al goritmo se puede calcular en tiempo �cu�anto tarda el algoritmo� o en espacio�cu�anta memoria requiere un algoritmo�� En general en el curso vamos a tra bajar estudiando el costo en tiempo de los algoritmos� vigilando que el costoespacial no sea excesivo�

El disenio de algoritmos es un �area que requiere de habilidad especial ya queno siempre es claro como encontrar un algoritmo e�ciente para un determinadoproblema� Mencionamos algunos paradigmas b�asicos que veremos a lo largo delcurso mediante los cuales podremos diseniar mejores algoritmos�

Entre los modelos computacionales revisados la m�aquina de Turing permitecalcular con precisi�on el costo en tiempo o espacio de un algoritmo y permitetambien resolver cualquier problema� pero no nos permite escribir algoritmos enuna forma cercana a la que ofrecen hoy en d�ia los lenguajes de programaci�on�La m�aquina RAM nos permite una escritura mas clara de los algoritmos perointroduce algunas complicaciones en el c�alculo de costos� mas adelante veremoscomo resolver estos problemas�

Como una introducci�on al disenio y an�alisis de algoritmos presentamos elproblema de elevar un n�umero a una determinada potencia empleando la menorcantidad de multiplicaciones posibles�

��

Page 20: PPP - Algoritmos

��� Ejercicios

�� Realizar en la m�aquina de Turing un programa que sume dos n�umerosbinarios almacenados en memoria �suponerlos de igual longitud��

�� Realizar en la m�aquina de Turing un programa que reste dos n�umerosbinarios almacenados en memoria �suponerlos de igual longitud��

�� Utilizar el segundo algoritmo de potencia para calcular ��� ��� ���� intentardeducir cuantas multiplicaciones realiza el algoritmo en funci�on del n�umeroy �Aproximadamente�� Probar con mas valores si hace falta�

�� �Para pensar� Cual es la cantidad m�inimade multiplicaciones que podemosemplear para calcular XN � por ejemplo para X � ��� X � ��� X � �� etc�En base a esto es �optimo nuestro segundo algoritmo o puede existir unalgoritmo mejor�

� Escribir una versi�on iterativa del algoritmo potencia��

��

Page 21: PPP - Algoritmos

Chapter �

Algoritmos iterativos

��� Algoritmos iterativos

Los algoritmos iterativos son aquellos que se basan en la ejecuci�on de ciclos�que pueden ser de tipo for�while�repeat�etc�La gran mayor�ia de los algoritmostienen alguna parte iterativa y muchos son puramente iterativos� Analizar elcosto en tiempo de estos algoritmos implica entender cuantas veces se ejecutacada una de las instrucciones del algoritmo y cual es el costo de cada una de lasinstrucciones�

����� Sort por burbujeo

Uno de los temas importantes del curso es el an�alisis de algoritmos de sort� porlo que vamos a empezar con uno de los mas simples el burbujeo�

Algorithm Burbujeo�A�n�� Ordena el vector A�

for i � � to n� � dofor j � i � � to n doif A�j� � A�i� thenSwap�A�i�� A�j��

end ifend for

end for

Ejemplo�

� � � � � � Compara A��� con A���

� � � � � � Compara A��� con A��

� � � � � � Compara A��� con A���

� � � � � � Compara A��� con A���

� � � � � � Compara A��� con A���

��

Page 22: PPP - Algoritmos

� � � � � � Compara A��� con A��

� � � � � � Compara A��� con A���

� � � � � � Compara A��� con A��

� � � � � � Compara A��� con A���

� � � � � � Compara A��� con A���

� � � � � � Compara A��� con A���

� � � � � � Compara A��� con A���

� � � � � � Compara A��� con A��

� � � � � � Compara A��� con A���

� � � � � � Compara A�� con A���

� � � � � � Compara A�� con A���

� � � � � � Compara A�� con A���

� � � � � � Compara A�� con A��

� � � � � � Compara A�� con A���

� � � � � � Compara A��� con A���

� � � � � � Compara A��� con A���

� � � � � � Compara A��� con A���

� � � � � � Compara A��� con A��

� � � � � � Compara A��� con A���

� � � � � � Compara A��� con A���

� � � � � � Compara A��� con A��

� � � � � � Compara A��� con A���

� � � � � � Compara A��� con A��

� � � � � � Compara A��� con A���

� � � � � � Compara A�� con A���

� � � � � � FIN�

Para un vector de � elementos el algoritmo insumi�o �� comparaciones� Antesde analizar en forma gen�erica el costo en tiempo del burbujeo veamos ejemplosmas simples�

Ciclos simples

for i � � to n doinstruccion

end for

El calculo en costo de un ciclo simple puede hacerse utilizando una sumatoria�

nXi��

C�

��

Page 23: PPP - Algoritmos

Donde C� es el costo de la instrucci�on que se ejecuta en el ciclo� El resultadode la sumatoria es n � C�� lo cual es evidente porque la instrucci�on dentro delciclo se ejecuta n veces�

Ciclos anidados independientes

for I � � to n dofor J � � to m do

Instruccionend for

end for

Podemos calcular el costo nuevamente usando sumatorias de la forma

nXi��

mXj��

C� �nXi��

�m� �� �C� � n � �m � �� �C�

Ciclos anidados dependientes Cuando los ciclos dependen uno del otropodemos aplicar la misma tecnica�

for I � � to n dofor J � i to n do

Instruccionend for

end for

nXi��

nXj�i

C� �nXi��

�n� i� �� �C� �

� C� �nXi��

n� i� � � C� � �nXi��

n�nXi��

i �nXi��

�� �

� C� � �n � n� n � �n� ��

�� n� � C� � �n� � n� � n

�� n� �

� C� � ��n� � n� � n� �n

�� � C� � n

� � n

Antes de continuar vamos a recordar algunas sumatorias utiles�

nXi��

c � c � n

��

Page 24: PPP - Algoritmos

nXi��

i �n � �n � ��

nXi��

i� lnn � �

An�alisis del algoritmo de burbujeo Pasemos nuevamente al algoritmo deburbujeo�

for i � � to n� � dofor j � i � � to n doif A�j� � A�i� thenSwap�A�i�� A�j��

end ifend for

end for

El costo del algoritmo lo vamos a calcular suponiendo que C� es el costo deefectuar la comparaci�on y que C� es el costo de efectuar el SWAP�� Sin embargoel SWAP no se hace siempre sino que se hace unicamente cuando la comparaci�onda A�j� � A�i�� por ello debemos particionar el an�alisis en tres casos el peorcaso� el mejor caso y el caso medio�

Peor caso

En el peor caso el algoritmo siempre hace el Swap�Esto ocurre por ejemplocuando el vector viene ordenado en el orden inverso al que utilizamos�

T �n� �n��Xi��

nXj�i��

C� � C�

T �n� �n��Xi��

�C� � C�� � �n� �� �i � �� � ��

T �n� �n��Xi��

�C� � C�� � �n � �� i�

T �n� � �C� � C�� � �n��Xi��

n�n��Xi��

��n��Xi��

i�

�Para economizar espacio Swap�x�y� puede hacerse como x xor y� y xor x�x xor y� Ver paracreer�

��

Page 25: PPP - Algoritmos

T �n� � �C� �C�� � ��n � �� � n� �n� ��� �n � �� � n�

T �n� � �C� �C�� � �n� � n � n� �� n� � n

��

T �n� � �C� �C�� � ��

�n� � �

�n� ��

Por ejemplo para N � � el peor caso nos da �c� � c�� � ��� � �� � �� ��c� � c�� � �� un total de �� comparaciones y �� Swaps�

Mejor caso

En el mejor caso el vector ya viene ordenado por lo que nunca efectua ningnswap� el costo total es entonce el costo de las comparaciones que es igual a localculado antes�

T �n� � C� � ��

�n� � �

�n� ��

Caso medio

En el caso medio el algoritmo efectua todas las comparaciones y solo la mitadde los Swaps�

T �n� � C� � ��

�n� � �

�n � �� � C� � �

���

�n� � �

�n� ��

Importante Al analizar el tiempo de un algoritmo se debe analizarel mejor caso� el peor caso y el caso medio� Habitualmente el que masinteresa es el peor caso�

Otro algoritmo de sort Para continuar practicando el an�alisis de algoritmositerativos vamos a analizar un algoritmo de sort completamente distinto delburbujeo el sort por inserci�on�

����� Insert�sort

Quienes hayan jugado alguna vez alg�un juego de cartas en el cual se jueguecon mas de o � cartas en la mano habr�an observado que algunos jugadoresponen sus cartas boca abajo en la mesa y luego van tomando de a una carta yla colocan en la posici�on que le corresponde en la mano� Esto es precisamentelo que hace el algoritmo de sort por inserci�on� �

��

Page 26: PPP - Algoritmos

Algorithm � InsertSort�A�n�� Ordena un vector�

for J � � to n dokey � A�j��� Insertar A�j� en la secuencia ya ordenada A����j �� ��i� j � �while i � � and A�i� � key doA�i� �� � A�i�i� i� �

end whileA�i � �� � key

end for

Veamos el c�odigo�

Ejemplo�

� � � � � � j�� key�� i�� no entra al while� A������

� � � � � � j� key�� i�� entra al while�

A�� A���

� � � � � �

i��

A��� A���

� � � � �

i��

sale del while

A����

� � � � � � j�� key�� i�� no entra al while

� � � � � � j�� key�� i�� entra al while

A��� A���

� � � � � �

i�

A��� A��

� � � � � �

i��

A��A���

� � � � �

i��

sale del while

A��� �

� � � � � � j�� key� i�� no entra al while

� � � � � � j� key�� i�� entra al while

A�� A���

� � � � �

i��

�En particular suelo jugar al bridge� y los jugadores que hacen esto tardan siglos en aco�modar sus cartas� Evidentemente no conocen mejores m�etodos de sort�

Page 27: PPP - Algoritmos

sale del while

A��� �

� � � � � � j�� key�� i� entra al while

A��� A��

� � � � �

i��

A�� A���

� � � � � �

i��

A��� A���

� � � � � �

i��

sale del while

A��� �

� � � � � � fin�

Como podemos observar el algoritmo trabaja mejor si el vector ya est�a orde nado en cuyo caso el ciclo while no se ejecuta� En el peor caso por el contrarioel ciclo while se ejecuta j � � veces� Entonces podemos plantear�

Peor caso

Sea

C�� Costo de asignar a una variable un elemento de un vector�

C�� Costo de asignar a una variable el valor de otra menos ��

C� Costo de asignar a un elemento de un vector el valor de otro

elemento de un vector�

C�� Costo de decrementar una variable�

C�� Costo de comparar un elemento de un vector con un numero

C�� Costo de comparar dos numeros�

T �n� �nX

j��

�C� �C� �C �C� �

j��Xi��

�C� � C�� � C��

T �n� �nXj��

�C� � C� �C �C� � �C� � C���j � �� �C��

T �n� � N �C� �N �C� �N �C �N �C� � �C� �C�� �nX

j��

�j � �� �N �C�

T �n� � N �C� �C� � C � C� � C�� � �C� �C�� � �nX

j��

j �nXj��

��

T �n� � N �C� � C� � C � C� �C�� � �C� � C�� � ��n � �� � n

�� �n� ���

��

Page 28: PPP - Algoritmos

T �n� � N �C� � C� � C �C� �C�� � �C� � C�� � ��

�n� � �

�n� ��

Como podemos ver las f�ormulas se van haciendo mas complejas debido a queno podemos eliminar las constantes C���CN que nos impiden calcular con mayorsimplicidad el tiempo del algoritmo�

Mejor caso

En el mejor caso el ciclo while no se ejecuta� notemos que para el mejor caso elalgoritmo de inserci�on es mejor que el burbujeo ya aquel de todas formas tieneque efectuar todas las comparaciones�

T �n� �nXj��

�C� � C� � C �C� �C��

T �n� � N �C� � C� � C �C� �C��

Caso medio

Caso medio�En el caso medio el ciclo while se ejecuta �j � ���� veces por loque la f�ormula es muy similar a la del peor caso aunque dividiendo por dos lost�erminos que multiplican a C� y C��

��� Orden de un algoritmo

El an�alisis de los algoritmos que hemos realizado hasta aqu�i es muy preciso peroresulta inc�omodo para entender que tan e�ciente es un algoritmo o para podercompararlo contra otro algoritmo� Habitualmente no interesa cuanto tarda ex actamente un algoritmo sino que nos interesa saber cual es la tasa de crecimientodel algoritmo en funci�on de los datos de entrada� Para el estudio de algoritmosexiste una notaci�on muy pr�actica y utilizada universalmente en este tipo de prob lemas conocida como la gran �O� �Big Oh notation� que de�ne el orden de unalgoritmo�

Importante Orden de un algoritmo Tasa de crecimiento del tiempoque insume el algoritmo en funci�on de la cantidad o tamao de los datosde entrada�

��� Notacion �O

Esta notaci�on sirve para clasi�car el crecimiento de las funciones�

��

Page 29: PPP - Algoritmos

����� O�g�n�� �

Sea una funcin f�n�� decimos que f�n� pertenece a la familia de funcionesO�g�n�� si existe una constante C� y un n�umero n� tales que�

� � f�n� � C� � g�n� para n � no

Es decir que a partir de un cierto n la funcin f�n� queda por debajo de lafunci�on g�n� multiplicada por una constante�

����� ��g�n�� �

Sea una funci�on f�n�� decimos que f�n� pertenece a la familia de funciones��g�n�� si existe una constante C� y un n�umero no tales que�

C� � g�n� � f�n� para n � no

Es decir que a partir de un cierto punto la funci�on siempre es mayor que g�n�multiplicada por una constante�

����� ��g�n�� �

Sea una funci�on f�n�� decimos que f�n� pertenece a la familia de funciones��g�n�� si existen constantes C� y C� y un n�umero no tales que�

C� � g�n� � f�n� � C� � g�n� para n � no

Es decir que a partir de un cierto n�umero la funci�on queda atrapada entreC� � g�n� y C� � g�n��

��

Page 30: PPP - Algoritmos

Esta notaci�on que pretende clasi�car el crecimiento de las funciones es apropi ada para el estudio de los algoritmos ya que nos permite realizar algunas sim pli�caciones� Por ejemplo C��f�n� � ��f�n�� Adem�as los sumandos de ordeninferior se pueden obviar� O�f�n��O�g�n�� � O�f�n�� sii f�n� crece mas r�apidoque g�n��

Por ejemplo n� � n ��n��La notaci�on ��g�n�� sirve para acotar el mejor caso de un algoritmo�La notaci�on O�g�n�� sirve para acotar el peor caso de un algoritmo�Si ��f�n�� � O�f�n�� entonces podemos decir que el algoritmo pertenece a

��f�n��Cuando ��g�n�� es distinto a O�g�n�� debemos usar O�g�n�� para expresar

el caso medio�

Como un abuso de notaci�on usaremos�

f�n� � ��g�n��

f�n� � O�g�n��

f�n� � ��g�n��

Donde el signo igual debe leerse como �pertenece��

Aplicando esta notaci�on a los algoritmos estudiados podemos ver que el mejorcaso del burbujeo es ��n��� El peor caso es O�n�� por lo tanto el algoritmo deburbujeo es ��n��� Es decir que es un algoritmo de orden cuadr�atico�

El sort por inserci�on en cambio en el mejor caso es ��n� y en el peor caso esO�n��� En el caso medio el algoritmo es O�n��� Por lo que tambien tenemos unalgoritmo de orden cuadr�atico pero que en el mejor de los casos es lineal�

Cuanto mas r�apido sea el crecimiento de una funci�on peor ser el rendimientodel algoritmo� Por eso analizando el orden del algoritmo podemos determinarcual es mas e�ciente�

Algunas funciones t�ipicas ordenadas por orden de crecimiento�

pn � logn � n � n logn � nc � xn � n � nn

Luego de analizar el orden del algoritmo de inserci�on y el burbujeo podemosllegar a la conclusi�on de que ambos son iguales en e�ciencia� aunque como hemosvisto trabajan en forma completamente distinta�

��

Page 31: PPP - Algoritmos

��� El problema de la distancia m�inima en elplano

Un problema a resolver Se tiene un conjunto de n puntos pertenecientesal plano XY � cada punto esta representado por sus coordenadas X e Y � Elproblema consiste en encontrar el par de puntos tal que la distancia entre am bos puntos es m�inima� El algoritmo debe devolver cuales son dichos puntos�

����� Soluci�on iterativa

La soluci�on iterativa a este problema es simple� se recorre el vector de puntosy por cada punto se lo compara contra todos los demas calculando la distan cia como

p�x�� x��� � �y� � y���� cada vez que una distancia sea inferior al

m�inimo anterior actualizamos cuales son los puntos mas cercanos� Cuando yacomparamos todos los puntos contra todos el resultado es un par de puntos cuyadistancia seguro que es m�inima�

����� An�alisis

Claramente el tiempo de este algoritmo se puede calcular comoPn

i��

Pnj�� C

Siendo C un cierto tiempo que es constante y que es lo que se tarda dentrodel ciclo en hacer la comparaci�on entre i y j� en calcular la distancia� realizarla nueva comparaci�on y eventualmente asignar a min la nueva distancia� El

resultado de la sumatoria esPn

i�� C � n�n��� � C�n��n��� � C�n��n� � O�n��Como ademas es evidente que tanto en el mejor como en el peor caso el algoritmocompara todos los puntos contra todos podemos decir que el algoritmo es ��n���

En general los algoritmos iterativos son sencillos y no muy e�cientes� comopunto de partida o como referencia de comparaci�on siempre es bueno tener

��

Page 32: PPP - Algoritmos

Algorithm � Distmin�A�n�� Dado un arreglo �A� de n puntos calcula la dis tancia minima entre dos puntos cualesquiera

min� �MAXfor I � � to n dofor J � � to n doif i � j thendist� Distancia�A�j�� A�i��if dist � min thenmin� distsoli � isolj � j

end ifend if

end forend forreturn �A�soli�� A�solj��

presente la soluci�on iterativa a un problema� Mas adelante veremos como cono ciendo otras t�ecnicas de disenio de algoritmos vamos a poder mejorar el ordende este algoritmo para hacerlo mucho mas e�ciente�

��� Resumen y puntos clave

En esta clase hemos visto cuales son las herramientas utilizadas para analizaralgoritmos iterativos� estos son los mas comunes y todos estamos familiariza dos con escribir este tipo de algoritmos� Para analizar el costo en tiempo delos algoritmos iterativos vimos que en realidad nos interesa conocer la tasa decrecimiento u orden del algoritmo por lo que podemos dejar de lado los factoresconstantes o de menor crecimiento� Introducimos la notaci�on O�n� que utiliz aremos a lo largo de todo el curso para indicar el orden de un algoritmo� Paracomparar dos algoritmos utilizaremos el orden de los mismos� cuanto menor seala tasa de crecimiento mas e�ciente ser�a el algoritmo�

Como ejemplos de algoritmos iterativos analizamos dos algoritmos de sortcl�asicos el burbujeo y el sort por inserci�on� vimos que ambos son de ordencuadr�atico aunque el de inserci�on en su mejor caso es lineal� El considerarmejor� peor y caso medio es importante en el an�alisis de los algoritmos�

El problema de hallar los puntos a distancia m�inima en el plano es import ante porque vamos a ver que hay varias formas de solucionar el problema em pleando distintos algoritmos� En esta clase vimos la soluci�on iterativa� de ordencuadr�atico�

��

Page 33: PPP - Algoritmos

�� Ejercicios

�� Analizar el orden del sort por selecci�on�

�� Analizar la versi�on iterativa del algoritmo Potencia��

�� Sugerir una mejora al algoritmo de burbujeo y analizar el nuevo algoritmo�

�� Implementar el algoritmo de burbujeo y el insert sort� Probarlos paraconjuntos de datos generados al azar y luego para conjuntos de datos queya estn ordenados� Realizar una tabla que indique el tamanio de los datosy el tiempo que insumi�o cada algoritmo en los distintos casos� Probar conconjuntos de datos de distintos tamanios�

� Listar las siguientes funciones en orden de crecimiento creciente� Indicarcual es el orden de cada una de las funciones�

�a� n

�b� �n

�c� nk con k �

�d� n logn

�e� ���

�f� n � n� � �n�

�g� logn

�h�pn

�i� log logn

�j� �

�k� n�

�l� �logn��

�m� n

�n� n� � epsilon� con � � epsilon � �

Lecturas recomendadas En �CLR� se analizar el algoritmo Insert Sort enla introducci�on� La notaci�on �Big Oh� se encuentra de�nida en el texto de lamisma forma en que la de�nimos aqui� El libro tiene una secci�on sobre comoresolver sumatorias que puede resultar de utilidad�

��

Page 34: PPP - Algoritmos

Chapter �

Algoritmos Recursivos

��� Algoritmos recursivos

Una t�ecnica bastante poderosa a la hora de realizar algoritmos consiste en pro gramar en forma recursiva� Un algoritmo recursivo es aquel que en alg�un mo mento durante su ejecuci�on se invoca a si mismo� Por ejemplo el siguiente pro grama sirve para calcular el factorial de un numero� En general el programar

Algorithm � Fact�n�� Calcula el factorial de n en forma recursiva�

if n � � thenreturn �

elsereturn n�Fact�n ��

end if

en forma recursiva permite escribir menos c�odigo y algunas veces nos permitesimpli�car un problema dif�icil de solucionar en forma iterativa� En cuanto ala e�ciencia un programa recursivo puede ser mas� menos o igual de e�cienteque un programa iterativo� En primer lugar hay que senialar que los programasrecursivos consumen espacio en memoria para la pila ya que cada una de lasllamadas recursivas al algoritmo son apiladas una sobre otras para preservarel valor de las variables locales y los par�ametros utilizados en cada invocaci�on�Este aspecto lo vamos a considerar un costo en espacio ya que lo que estamosconsumiendo es memoria� En cuanto al tiempo de ejecuci�on del programa de bemos calcularlo de alguna forma para poder obtener el orden del algoritmo�Para ello se recurre a plantear el tiempo que insume un programa recursivo dela siguiente forma�

Tiempo de ejecuci�on del factorial

T �n� �

�� si n � �� � T �n� �� sino

��

Page 35: PPP - Algoritmos

Las ecuaciones planteadas de�nen una recurrencia� Una recurrencia es unsistema de ecuaciones en donde una o mas de las ecuaciones del sistema es tan de�nidas en funci�on de si mismas� Para calcular el orden de un algoritmorecursivo es necesario resolver la recurrencia que de�ne el algoritmo�

��� Recurrencias

Tomemos por ejemplo la siguiente recurrencia muy com�un en algoritmos recurs ivos�

T �n� �

�� si n � ��T �n� � � n sino

Estudiaremos tres t�ecnicas que suelen utilizarse para resolver recurrencias�

� El m�etodo de sustituci�on

� El m�etodo iterativo

� El teorema maestro de las recurrencias�

����� El m�etodo de sustituci�on

En m�etodo de sustituci�on se utiliza cuando estamos en condiciones de suponerque el resultado de la recurrencia es conocido� En estos casos lo que hacemoses sustituir la soluci�on en la recurrencia y luego demostrar que el resultado esvalido por inducci�on�

Para nuestro ejemplo sabemos que

T �n� � �n logn� � n

Veamos que pasa cuando n � �Si n � � � T ��� � �

� log� � � � � � � � �

V erifica

Hip�otesis inductivasi n � � � T �n�� � �n� logn�� � n� si n� � nDemostraci�on

T �n� � �T �n

�� � n ���

��

Page 36: PPP - Algoritmos

Como n� � n

Por inducci�on

T �n

�� � �

n

�� log �

n

�� �

n

����

Reemplazando ��� en ���

T �n� � ���n

�� log �

n

�� � �

n

��� � n

�n logn

�� n� � n

n logn� log � � �n

n logn � n� �n

n logn� n

� ��n logn�

Por lo que queda demostrado�

El m�etodo de sustituci�on es simple pero requiere que uno ya conozca cual es lasoluci�on de la recurrencia� A veces sin embargo en recurrencias muy complejaspara resolver por otros m�etodos puede llegar a ser conveniente intentar adivinarla solucion y luego demostrarla usando este metodo�

����� El m�etodo iterativo

El m�etodo iterativo es un forma bastante poderosa de resolver una recurrenciasin conocer previamente el resultado� En este m�etodo se itera sobre la recur rencia hasta que se deduce un cierto patr�on que permite escribir la recurrenciausando sumatorias� Luego realizando una sustituci�on apropiada y resolviendolas sumatorias se llega al resultado de la recurrencia�

Utilizando el metodo iterativo en nuestro ejemplo observamos lo siguiente�

T ��� � �

T �n� � �T �n

�� � n

T �n� � ���T �n

�� �

n

�� � n � �T �

n

�� � n � n

T �n� � � � ��T �n

�� �

n

�� � n� � n � �T �

n

�� � n� n � n

T �n� � �k � T �n

�k� � kn

Page 37: PPP - Algoritmos

Como T ��� � � hacemos n�k � � � n � �k � k � logn

Reemplazando

T �n� � �lognT �n

�logn� � n logn

T �n� � �lognT ��� � n logn

T �n� � n � n logn

T �n� � ��n logn�

Como podemos ver el m�etodo iterativo requiere de varios c�alculos y puedellegar a requerir de ciertas manipulaciones algebraicas que resultan molestaspero en general puede aplicarse practicamente a cualquier tipo de recurrenciacon resultado favorable��

����� El teorema maestro de las recurrencias

Mediante este teorema podemos contar con una poderosa herramienta para re solver algunas recurrencias� El teorema dice lo siguiente�

Teorema� SeaT �n� � aT �nb � � nk

Si a � � y b � �Entonces

� Caso � Si a � bk � T �n� ��nlogb a�

� Caso � Si a � bk � T �n� ��nk logn�

� Caso � Si a � bk � T �n� ��nk�

Por ejemplo para T �n� � �T �n� � � n tenemos que a � �� b � �� k � � luegoa � bk y estamos en el caso �� Por lo que el algoritmo es ��n� logn�

Lamentablemente no todas las recurrencias tienen la forma que requiere elteorema maestro por lo que a veces no queda mas remedio que aplicar el metodoiterativo�

����� Otras herramientas

Adem�as de los tres m�etodos nombrados que son los b�asicos en cuanto a laresoluci�on de recurrencias hay otras herramientas que pueden resultar �utiles alresolver recurrencias�

�Algunas recurrencias en particular no son apropiadas para el m�etodo iterativo comoveremos luego

��

Page 38: PPP - Algoritmos

Cambio de variables

En algunas recurrencias puede ser conveniente realizar un cambio de variablesde forma tal de resolver una recurrencia ya conocida� luego aplicando la inversadel cambio podemos obtener la soluci�on de la recurrencia original�

Supongamos que tenemos la siguiente recurrencia

T �n� �

�� si n � �

T �p

�n�� � � sino

Sea m logn� Entonces n � �m� Reemplazando �m por n en la recurrencia deT �n� tenemos

T ��m� � T ��m��� � �

Llamamos S�m� � T ��m�� Entonces la recurrencia queda

S�m� � S�m��� � �

Usando el teorema maestro sabemos que S�m� � ��logm�� Por lo tanto

T �n� � T ��m� � S�m� � ��lgm�

T �n� � ��log logn�

M�etodo de los multiplicadores

El m�etodo de los multiplicadores permite resolver recurrencias particularmentedi�ciles en donde podemos suponer que la forma de la soluci�on se ajusta aT �n� � �n� Esto es v�alido en recurrencias de la forma T �n� � a�T �n � x�� �a�T �n� x�� � � � �� amT �n � xm�

Sea la recurrencia

T �n� �

���

� si n � �� si n � ��T �n� �� � �T �n� �� sino

���

Suponiendo que T �n� � �n reemplazamos

�n � ��n�� � ��n��

�n����� � ��� �� � �

�n���� � ��� � �� � �

Como la recurrencia es lineal podemos plantear la forma

T �n� � c��n � c�

n � c��n

Como c� es � podemos calcular c� y c� de T ��� y T ����

T ��� � c�� � c��

��

Page 39: PPP - Algoritmos

� � c� � c�

T ��� � c�� � c��

� � c� � �c�

Resolviendo el sistema de �x� obtenemos c� � � y c� � �� por lo que la forma�nal de la recurrencia es

f�n� � � � n � � � �n

��� Ejemplos

����� Ejemplo I� �Messier

Sea la siguiente recurrencia �Messier�

T �n� �

�� si n � ��T �n� � � n sino

De acuerdo al teorema maestro a � �� b � �� k � �� a � bk� Por lo tanto seaplica el caso �� ��n�

Veri�quemos el resultado del teorema maestro usando el metodo iterativo�

T �n� � �T �n

�� � n

T �n� � ���T �n

��� �

n

�� � n � �T �

n

��� � ��

n

�� � n

T �n� � ���T �n

��� �

n

��� � ��

n

�� � n � ��T �

n

��� � ��

n

��� � ��

n

�� � n

T �n� � �kT �n

�k� � �k���

n

�k��� � � � ��

T �n� � �kT �n

�k� �

k��Xi��

�i

�in

Como T ��� � � hacemos n�k � � � n � �k � k � log� n

Reemplazando

T �n� � �log� nT ��� �

log�n��X

i��

�i

�in

T �n� � nlog� � �

log�n��X

i��

�i

�in

��

Page 40: PPP - Algoritmos

T �n� � nlog� � � n

log�n��X

i�o

��

��i

T �n� � nlog� � � n � ����log� n � �

���� � �

� ��

��log� n � nlog�

� � nlog���log��

�� nlog���� �nlog��

n

T �n� � nlog� � � n � �n log

��

n� �

��� �� ��

T �n� � nlog� � �n log� �� �

���

T �n� � nlog� � � ��nlog���

T �n� � �n� �nlog��

T �n� � �n� �n����

T �n� � ��n�

�����

Como vemos la soluci�on �nal tiene un t�ermino que es ��n� y otro que es ��nk��cuando k � � ocurre que la funci�on lineal crece mas r�apido que la exponencialy por eso la recurrencia pertenece a ��n��

����� Ejemplo II

Sea la siguiente recurrencia�

T �n� �

�� si n � ��T �n� � � n logn sino

Esta recurrencia tambi�en es bastante com�un en algunos algoritmos recursivosy lamentablemente no podemos escribirla en la forma en la cual vale el teoremamaestro� Como queremos averiguar la soluci�on tenemos que aplicar el m�etodoiterativo�

T �n� � �T �n

�� � n logn

T �n� � �T ��T �n

�� � �

n

�� log

n

�� � n logn

T �n� � �T �n

�� � n log

n

�� n logn

T �n� � ���T �n

�� � �

n

�� log

n

�� � n log

n

�� n logn

��

Page 41: PPP - Algoritmos

T �n� � �T �n

�� � �n log

n

�� n log

n

�� n logn�

T �n� � �kT �n

�k� � n

k��Xi��

log �n

�i�

Como T ��� � � � n�k

� � � k � lognReemplazando

T �n� � �lognT ��� � n

logn��Xi��

logn

�i

T �n� � n� n

logn��Xi��

logn� log �i

T �n� � n� n�

logn��Xi��

logn�logn��Xi��

log �i�

T �n� � n� n�log� n�logn��Xi��

i�

T �n� � n� n�log� n� �logn�logn� ��

���

T �n� � n� n�log� n� �log� n� logn

���

T �n� � n� n�log�n� logn

��

T �n� � n ��

�n log� n� �

�n logn

T �n� � ��n log� n�

En este caso el termino de mayor crecimiento es n log� n�

��� C�alculo de n�umeros de Fibonacci

La serie de Fibonacci es aquella en la cual Fib��� � �� Fib��� � �� Fib�n� �Fib�n� �� � Fib�n� �� para todo n natural� La serie tiene la siguiente forma

�� �� �� �� � �� ��� ��� ��� � � � �

El problema consiste en hallar un algoritmo e�ciente que permita calcularFib�n��

����� Soluci�on recursiva

La soluci�on recursiva para encontrar Fib�n� es estremadamente sencilla�

��

Page 42: PPP - Algoritmos

Algorithm �� Fib��n�� Calcula el !n"�esimo numero de la serie de Fibonacci�

if n � � thenreturn �

elsereturn Fib�n� �� � Fib�n� ��

end if

Para calcular el costo de este algoritmo planteamos la siguiente recurrencia�

T �n� �

�� si n � �

T �n� �� � T �n � �� sino

Aplicando el m�etodo iterativo obtenemos lo siguiente�

T �n� � T �n� �� � T �n� ��

T �n� � T �n� �� � T �n � �� � T �n� �� � T �n � �� � T �n � �� � �T �n� �� � T �n� ��

T �n� � T �n � �� � T �n� �� � �T �n� �� � �T �n� � � T �n� � � T �n� ��

T �n� � T �n� �� � �T �n� �� � �T �n� � � T �n� ��

T �n� � T �n� �� � �T �n� � � �T �n� �� � �T �n� �� � T �n� ��

���

La expansi�on de la recurrencia tiene la forma del binomio de newton� Y noparece haber una sumatoria conocida que nos permita expresar la recurrenciade forma tal de poder resolverla� En estos casos en los cuales la recurrenciaresulta di�cil de resolver por los metodos vistos puede ser �util utilizar un �arbolpara visualizar como funciona el algoritmo�

��

Page 43: PPP - Algoritmos

Como vemos en la �gura para calcular Fib��� necesitamos hacer Fib��� yFib���� luego para Fib��� necesitamos Fib��� y Fib���� Etc� � � � Los nodos inter nos del �arbol insumen dos instrucciones �la comparaci�on y la suma�� mientrasque las hojas del �arbol solo insumen una instruccion� Por lo tanto la cantidadde instrucciones que se ejecutan para Fib�n� es�

T �n� � � � nodos� hojas

Observando el �arbol podemos ver que cada nodo indica la cantidad de hojasdebajo de dicho nodo� por eso para calcular Fib�n� necesitamos un �arbol conFib�n� hojas� Adem�as podemos usar una formula �util para �arboles binarios queindica que la cantidad de nodos internos es igual a la cantidad de hojas menos�� �Esto se puede probar facilmente por inducci�on�� Entonces�

T �n� � ��Fib�n�� �� � Fib�n�

T �n� � ��Fib�n��� �

T �n� � ��Fib�n��

Como se puede ver obtenemos que el orden de nuestro algoritmo es el ordende la serie de Fibonacci� Para saber cual es el orden de la serie de Fibonaccipodemos usar la siguiente propiedad�

Fib�n� � #n

Con# �

p� �

�� �� ����� � � �

Entonces�T �n� � ��#n� � ��xn�

Como podemos ver el algoritmo pertenece al orden exponencial� por lo tanto esbastante lento� Para n � � por ejemplo ejecuta mil millones de instrucciones �

Una forma de ver que nuestro algoritmo es ine�ciente es observando comopara calcular F �� calculamos varias veces F ����F ����etc� Cuando en realidadsolo necesitariamos hacerlo una vez� En este caso el algoritmo recursivo esclaramente ine�ciente por lo que planteamos una versi�on iterativa�

����� Solucion iterativa

Para la soluci�on iterativa usamos un vector de n � � posiciones e inicializamosv��� � ��v��� � �� Luego con un ciclo simple calculamos cada posici�on del vectorcomo la suma de las dos anteriores hasta llegar a la posici�on n que es la quebuscamos�

��

Page 44: PPP - Algoritmos

Algorithm �� Fib��n�� Calcula el !n"�esimo numero de Fibonacci

�� Usamos un vector de tamanio n�� llamado Fib�n��� ��int Fib�n���Fib��� � Fib��� � �for i � � to n doFib�i� � Fib�i� �� � Fib�i� ��

end forreturn Fib�n�

Como podemos ver claramente este algoritmo es ��n� lo cual implica unagran mejora con respecto a la versi�on recursiva� La t�ecnica que usamos essencilla� pero tiene el problema de requerir de un vector de tamanio n� � parapoder funcionar� Es decir que hemos reducido el costo en tiempo pero hemosaumentado el costo en espacio� En nuestra pr�oxima versi�on tratamos de aplicarla misma t�ecnica pero sin utilizar el vector�

Algorithm �� Fib��n�� Calcula el n"�esimo numero de Fibonacci

a� �b� �for i � � to n doc� a� ba� bb� c

end forreturn a

Esta nueva versi�on sigue siendo ��n� pero en lugar de utilizar un vector den�� posiciones usamos tres variables a�b�c� El algoritmo insume mas instruc ciones que la versi�on que usaba el vector pero sigue siendo lineal por lo queasintoticamente es equivalente a Fib� pero con un costo espacial mucho menor�

����� Una soluci�on mejor

Una de las curiosidades de la serie de Fibonacci es que existen varias formascuriosas de calcular un n�umero de Fibonacci� Una de las formas es sumando losdos n�umeros anteriores de la serie que es el m�etodo que estuvimos usando hastaahora tanto en la versi�on recursiva como en la versi�on iterativa� Otra formaes calculando #n� Esta forma tiene la di�cultad de que #� el n�umero �aureo� esirracional lo cual nos obligar�ia a calcular Fib�n� en forma aproximada� Otraforma de calcular Fib�n� utilizando potencias es usando la siguiente matriz�

M �

�� �� �

��

Page 45: PPP - Algoritmos

La matriz M tiene una curiosa propiedad� cuando hacemos Mn�� M ��� �� esigual a Fib�n��

Para utilizar este nuevo m�etodo tenemos que disponer de un algoritmo velozpara elevar una matriz a una potencia� En la primera clase del curso hab�iamosobtenido el siguiente algoritmo para elevar un n�umero a una potencia�

Algorithm �� Potencia��x�y� Calcula xy

Require� x � �if y �� � then

return �end ifr� �if y � � thenr � Potencia��x� y���r � r � r

end ifif y mod � �� � thenr � r � x

end ifreturn r

Claramente el algoritmo se puede adpatar facilmente para elevar una matrizen lugar de un n�umero a cualquier potencia� Este es un algoritmo recursivode�nido por la recurrencia�

f T �n� � � si n � �T �n� � T �n� � � � sino

No hace falta tener en cuenta para expresar la recurrencia que el costo di�ereagregando una multiplicaci�on o no segun n sea par o impar� Aplicando el teoremamaestro �caso ��� Tenemos que T �n� � ��logn�� Por lo tanto sabemos quedisponemos de un algoritmo que calcula una potencia de orden logaritmico �quecrece menos que una funci�on lineal�� Por lo que podemos mejorar el c�alculo delos numeros de Fibonacci de la siguiente forma�

Algorithm �� Fib��n� Calcula el !n"esimo numero de Fibonacci

Potencia��M�n ��return M�����

Y como sabemos este algoritmo es de orden logaritmico�

��

Page 46: PPP - Algoritmos

����� Conclusiones

Como hemos visto calcular un n�umero de Fibonacci no es tan sencillo comoparece� la versi�on recursiva del algoritmo era de orden exponencial� luego pudi mos construir una versi�on iterativa de orden lineal y �nalmente una versionde orden logaritmico� En general se requiere de mucho an�alisis� esfuerzo e in vestigaci�on para encontrar la forma mas e�ciente de resolver un determinadoproblema�

��� Resumen y puntos clave

El proposito de esta clase fue presentar las herramientas necesarias para el estu dio de algoritmos recursivos� Vimos como el costo en tiempo de un algoritmorecursivo puede expresarse mediante una recurrencia� Para resolver recurrenciasexplicamos tres t�ecnicas�

El m�etodo de sustituci�on permite demostrar la soluci�on de una recurrenciaaplicando inducci"on� Esto es �util cuando ya conocemos la soluci�on o cuandoestamos en condiciones de adivinarla�

El m�etodo iterativo nos permite reducir una recurrencia a una serie de sumat orias que luego resolvemos para resolver la recurrencia�

El teorema maestro de las recurrencias nos porporciona una �receta� pararesolver recurrencias que responden a una forma determinada�

Por �ultimo estudiamos el problema del c�alculo de un n�umero de Fibonacci� yvimos como mediante distintas aproximaciones pudimos mejorar nuestro algor itmo inicial que era muy ine�ciente hasta encontrar un algoritmo muy bueno�Este proceso de re�namiento de un algoritmo es muy importante en el diseniode algoritmos para llegar a una soluci�on �optima�

�� Ejercicios

�� Demostrar usando el m�etodo de sustituci�on que la recurrencia

T �n� �

�� si n � �

T �n� � � T ��n� � � n sino

Es ��n�

�� Resolver las siguientes recurrencia usando el m�etodo iterativo y aplicandoel teorema maestro cuando corresponda� Para todas las recurrencias valeque T �n� � � si n � ��

�a� T �n� � �T �n� � � n�

Page 47: PPP - Algoritmos

�b� �T �n� � T �n� �� � � �n �

�c� �T �n� �pn� n

�d� �T �n� � �T �n� � � ��n� ��

��

Page 48: PPP - Algoritmos

Chapter �

Divide � Conquer

��� Divide � Conquer

En este m�odulo vamos a estudiar una t�ecnica muy poderosa para el diseniode algoritmos conocida por la frase �Dividir para conquistar�� Los algoritmosde este tipo se caracterizan por estar diseniados siguiendo estrictamente lassiguientes fases

� Dividir Se divide el problema en partes mas pequenias�

� Conquistar Se resuelven recursivamente los problemas mas chicos�

� Combinar Los problemas mas chicos se combinan para resolver el grande�

Los algoritmos que utilizan este principio son en la mayor�ia de los casos net amente recursivos� La t�ecnica es sumamente �util� hay muchos problemas paralos cuales aplicar un algoritmo de tipo Divide � Conquer permite resolver elproblema en forma mas sencilla y e�ciente�

��� Merge Sort

El algoritmo de Merge Sort es un ejemplo cl�asico de algoritmo que utiliza elprincipio de dividir para conquistar� El algoritmo permite ordenar un vectoren forma mas e�ciente que los m�eodos de sort vistos hasta el momento como elburbujeo y el sort por inserci�on� Si el vector tiene mas de dos elementos se lodivide en dos mitades� se invoca recursivamente al algoritmo y luego se hace unmerge de las dos mitades ordenadas�

��

Page 49: PPP - Algoritmos

Algorithm � MergeSort�A�p�r�� Ordena un vector desde p hasta r�

if p � r thenq � �p� r���MergeSort�A�p�q�MergeSort�A�q���r�Merge�A�p�q�r�

end if

El tiempo que insume este algoritmo queda de�nido por la siguiente recurren cia�

T �n� �

�� si n � ��T �n� � � ��Merge� sino

�Para calcular la recurrencia necesitamos el algoritmo que realiza el merge�

An�alisis del algoritmo Merge Puede verse claramente que el algoritmo demerge requiere de dos pasadas a los vectores a mergear� una para realizar elmerge y otra para copiar del vector auxiliar al vector original� El tiempo delalgoritmo de merge es T �n� � �n por lo tanto�

Merge T �n� � ��n�

� Por lo que la recurrencia del algoritmo de MergeSort es

T �n� �

�� si n � ��T �n� � � n sino

Esta es una recurrencia conocida� Aplicando el teorema maestro podemos ob tener que MergeSort � ��n logn� Lo cual mejora el orden de los algoritmos desort que habiamos estudiado que es cuadr�atico�

��

Page 50: PPP - Algoritmos

Algorithm � Merge�A�p�q�r�� Mergea A�p�q� �� A�q���r�

�� Usamos el array auxiliar B�p�r� ��int B�p�r�i� k� pj � q � �while i � q and j � r doif A�i� � A�j� thenB�k� � A�i�i� i� �

elseB�k� � A�j�j � j � �

end ifk � k � �

end while�� Copiamos elementos que quedaban de la parte izquierda ��while i � q doB�k� � A�i�i� i � �k � k � �

end while�� Copiamos elementos que quedaban de la parte derecha ��while j � r doB�k� � A�j�j � j � �k � k � �

end while�� Copiamos desde el vector auxiliar ��for i � p to r doA�i� � B�i�

end for

��

Page 51: PPP - Algoritmos

����� Propiedades

El algoritmode MergeSort es un algoritmode sort que presenta algunas propiedadesinteresantes� En primer lugar el orden del algoritmo es ��n logn�� y esto ocurretanto en el peor caso� como en el mejor caso� como en el caso medio ya que eltiempo que insume el algoritmo no depende de la disposici�on inicial de los ele mentos del vector� En segundo lugar es un algoritmo que requiere de un espacioextra de almacenamiento para poder funcionar� A los algoritmos que realizanel sort dentro del vector mismo se los denomina algoritmos de sort �in situ��Claramente el algoritmo de MergeSort no pertenece a esta familia�

����� Optimizaciones y trucos

El orden del algoritmo de MergeSort no se puede mejorar� lo que si podemoshacer es aplicar algunas mejorar para que los factores constantes que inciden enel tiempo que insume el algoritmo sean menores� Uno de los trucos mas utilizadosconsiste en evitar el tener que copiar todo el vector auxiliar en el original cadavez que se hace el procedimiento de Merge� Esto se logra utilizando dos vectoresde tamanio !n"� En los niveles pares de la recursi�on Mergeamos desde A haciaB� En los niveles impares mergeamos desde B hacia A� Si la cantidad de niveleses en total impar hacemos una copia de mas para volver a tener los datos en elvector original pero lo que se ahorra es siempre mas de este gasto extra�

Otra mejora habitual consiste en no aplicar MergeSort si el tamanio del vectores mas chico que un n�umero constante de elementos� por ejemplo ��� en ese casose aplica un sort por inserci�on o cualquier otro� Como la cantidad de elementoses constante esto solo agrega una cantidad constante de tiempo al algoritmo yen general permite obtener una mejora en el rendimiento�

Un detalle importante del algoritmo de MergeSort es el siguiente En el pro ceso de Merge debido a comparamos A�i� � A�j� tenemos como consecuenciaque cuando los elementos son iguales copiamos desde la lista izquierda primeroy luego desde la derecha� Podr�iamos haber copiado desde la derecha primeroy el resultado ser�ia el mismo ya que si los n�umeros o lo que sea que estamosordenando son iguales o tienen la misma clave no importa en que orden aparecenen el vector ordenado� Sin embargo frecuentemente ordenamos un conjunto dedatos por mas de una clave� si los elementos del vector ya estaban ordenadospor alguna otra clave es importante que al ordenarlo por otra clave cuando lanueva clave es igual mantengamos el orden de la clave anterior� Esto se lo gra precisamente copiando primero de la parte izquierda del vector al mergear�A los algoritmos de sort que preservan el orden original de los elementos quetienen claves iguales se los denomina estables� La estabilidad es una propiedadbastante deseable en los algoritmos de sort�

Por ultimo es conveniente analizar s�i es posible implementar el algoritmode MergeSort !in situ"� es decir sin utilizar espacio auxiliar de memoria� La

Page 52: PPP - Algoritmos

respuesta es que si es posible pero nadie sabe como hacerlo sin destruir porcompleto la e�ciencia del algoritmo�

����� Resumen MergeSort

� T �n� � ��n logn�� Mejor� peor y caso medio son iguales�

� Es estable�

� Requiere de un vector auxiliar para realizar el sort�

��� El problema de la selecci�on

Supongamos que tenemos un vector A de tamanio n originalmente desordenado�De�nimos el rango de un elemento del vector como la posici�on que el elementoocupar�ia si el vector estuviese ordenado� De esta forma el elemento mas chicotiene rango �� el segundo rango �� etc� Aunque no afecta en absoluto la res oluci�on del problema supongamos tambien que todos los elementos del vectorson distintos entre si� El problema de la selecci�on consiste en encontrar el ele mento cuyo rango es k� En particular a veces interesa obtener el elemento cuyorango es k � n

� que es la mediana del conjunto de datos� A este problema se losuele llamar tambien problema de la mediana�

El problema de la selecci�on puede resolverse en forma super sencilla ordenandoel vector A y devolviendo A�k�� Como vimos hasta el momento esto puedehacerse en ��n logn�� Sin embargo podemos conjeturar que ordenar el vectorno es del todo e�ciente porque obtenemos todos los rangos cuando en realidadsolo nos interesa uno en particular� Intuitivamente la soluci�on usando sort esine�ciente� Queremos encontrar un algoritmo que nos permita encontrar elelemento cuyo rango es k en tiempo menor que ��n logn�� Como veremos lasoluci�on a este problema no es para nada trivial�

����� Cribas � � �

Hemos introducido este problema debido a que presenta un caso muy particulardentro de los algoritmos de tipo Divide and Conquer� En los algoritmos Divideand Conquer dividimos el problema en m problemas mas chicos para luegoresolverlos y combinar las soluciones de ambos� Una criba se presenta cuandom � �� Las cribas se aplican a problemas en los cuales estamos interesados enobtener un elemento determinado dentro de un conjunto de elementos de tamanion� Este tipo de algoritmos trabaja eliminando un cierto conjunto de elementosdel conjunto sabiendo que ninguno de ellos es el elemento buscado� el algoritmose aplica recursivamente hasta que queda un �unico elemento en el conjunto elelemento buscado�

Page 53: PPP - Algoritmos

El algoritmo que vamos a describir funciona de la siguiente manera� Recibeun vector A�dos numeros p y r que indican desde donde hasta donde buscar en elvector �inicialmente p � � y r � n� y un numero k que es el rango que queremosencontrar en el vector� El algoritmo selecciona un elemento del vector que sedenomina pivot �p�� decidir cual es el pivot es importante� pero por el momentosupongamos que el pivot es elegido de alguna manera� Luego particiona el vectoren tres partes A�p��q �� contiene todos los elementos menores que el pivot� A�q�es el pivot� A�q����r� contiene todos los elementos mayores que el pivot� Dentrode los vectores A�p��q �� y A�q����p� los elementos pueden estar en cualquierorden� El ranking del pivot en cualquier fase del algoritmo es q � p � �� sik � q � p � � entonces el pivot es el elemento buscado� Si k � q � p � �aplicamos el algoritmo recursivamente a A�p��q��� si k � q�p� � aplicamos elalgoritmo recursivamente a A�q����p�� esto queda ejempli�cado en la ilustraci�on�

Notemos que el algoritmo satisface los principios que enunciabamos sobre unacriba� elimina ciertos elementos y luego se invoca recursivamente con el resto�Cuando el pivot es el buscado tenemos suerte y eliminamos todos los dem�aselementos� sino seguimos buscando� Tenemos a�un que resolver el problema de

Page 54: PPP - Algoritmos

Algorithm �� Seleccion��A�p�r�k�� Selecciona de A�p��r� el !k"esimo elemento

if p � r thenreturn A�p�

elsex� ElegirP ivot�A� p� r�q � Particionar�A� p� r� x�xrank � q � p� qif k � xrank then

return xelseif k � xrank then

return Seleccion��A�p�q ��k�else

return Seleccion��A�q���r�k q�end if

end ifend if

seleccionar el pivote y ademas el de particionar el vector� Supongamos por elmomento que ambas cosas pueden hacerse en ��n�� Nos queda por averiguarque tan e�ciente es nuestra criba� es decir cuantos elementos eliminamos cadavez� Si el pivote es el elemento mas chico o mas grande del vector eliminamossolamente un elemento� el mejor caso ocurre cuando el pivot es un elementomuy cercano al medio en cuyo caso eliminamos la mitad del vector y podemosescribir la siguiente recurrencia�

T �n� �

�� si n � �T �n� � � n sino

Resolviendo por el teorema mestro tenemos que el algoritmo es ��n�� es decirque en el mejor caso insume una cantidad de tiempo lineal� Si el pivot queelegimos es malo de todas formas el algoritmo se va a mantener dentro del ordenlineal� por ejemplo�

T �n� � � si n � �

T �n� � T ���n

���� � n sino

Tambien da como resultado ��n�� por lo tanto podemos decir que el algoritmoes ��n�

����� Eligiendo el pivote

Como vimos aun eligiendo el pivote malamente el algoritmo tiende a ser lineal�sin embargo cuanto mejor elijamos el pivote mejor va a funcionar� Otra de lascosas que sabemos es que el pivote debe ser elegido en ��n� para que valga larecurrencia que hab�iamos planteado anteriormente�

Page 55: PPP - Algoritmos

Como garantizar un buen pivote Uno de los problemas mas duros enel algoritmo de selecci�on consiste en encontrar un pivote de forma tal quepodamos asegurar que el pivote seleccionado siempre funcionar�a relativamentebien� Floyd� Tarjan� Pratt y Rivest encontraron un algoritmo que garantiza quen�� � q � �n��� lo cual es mas que su�ciente para aseverar la validez del pivote�

El algoritmo de Floyd�Pratt�Rivest�Tarjan

Primer paso� dividir en grupos de En primer lugar se particiona elvector en grupos de elementos� Por ejemplo A������A��������A��������etc� Lacantidad de grupos es m � dn� e Todos los grupos tendran elementos salvo el�ultimo que puede tener menos� Esto puede hacerse facilmente en tiempo ��n��

Segundo paso� computar la mediana de cada grupo En segundo lugarse computa la mediana de cada grupo� Como todos los grupos tienen tamanioconstante� no necesitamos un algoritmo e�ciente para encontrar la mediana�podemos aplicar burbujeo a cada grupo y luego elegir el elemento del medio decada vector ordenado� Esto tarda una cantidad de tiempo constante ���� y serepite m � dn� e veces� por lo tanto este paso insume tiempo ��n�� Una vezcalculadas las m medianas se las copia a un vector auxiliar B�

Tercer paso� Hallar la mediana de las medianas El tercer paso consisteen hallar la mediana de las m medianas anteriores� para esto tenemos que llamaral algoritmo Seleccion� en forma recursiva de la forma Seleccion��B� ��m� k�donde m � dn� e y k � bm��

� c� El elemento resultante la mediana de medianases el que se elige como pivot� Debemos demostrar ahora que el pivot no dejamenos de n�� elementos a izquierda o derecha de el�

Teorema El rango del pivote x es por lo menos n�� o a lo sumo �n�� en elvector A

Demostraci�on Vamos a probar que el rango de x es por lo menos n��� la otraparte es exactamente sim�etrica� Para demostrar esto tenemos que probar quehay al menos n�� elementos menores que x� Para evitar problemas causados porlas funciones piso y techo supongamos que n el tamanio del vector es multiplode de forma tal que m � n�� Debido a que x es la mediana de las medianaspodemos a�rmar que por lo menos la mitad de las medianas de los gruposson menores o iguales que x� Y en cada grupo de medianas �de tamanio �hay tres elementos que son menores o iguales a su mediana� Por lo tanto hay���n����� � �n��� � n�� elementos que son menores o iguales a x en elvector� La ilustraci�on permite entender esta demostraci�on en forma mas simple�

Page 56: PPP - Algoritmos

An�alisis de algoritmo Aplicando el algoritmo de Floyd Rives Tarjan Prattpara calcular el pivote sabemos que por lo menos eliminamos a ��� de los elemen tos en cada llamada� sin embargo tenemos que recalcular el orden del algoritmo�La llamada recursiva a Seleccion��� � �� se hace para no mas de �n�� elementos�pero para lograr esto dentro de ElegirP ivote tenemos que volver a llamar aSeleccion��� � �� para el vector B �el que tiene las medianas de los grupos de �y sabemos que B tiene n� elementos� Todo lo demas como hemos mostrado sehace en ��n�� El tiempo que insume el algoritmo lo podemos calcular resolviendola siguiente recurrencia�

T �n� �

�� si n � �T �n�� � T ��n��� � n sino

Esta es una recurrencia realmente rara que involucra una mezcla de fracciones�n�� y ��n���� Por lo que resulta imposible aplicar el teorema maestro� elm�etodo iterativo es tambien de resoluci�on compleja por lo que sabiendo quepretendemos que el algoritmo sea lineal vamos a tratar de aplicar el metodo desutituci�on para demostrarlo�

Teorema� Existe una constante c tal que T �n� � n�

Demostraci�on por inducci�on en n Sea n � �� T �n� � ��por lo tantoT �n� � cn si c � �

Page 57: PPP - Algoritmos

Hip�otesis inductiva T �n�� � cn� para n� � nQueremos probar que T �n� � cnPor de�nicion sabemos que T �n� � T �n�� � T ��n��� � nComo n� y �n�� son ambos menores que n podemos aplicar la hip�otesis

inductiva obteniendo�

T �n� � cn

� c

�n

�� n � cn�

�� � n

T �n� � cn��

��� n � n�

��c

��� ��

Por lo tanto c � ���c������ Despejando c vemos que se cumple para c � ���Como necesitabamos c � � y ahora necesitamos c � ��� Podemos decir que conc � ��� T �n� � cn Por lo que queda demostrado�

A prop�osito Esta demostraci�on era un ejercicio de uno de los apuntes an teriores� espero que la resoluci�on sea igual o muy parecida a la planteada porUd�

Algunos podran preguntarse porque el algoritmode F loyd� etc � � � utiliza gruposde elementos� ocurre que por la demostraci�on anterior el algoritmo funcionapara n � � y por eso eligieron n � �

����� Particionando

El otro problema que nos restaba resolver sobre el algoritmo �Seleccion��� escomo particionar el vector una vez elegido el pivote� Este procedimiento lovamos a dejar para mas adelante ya que no hay tiempo ni espacio su�ciente enesta clase�

��� Problemas no tan simples� Como multiplicar

dos n�umeros

El problema de multiplicar dos n�umeros consiste en encontrar un algoritmo e� ciente que permita multiplicar dos n�umeros de gran cantidad de d�igitos� Estetipo de problema se presenta hoy en muchos algoritmos criptogr�a�cos o de gen eraci�on de numeros aleatorios que deben resolver multiplicaciones entre numerosde muchos d�igitos� Sumar dos numeros no es problema ya que resulta sencillohacerlo en tiempo ��n�� Sin embargo el m�etodo tradicional para multiplicardos numeros que todos hemos aprendido en la escuela primaria insume tiempo��n��� queremos averiguar si no hay un algoritmo mas e�ciente� Sorprendente mente dicho algoritmo existe�

Page 58: PPP - Algoritmos

����� Dividir para conquistar la multiplicaci�on

Trataremos de aplicar el paradigma de Dividir para Conquistar al problema decomo multiplicar dos n�umeros para ver si podemos obtener un algoritmo quesea mejor que ��n���

Aplicando el paradigma de dividir para conquistar hacemos lo siguiente seandos numeros A y B de n d�igitos cada uno �si tienen distinta cantidad de d�igitoscompletamos con ceros�� Dividimos el numeroA en sus n�� d�igitos mas signi�cativoswy sus n�� d�igitos menos signi�cativosx� Hacemos lo mismo con B obteniendoy y z� De acuerdo a la partici�on que hicimos sabemos que A � w � ��n�� � x yB � y � ��n�� � z� Una vez realizada la partici�on podemos realizar la multiplic aci�on de acuerdo al siguiente esquema�

Como vemos podemos hacer el producto de la forma

Seam � n��

mult�A� b� � mult�w� y����m � �mult�w� z� � mult�x� y����m � mult�x� z�

La operaci�on de multiplicar por ��m consiste simplemente en shiftear el n�umerom posiciones y por lo tanto no es realmente una multiplicaci�on� las sumas im plican sumar numeros de n�� d�igitos y cuesta por lo tanto ��n� cada una�Podemos expresar entonces el producto entre dos n�umeros como � productosde numeros de la mitad de d�igitos de los originales mas una cantidad constantede sumas y shifts de costo ��n�� Por lo tanto el costo del algoritmo se puede

Page 59: PPP - Algoritmos

calcular a partir de la siguiente recurrencia�

T �n� �

�� si n � ��T �n� � � n sino

Aplicando el teorema maestro vemos que a � � b � � k � � y a � bk por lo queestamos en el caso uno y el orden es ��nlog �� � ��n��� Desafortunadamenteno hemos podido� aun� mejorar el algoritmo� Pese a no haber podido mejorar elalgoritmo podemos apreciar un detalle importante la parte cr�itica del algoritmoes la cantidad de multiplicaciones de n�umeros de tamanio n��� El numero desumas� siempre y cuando sea constante� no afecta el orden del algoritmo� Porlo tanto nuestro objetivo va a ser reeemplazar algunas multiplicaciones por unacantidad constante de sumas� Obviamente no podemos multiplicar mediantesumas sucesivas puesto que la cantidad de sumas depender�ia de n y no ser�iaconstante�

����� El m�etodo de Gauss

La clave para mejorar el algoritmo reside en un truco algebraico descubierto porGauss� Gauss encontro lo siguiente�

C � mult�w� y�

D � mult�x� z�

E � mult��w�x�� �y�z���C �D � �wy�wz�xy�xz��wy�xz � �wz�xy�

Finalmente tenemos

mult�A�B� � C � ���m �E � ��m �D

En total hacemos � multiplicaciones� � sumas y � restas de n�umeros de n��digitos� ademas se requieren algunos corrimientos� El tiempo del algoritmoaplicando el truco de Gauss es el siguiente�

T �n� �

�� si n � ��T �n��� � n sino

�Aplicando el teorema maestro nuevamente tenemos a � �� b � � y k � �� Locual nos da T �n� � ��nlog �� � ��n�������

Debemos analizar si esto es realmente una mejora� Este algoritmo arrastra unacantidad grande de factores constantes como el overhead debido a la recursi�on ylas operaciones aritm�eticas adicionales� pero debido a nuestros conocimientos delorden de los algoritmos sabemos que a partir de un cierto n el nuevo algoritmoser�a mejor ya que el tradicional tiene una tasa de crecimiento mayor� Por ejemplosi suponemos que en el algoritmo de Gauss las constantes son veces mayoresque en el algoritmo simple tenemos �n����� versus n��� y el n a partir del cualGauss es mejor es �� si las constantes fuesen �� veces mayores tendriamosn � ���� En de�nitiva en general para multiplicar n�umeros de gran cantidadde d�igitos el algoritmo mejorado resulta superior�

Page 60: PPP - Algoritmos

��� El problema de los puntos mas cercanos� Se�gunda parte

El problema de los n�umeros mas cercanos en el plano� recordemos consist�ia endado un conjunto de puntos encontrar la pareja de puntos tal que su distanciaes m�inima�

Para este problema dispon�iamos de una soluci�on iterativa de orden ��n���tal vez podamos aplicar nuestros conocimientos en algoritmos de tipo Dividirpara Conquistar para resolver el problema en forma mas e�ciente�Tenemos queaplicar las tres fases del paradigma dividir� conquistar y combinar�

Dividir� Recordemos que los puntos se suponian almacenados en un vectorP � Si P contiene pocos puntos� entonces simplemente aplicamos el algoritmo defuerza bruta iterativo que conoc�iamos gasta el momento �Tarda una cantidad detiempo constante�� Si hay mas de n puntos entonces trazamos una linea vertical lque subdivide la listaP en dos conjuntos de aproximadamente el mismo tamanio�P l y Pr�

Conquistar� Recursivamente aplicamos el procedimiento en ambas lisas� porlo que obtenemos �l y �r distancias m�inimas para los dos conjuntos� De ambasdistancias obtenemos � � min��l � �r��

Combinar� Lamentablemente � no no es el resultado �nal� ya que podr�iadarse que la linea l que hemos elegido pasa justo entre los dos puntos que estana distancia m�inima� Debemos chequear si no hay dos puntos� uno a cada lado

Page 61: PPP - Algoritmos

de la l�inea� cuya distancia sea menor a �� En primer lugar observemos que nonecesitamos chequear todos los puntos� si un punto esta a mayor distancia del que � entonces seguro no hay un vecino del otro lado de la l�inea que puedaformar una distancia menor que �� Creamos una lista P � de puntos que est�an amenos de � de cada lado de l� Determinamos entonces la distancia m�inima paralos puntos de P � que llamaremos �� y devolvemos el m�inimo entre � y �� comoresultado� En realidad no devolvemos la distancia sino los dos puntos que estana dicha distancia uno del otro�

El problema consiste en analizar como encontrar la distancia m�inima en P ��lo cual requiere un poco de astucia� Para optimizar el algoritmo queremosencontrar la distancia m�inima en P � en tiempo ��n� vamos a demostrar que estopuede hacerse suponiend que los puntos de P � estan ordenados por la coordenaday� luego tendremos que resolver como ordenar los puntos�

Supongamos que los puntos de P � estan ordenados de acuerdo a su coordenaday� Consideremos un punto P ��i� en la lista ordenada� Cual es el punto mascercano a P ��i�� Podemos restringir la busqueda a los puntos que tienen �indicej mayor que i ya que el proceso lo vamos a hacer para todos los puntos �si elvecino mas cercano esta arriba� entonces esto ya fue analizado cuando buscamosel vecino de dicho punto�� Podr�iamos pensar que necesariamente el vecino mascercano es P ��i � ��� pero esto no es verdad� dos puntos que tienen distanciam�inima en cuanto a la coordenada y no necesariamente tienen distancia m�inimaen el plano� queremos saber que tan lejos tenemos que buscar hasta P ��i � ����

��

Page 62: PPP - Algoritmos

P ��i � ��� tal vez podamos acotar la b�usqueda a una cantidad constante depuntos�

Resulta que podemos limitar la cantidad de puntos a buscar y ademas resultaque no nos hace falta analizar mas de � puntos en la lista P � para cada punto�Esto lo vamos a tener que demostrar�

Teorema� Si P ��i� y P ��j� �i � j� son la dupla mas cercana en P � y la distanciaentre ellos es menor que �� entonces j � i � ��

Demostraci�on� Supongamos que P ��i� y P ��j� son la dupla mas cercana enP � y su distancia es menor que �� Por estar en P � estan a distancia menor que� de l� Por ser su distancia menor que � sus coordenadas y di�eren en menosde �� Por lo tanto ambos puntos residen en un rectangulo de ancho �� y altura� centrado en la l�inea l� Dividamos este rect�angulo en � cuadrados del mismotamanio de lado ���� Observemos que la diagonal de cada uno de esto cuadradostiene como longitud

�p

��

�p�� �

Como cada cuadrado esta completamente a un lado de la linea l ningun cuadradopuede contener dos puntos de P ya que si los tuviera entonces ambos puntosestar�ian a distancia menor que � y � no ser�ia la distancia m�inima entre lasdistancias m�inimas a ambos lados de P � Por lo tanto puede haber a lo sumo �puntos de P � en este rect�angulo y por lo tanto j � i � ��

Por lo tanto por cada P ��i� solo debemos chequear una cantidad constante den�umeros y por eso podemos buscar la distancia m�inima en P � en O�n��

El �unico asunto que nos queda pendiente es como ordenar los puntos de P ��dado que queremos hacerlo en O�n� nos vemos impedidos de usar un algoritmode sort gen�erico que tardaria O�n logn� en general�

Hay una soluci�on ingeniosa a este problema Pre ordenar los puntos� Enparticular almacenamos los puntos �redundantemente� en dos listas PX y PYordenando por las coordenadas x y y respectivamente� Esto lo hacemos llamandoa un algoritmo de sort dos veces antes de comenzar el algoritmo de dividir yconquistar�

Ya no necesitamos la lista P � cuando hacemos el split de P en P l y Pr loque hacemos es dividir PX y PY en Xl� Xr� Y l� Y r respectivamente� Esto esfacil de hacer en O�n�� Dado que las listas originales estan ordenandas las listasresultantes tambien lo estan� Para armar la lista P � simplemente extraemos loselementos de Y que est�an a distancia � de l y luego los copiamos a la lista Y �

en donde luego buscamos�

��

Page 63: PPP - Algoritmos

Resumiendo Este es un resumen del algoritmo� Esta version devuelve ladistancia m�inima� es sencillo aplicar los cambios pertinentes para devolver lospuntos a dicha distancia�

� Presort� Dada la lista P � hacemos dos copias PX y PY � OrdenamosPX por la coordenada x de los puntos y la lista PY por la coordenada y�

� Parte Recursiva� DistMin�X�Y�

� Condici�on de corte� Si la cantidad de puntos es menor que �entonces resolvemos el problema por fuerza bruta y devolvemos ladistancia m�inima � analizando todas las distancias posibles�

� Dividir� Sino� sea l la mediana de las coordenadas x de PX� Divi dimos ambas listas PX y PY por esta linea� manteniendo el orden�creando Xl� Xr� Y l� Y r�

� Conquistar� �l � DistMin�Xl�Yl�� �r � DistMin�Xr�Yr��

� Combinar� � � min��l � �r��Creamos la lista Y � copiando todos lospuntos de Y que estan a distancia menor que � de l� Para i desde �hasta la longitud de Y � y para j desde i � � hasta i � � calcular ladistancia entre Y ��i� y Y ��j�� Sea �� la distancia m�inima entre dichasdistancias� Devolver min��� ����

A partir de la descripci�on es f�acil programar el algoritmo�

���� An�alisis

Debemos analizar cuanto tiempo tarda el programa en su peor caso� en el casopromedio en an�alisis es muy complejo porque depende de cuantos puntos tieneP � en promedio y esto depende en cual es la distancia m�inima esperada en cadasublista� En el peor caso podemos suponer que P � tiene a todos los puntos� Lafase de pre sort insume O�n logn�� Para analizar la parte recursiva planteamosla recurrencia�

T �n� �

�� si n � ��T �n��� � n sino

�Esta recurrencia ya es conocida y nos permite obtener que el algoritmo esO�n logn��

De esta forma obtenemos un algoritmo mas e�ciente que el algoritmo de fuerzabruta que era ��n���

�� Resumen y puntos clave

Wow � estos fueron muchos de temas� El prop�osito de esta clase fue explicar unparadigma muy utilizado en el disenio de algoritmos �Dividir para conquistar��mediante varios ejemplos hemos visto como en algunos casos este paradigma

��

Page 64: PPP - Algoritmos

nos permite resolver un problema en forma e�ciente� La forma b�asica de unalgoritmo de tipo dividir para conquistar contiene los siguientes puntos�

� Condici�eon de corte� Controla en que momento se detiene la recurs ividad� usualmente consiste en aplicar algun m�etodo no muy e�cientecuando el problema alcanza un tamanio chico�

� Dividir� Se divide el problema en n sub problemas mas chicos�

� Conquistar� Aplicando recursivamente el algoritmo se resuleven los prob lemas mas chicos�

� Combinar� Se combina la soluci�on de los problemas resueltos para en contrar la soluci�on al problema original�

El algoritmo de MergeSort es un algoritmo de sort interno importante� queilustra claramente el paradigma�

El problema de la Seleccion o de la Mediana fue durante muchos anios de muydif�icil resoluci�on en forma e�ciente� el algoritmo que explicamos aqui permiteresolver el problema en forma e�ciente utilizando un algoritmo de tipo dividirpara conquistar� En este problema utilizamos una forma especial de algoritmos�Dividir para Conquistar� en la cual la cantidad de subproblemas es �� A estosalgoritmos se los conoce como cribas�

Otra aplicacion conocida del paradigma permite multiplicar dos numeros degran cantidad de d�igitos en forma mas e�ciente que el metodo tradicional� aquiutilizamos un truco algebraico sugerido por Gauss para reducir el numero demultiplicaciones que debiamos realizar�

Por ultimo vimos como pudimos aplicar este paradigma al problema de en contrar los puntos a distancia m�inima en un plano en forma mas e�ciente quenuestra soluci�on anterior�

�� Ejercicios

�� Dado un vector A de n numeros encontrar un algoritmo que permita en contrar el elemento mayoritario en A� es decir aquel que aparece con mayorfrecuencia en el vector�

�� Una compania petrolera ha construido n torres de extracci�on de petroleo enla patagonia� la compania desea construir un oleoducto de direcci�on Norte Sur que permita trasnportar el petroleo extraido por las torres� Para esteproblema vamos a suponer que el oleoducto esta formado por una unicalinea recta� La empresa debe construir adem�as tramos perpendiculares aloleoducto que lleguen a cada torre� Describir un algoritmo que permita

��

Page 65: PPP - Algoritmos

encontrar la mejor ubicaci�on para el oleoducto de forma tal de minim izar la cantidad de kilometros a construir en tramos perpendiculares� Elalgoritmo debe ser lineal o mejor�

�� El m�etodo de Floyd� Rivest� Pratt y Tarjan toma grupos de elementospara la selecci�on del pivote� Indicar que ocurrir�ia si se tomaran � o �elementos para dicha selecci�on�

�� Dados dos vectores X�n� y Y �n� ordenados dar un algoritmo de ordenO�logn� que permita calcular la mediana de los �n elementos en conjunto�

��

Page 66: PPP - Algoritmos

Chapter �

Algoritmos Aleatorizados

��� Algoritmos aleatorizados

Los algoritmos aleatorizados son aquellos que en alg�un momento de su ejecuci�onutilizan la generaci�on de un n�umero aleatorio para tomar una determinada de cisi�on� Sorprendentemente aleatorizar un algoritmo haci�endolo tomar decisionesal azar a menudo sirve para que el algoritmo sea mas e�ciente� Los algorit mos aleatorizados se dividen en dos grandes familias los algoritmos de tipoMontecarlo y los algoritmos de tipo Las Vegas�

���� Algoritmos tipo Las Vegas

Los algoritmos de tipo Las Vegas siempre resuelven correctamente un problema�sin embargo pueden �con baja probabilidad de ocurrencia� demorar mucho mastiempo que en el caso medio para encontrar la respuesta�

���� Algoritmos tipo Montecarlo

Los algoritmos de tipo Montecarlo siempre son e�cientes en cuanto a la cantidadde tiempo necesaria para encontrar la respuesta� Sin embargo en algunos casos�con baja probabilidad de ocurrencia� pueden producir una respuesta no correctaal problema�

��� Quick Sort

El algoritmo de Quick Sort es uno de los algoritmos de sort mas conocidos� enprimer lugar es un algoritmo de tipo �Divide � Conquer� cuyo tiempo medioseg�un demostraremos es ��n logn�� pero cuyo peor caso es ��n��� Quick Sortes un algoritmo in situ� es decir que a diferencia del algoritmo de Mergesort nonecesitamos de espacio adicional en memoria para ordenar el vector ya que elproceso se lleva a cabo sobre el vector mismo�

Page 67: PPP - Algoritmos

Quick Sort es tambi�en un algoritmoaleatorizado ya que utiliza un generador den�umeros al azar para tomar decisiones� Como es de esperar Quick Sort siempreproduce un vector correctamente ordenado por lo que lo podemos clasi�car comoun algoritmo de tipo Las Vegas�

���� Fundamentos de Quick Sort

El funcionamiento b�asico de Quick Sort lo podemos describir mediante el es quema cl�asico de los algoritmos �Divide � Conquer��

Condici�on de corte� Si la cantidad de elementos del vector a ordenar es � o� entonces return�

Dividir� Seleccionar un elemento x al azar del vector que llamaremos pivote�Esta es la parte aleatorizada del algoritmo�

En base al pivote dividimos el vector en tres partes� A����q ��� A�q� yA�q����n��

Conquistar� Recursivamente invocar Quick Sort para A����q��� y A�q����n�

Combinar� No es necesario realizar ning�un proceso extra ya que A����n� quedaordenado�

Algorithm �� QuickSort�A�p�r�� Ordena el vector A desde p hasta r

if r � p thenreturn

end ifi� random�p��r�Swap�A�i��A�p��q� Particionar�p� r� A�QuickSort�p�q ��A�QuickSort�q���r�A�

An�alisis En primer lugar es bastante obvio que el algoritmo ordena el vector�es decir que podemos a�rmar que es correcto� El costo en tiempo dependebastante del pivote elegido� si el pivote fuese un n�umero muy chico o muy grandellamar�iamos recursivamente al algoritmo para practicamente todos los n�umeros�si el pivote en cambio es un numero medio las particiones se balancean y elrendimiento es mejor� �� Ademas para poder proceder al an�alisis del algoritmonecesitamos un algoritmo que realice la partici�on� este algoritmo tambi�en erasolicitado por el algoritmo de Seleccion� que ya estudiamos� Pasemos a ver�pues� como realizar el solicitado proceso de partici�on�

�Las llamadas recursivas pueden ser vistas como un �arbol� si el pivote esta en el medioel �arbol es balanceado� si en cambio el pivote es un extremo una de las ramas del �arbol seramucho mas extensa que la otra y necesitaremos mas llamadas recursivas

��

Page 68: PPP - Algoritmos

���� Algoritmo para particionar el vector

El algoritmo que presentamos trabaja suponiendo que se recibe un vector A� dosindices p y r que indican desde donde hasta donde particionar y ademas suponeque el Pivote es el elemento A�p�� o sea el primer elemento del vector� Es poresto que en el algoritmo de Quick Sort se Swapea el pivote con A�p� antes departicionar�

El algoritmo mantiene un invariante a lo largo de su ejecuci�on que indica queel vector esta dividido en � segmentos indicados por p� q� s y r� De la forma

�� A�p� � x es el pivote�

�� A�p� ���q� contiene elementos que son menores que x

�� A�q � ���s� �� contiene elementos que son mayores o iguales que x

�� A�s��r� contiene elementos desconocidos�

El algoritmo que realiza la particion es el siguiente�

��

Page 69: PPP - Algoritmos

Algorithm �� Particionar�p�r�A�� Particiona el vector A�p��r� con pivote A�p�

x� A�p�q� pfor s � p� � to r doif A�s� � x thenq� q � �Swap�A�q�� A�s��

end ifend forSwap�A�p�� A�q��returnq

En la �gura vemos un ejemplo de funcionamiento del algoritmo de particion�

An�alisis En primer lugar es evidente que el algoritmo funciona en forma cor recta� adem�as esta es solo una implementaci�on� hay varias formas de realizar lapartici�on y todas ellas son mas o menos iguales en e�ciencia� El algoritmo tieneun �unico ciclo que recorre todos los elementos por lo que se trata claramente deun algoritmo de orden lineal�

��

Page 70: PPP - Algoritmos

���� An�alisis de QuickSort

En general el tiempo necesario por el procedimiento QuickSort esta dado porla recurrencia�

T �n� �

�� si n � �T �q � �� � T �n� q� � n sino

Y como vemos el an�alisis depende del valor de q

An�alisis del peor caso

El peor caso ocurre cuando el pivote es uno de los extremos del vector �extremoen cuanto a su valor m�inimo o m�aximo�� suponiendo por ejemplo que el pivotees el elemento mas chico del vector tendremos que q� la posici�on del pivote es��Aplicando el m�etodo iterativo a la recurrencia�

T �n� � T ��� � T �n� q� � n

T �n� � � � T �n� �� � n

T �n� � T �n � �� � �n� ��

T �n� � T �n� �� � n� �n� ��

T �n� � T �n � �� � �n� �� � n� �n� ��

T �n� � T �n� �� � �n � �� � �n� �� � n� �n� ��

���T �n� � T �n � k� �n��Xi���

n� i

T �n� � O�n��

An�alisis del caso medio

Para analizar el caso medio debemos interpretar a T �n� como el tiempo promediodel algoritmo QuickSort para un vector de tamanio n� El algoritmo tiene nopciones equiprobables para elegir el pivot� Por lo tanto la probabilidad deelegir un elemento es ��n� La recurrencia que tenemos que plantear es

T �n� �

�� si n � ��n

Pnq�� �T �q � �� � T �n� q� � n� sino

Esta no es una recurrencia comun� por lo que no podemos aplicar el TeoremaMaestro� el metodo iterativo es posible pero resulta complicado� Entonces vamosa intentar demostrar que el caso medio es ��n logn��

Teorema� Existe una constante c tal que T �n� � cn lnn para todo n � ��Notemos que hemos reemplazado log con ln� esto simpli�ca nuestra demostra cion sin afectar el orden� de hecho cualquier logaritmo sirve�

��

Page 71: PPP - Algoritmos

Demostraci�on� La demostraci�on es por inducci�on en n� Para el caso b�asicon � � tenemos

T �n� ��

�Xq��

�T �q � �� � T ��� q� � ��

T �n� ��

���T ��� � T ��� � �� � �T ��� � T ��� � �� �

�� �

� � � � c ln � � c � ���� ln�� � c � ����

Hipotesis inductiva Asumimos que n � �� entonces para cualquier n� � nvale que T �n�� � cn� lnn�� Queremos probar que esto es v�alido para T�n��Expandiendo la de�nici�on de T�n� y sacando el factor n afuera de la sumatoriatenemos�

T �n� ��

n

nXq��

�T �q � �� � T �n� q� � n�

T �n� ��

n

nXq��

�T �q � �� � T �n� q�� � n

Observemos que si dividimos la sumatoria en dos sumatorias ambas sumanlos mimso valores T ��� � T ��� � � � � � T �n � ��� una desde � hasta n � � yla otra desde n � � hasta �� Entonces podemos escribir la sumatoria como�Pn��

q�� T �q��T ��� y T ��� no responden a esta formula por lo que los vamos atratar en forma especial� Aplicando esta sustitucion y aplicando la hip�otesisinductiva a la sumatoria restante lo cual podemos hacer porque q � n tenemos�

T �n� ��

n�n��Xq��

T �q�� � n ��

n�T ��� � T ��� �

Xq��

n� �T �q�� � n

T �n� ��

n�� � � �

n��Xq��

�cq ln q�� � n

T�n� ��c

n�n��Xq��

�cq ln q�� � n��

n

Esta sumatoria no la hemos visto nunca hasta el momento� vamos a mostrarla solucion�

S�n� �n��Xq��

q ln q � n�

�lnn� n�

Reemplazando

T �n� ��c

n�n�

�lnn� n�

�� � n

n

��

Page 72: PPP - Algoritmos

T �n� � cn lnn� cn

�� n�

n

T �n� � cn lnn� n�� � c

�� �

n

Queremos que esta expresion sea menor o igual que cn lnn Cancelando cn lnna ambos lados de la desigualdad vemos que se cumple si�

n��� c

�� �

c

n� �

Esto se cumple si c � �� como ademas necesitabamos c � ���� queda de mostrado�

Resumen Hasta el momento el peor caso del algoritmo QuickSort es O�n���el caso medio es ��n logn�� Aunque no lo hemos demostrado el peor caso noocurre muy a menudo� Para valores grandes de n el tiempo puede considerarse��n logn� con una probabilidad alta� Para degenerar en el orden cuadr�atico elalgoritmo tendria que elegir el pivote en forma defetuosa en cada uno de lospasos recursivos� Las elecciones malas del pivote son poco probables por loque una secuencia de malas elecciones es a�un menos probable� El algoritmo deQuickSort es ademas un algoritmo de sort in� situ�

���� La ventaja del algoritmo aleatorizado

Existen versiones de QuickSort que no eligen el pivote en forma aleatoria sinoque por ejemplo toman siempre el primer elemento del vector como pivote� Estat�ecnica tiene como desventaja que� por ejemplo� si el vector ya se encontrabaordenado o bien se encontraba rebatido el algoritmo se encuentra automatica mente en el peor caso y adquiere orden cuadr�atico� Por eso es muy aplicablela elecci�on aleatoria ya que ocasiona una ventaja fundamental Ninguna dis�posici�on original de los datos ocasiona el peor caso� esto es f�acil de verya que la ocurrencia del peor caso no depende de los datos de entrada sino� dela elecci�on del pivote que es aleatoria�

Hemos dado con el principio clave de los algoritmos de tipo Las Vegas eltomar una decisi�on aleatoria para indpendizar el funcionamiento del algoritmode los datos de entrada ocasionado que el peor caso ocurra con muy baja prob abilidad �n malas elecciones de un numero aleatorio��

��� Resumen QuickSort

� Es un algoritmo de tipo Divide � Conquer�

� Es un algoritmo aleatorizado de tipo Las Vegas�

� El peor caso es ��n�� con muy baja probabilidad�

��

Page 73: PPP - Algoritmos

� El caso medio que es altamente probable es ��n logn��

� Ordena el vector in � situ

� No es estable�

��� El problema de los puntos mas cercanos enel plano� Parte ��

El problema de los puntos mas cercanos en el plano� recordemos� consist�ia enencontrar los dos puntos que se encuentran mas cercanos �a distancia m�inima�dentro de un conjunto de n puntos que se almacenan en un vector A����n�� Enclases anteriores vimos una soluci�on iterativa que utilizaba fuerza bruta paraseleccionar cual era la dupla mas cercana analizando todas las posibles parejasde puntos� este algoritmo era de orden cuadr�atico� Luego vimos un algoritmode tipo Divide � Conquer que con una aproximaci�on mas inteligente permitiaresolver el problema en n logn A continuaci�on veremos como podemos plantearun algoritmo de tipo Las Vegas a�un mas inteligente que el anterior para resolverel problema en forma mas e�ciente�

���� Algoritmos aleatorizados incrementales

Una sub divisi�on de los algoritmos aleatorizados son los algoritmos incrementales�en este caso vamos a presentar un algoritmo tipo Las Vegas incremental pararesolver el problema de la distancia m�inima� La idea es la siguiente� los puntosvan a ser insertados uno a uno en un conjunto inicialmente vac�io y por cadapunto que insertamos vamos a chequear si no es necesario actualizar cual es ladistancia m�inima�

���� El algoritmo

El funcionamiento del algoritmo depender�a del orden en que se inserten los pun tos� algunos ordenamientos ser�an particularmente malos ya que necesitaremosactualizar la distancia m�inima por cada puunto insertado lo cual nos insumir�atiempo O�n��� Sin embargo al insertar los puntos en orden aleatorio el tiempoesperado del algoritmo sera O�n�� No lo vamos a demostrar pero la probabilidadde que el algoritmo insuma mas de O�n logn� es extremadamente chica�

Para simpli�car asumamos que los puntos han sido normalizados para pertene cer al cuadrado ������ �Esta suposici�on es solo para facilitar la explicaci�on delalgoritmo�� En primer lugar permutamos en forma aleatoria los puntos� y sea�p�� p� � � � pn� la permutaci�on resultante� Inicialmente ponemos el primer puntoen el conjunto y la distancia m�inima al haber solo un punto en el conjuntoes � Uno por uno insertamos los puntos p�� p�� etc� Sea Pi�� el conjunto

��

Page 74: PPP - Algoritmos

fp�� � � � � pi��g y sea � la distancia m�inima en Pi��� Sea �� la distancia m�inimaentre pi y cualquier punto de Pi�� si �� � �� entonces actualizamos la distancia�

La gran pregunta es como encontrar el punto mas cercano a pi� ser�ia demasiadolento considerar todos los puntos en Pi��� En purmer lugar observemos quesolo necesitamos considerar puntos de Pi�� que estan a distancia � de Pi� yaque ning�un otro punto puede afectar la dupla mas cercana actual� Declaramosque esto se puede hacer en tiempo constante si los puntos son almacenados enuna estructura apropiada�

Grilla de Buckets La estructura de datos que vamos a utilizar para guardar elconjunto de puntos se denomina grilla de buckets En particular subdividimosel cuadrado unitario ����� en una grilla de cuadraditos de lado �� Dentro de cadacuadradito mantenemos una lista enlazada de los puntos de Pi�� que pertenecenal cuadradito� esta lista se denomina bucket�

Para determinar a que bucket corresponde un punto observemos que si dividi mos el intervalo ����� en subintervalos de longitud � tendremos d �e���d subin tervalos� Si asumimos que indexamos los subintervalos de la forma �� �� � � � � d� �para determinar el subintervalo que contiene un cierto valor x dividimos x por� y redondeamos hacia abajo al entero mas cercano es decir�

I� � bx��c

Por ejemplo si � � ��� entonces los subintervalos son � ��� ����� � ����� ������ ����� ����� � ����� ��� El valor x � ���� es mapeado al intervalo b��������c ��� Extendiendo esto a dos dimensiones mapeamos el punto �x� y� al bucket�I��x�� I��y��� Cuando el algoritmo comienza inicialmente � � y existe un�unico bucket�

Para almacenar los buckets necesitamos una hash table ya que no podemosusar una matriz porque para � muy chicos tendr�iamos mas entradas en la matrizde las que podr�iamos manejar� Este es un buen ejemplo de como manejar elcosto espacial de algoritmo� Aquellos que no conozcan como funciona una hash table pueden despreocuparse y suponer que los buckets estan almacenados enuna matriz�

Un aspecto notable es que no podemos tener mas de � �cuatro� puntos encada bucket �uno en cada esquina del bucket� ya que de lo contrario la distanciam�inima no ser�ia � sino que ser�ia menor�

Dado el punto a insertar pi� para determinar el vecino mas cercano o bienesta en el bucket correspondiente a pi o bien es uno de los � bucktes vecinos�por lo tanto a lo sumo revisamos � bucktes y cada uno de ellos tiene a lo sumo

��

Page 75: PPP - Algoritmos

� puntos� por lo que la cantidad m�axima de puntos a revisar es � � � � �� y esconstante�

Si no hay un punto a distancia menor que � entonces la distancia m�inimapermanece inalterada e insertamos el nuevo punto en su bucket correspondiente�Si la distancia m�inima es modi�cada debemos reconstruir la grilla para la nuevadistancia m�inima� esto insume O�i� tiempo� ya que cada punto a ubicar insumeuna cantidad de tiempo contante�El algoritmo es el siguiente�

�� Permutar aleatoriamente los puntos� Sea fp�� p�� � � �� png la permutaci�onresultante� Crear una grilla trivial de �x� e insertar p� en la grilla� Sea� � inf

�� Para i desde � hasta n hacer

�a� Sea pi � �Xi� Yi�� Seleccionar el bucket �I��Xi�� I��Yi�� y sus � bucketsvecinos de la grilla�

�b� Si no hay puntos en ninguno de estos buckets entonces continuar elciclo� Sino computar la distancia m�inima y los �a lo sumo ��� puntosencontrados en los buckets� Sea �� esta nueva distancia�

�c� Si �� � � entonces � � ��� destruir la grilla anterior y construir unanueva grilla a partir de Pi � fp�� � � � � pig� Sino simplemente agregarpi a la grilla�

�� Dovolver �

��

Page 76: PPP - Algoritmos

���� Analisis

Este es un algoritmo iterativo� por lo que para analizarlo no vamos a necesitarplantear� al �n� ninguna recurrencia�

Peor caso

En el pero caso cada punto que agregamos al conjunto nos obliga a actualizarla distancia m�inima y por lo tanto a reconstruir la grilla� el tiempo se calculaentonces como�

T �n� �nXi��

i �n�n � ��

� O�n��

Mejor caso

En el mejor caso solo el segundo punto nos hace reconstruir la grilla y luegonunca mas actualizamos la distancia m�inima� el tiempo es entonces�

T �n� �X

i � �nO��� � O�n�

Caso medio

Si realizamos una simulaci�on del algoritmo veremos que la grilla es reconstruidauna cierta cantidad de veces para los primeros puntos pero� a medida que elalgoritmo procesa mas y mas puntos� la distancia m�inima es cada vez mas �rme yla reconstrucci�on de la grilla se vuelve muy poco frecuente� Para analizar el casomedio asumimos que todas las permutaciones de los puntos son equiprobables�Sea �i la probabilidad de que el i�esimo punto ocasione un cambio en la distanciam�inima� Entonces con probabilidad �i la grilla es reconstruida en la i�esimaiteraci�on con un costo de O�i�� Con probabilidad �� � �i� el i�esimo puntono afecta la distancia y la iteraci�on insume O���� Para obtener el caso medionecesitamos el promedio ponderado del tiempo que insume cada ciclo de cuaerdoa su probabilidad es decir

T �n� �nXi��

�i � �i � � � ��� ��� �nXi��

�i�i� � n

Necesitamos saber cuanto vale �i� para ello recurrimos a un truco bastanteusado en el an�alisis probabil�istico que consiste en analizar el algoritmo fun cionando de atras para adelante� Obseremos que Pi�� es un conjunto de i � �puntos� analizar que ocurre cuando un punto aleatorio es insertado en Pi�� essim�etrico a analizar que ocurre cuando eliminamos un punto al azar de Pi� Deaqui obtenemos esta observaci�on�

Page 77: PPP - Algoritmos

Observaci�on La probabilidad de que al insertar un nuevo punto en Pi�� seactualice la distancia m�inima es igual a la probabilidad de que al eliminar unpunto al azar de Pi estemos eliminando uno de los puntos que estan a distanciam�inima�

Como hay exactamente dos puntos que participan de la distancia m�inima yen total hay i puntos la probabilidad de que uno de los i puntos este en la duplaa distancia m�inima es ��i para i � �� Luego �i � ��i y calculamos�

T �n� �X

i � �ni���i� � n �nXi��

� � n � �n � O�n�

Por lo tanto el tiempo medio es O�n� y podemos a�rmar que con una probabil idad muy alta este algoritmo es de orden lineal�

Conclusiones Aqui termina nuestro seguimiento del problema de la distanciam�inima en el plano� hemos visto como a medida que estudi�abamos distintast�ecnicas para el disenio de algoritmos pod�iamos resolver el problema en formamas e�ciente� Planteamos primero un algoritmo iterativo que usando fuerzabruta resolv�ia el problema en O�n��� luego mediante un algoritmo de tipo �Di vide � Conquer� obtuvimos O�n logn�� por �ultimo mediante un algoritmo aleat orizado resolvimos el problema en O�n��

��� Testeando primalidad

Esta va a ser nuestra primera y �unica incursi�on dentro de los algoritmos detipo num�erico� estos algoritmos han adquirido gran importancia en los ultimosanios debido a que numerosos protocolos criptogr�a�cos y funciones de encripci�onde datos utilizan este tipo de algoritmos� en esta secci�on vamos a estudiar unalgoritmo num�erico particular que sirve para determinar si un n�umero es primoo no�

De�nici�on Un n�umero es primo si y solo si solo es divisible por � y por s�imismo�

���� Algoritmo por fuerza bruta

Basandonos en la de�nici�on podemos construir un algoritmo bastante simple�

El algoritmo insume en el peor caso n�� divisiones� es decir que es O�n� perosi analizamos el orden del algoritmo en funci�on del tamanio del n�umero en bitspodemos observar que la cantidad de bits de un n�umero n es k � log�n� por lo

��

Page 78: PPP - Algoritmos

Algorithm �� EsPrimo��n�� Devuelve true si n es primo

for k � � to n doif kmodn then

return falseend if

end forreturn true

tanto n � �k� con lo cual el algoritmo es O�n� � O��k� es decir que se trata deun algoritmo exponencial y claramente debe ser mejorado�

Teorema� Si n no es primo entonces n tiene un factor primo p tal que p � pn�

Demostracion� Supongamos que un n�umero n no es primo y su factorizaci�onprima es n � p�p� � � �pk � �

pn�k lo cual es falso salvo que k � � es decir que

n sea primo� Por lo tanto queda demostrado�

���� Algoritmo por fuerza bruta mejorado

El orden del algoritmo es ahora O�pn� � O�

p�k� � O��k�� con lo cual pese a

reducir notablemente la cantidad de divisiones a realizar seguimos teniendo unalgoritmo de orden exponencial�

���� El pequenio teorema de Fermat

Para todos los primos� p y enteros a tales que � � a � p � � vale queap�� � ��modp�

Por ejemplo a � � p � � � ��� � ���� � � � � � ��mod��

La demostraci�on del pequenio teorema de fermat nada tiene que ver con lamateria� sin embargo la tenemos disponible si alguien quiere observarla porcuriosidad�

Usando el teorema de Fermat� podemos especi�car un algoritmo aleatorizadopara testear si un n�umero es primo�

���� Algoritmo aleatorizado tipo Montecarlo

Como vemos este algoritmo sirve para decir si un n�umero no es primo perono asegura que un n�umero sea primo� esto ocurre porque el teorema de Fermatno funciona en ambas direcciones� que dos n�umeros n y a satisfagan el teoremano quiere decir que n sea primo�

��

Page 79: PPP - Algoritmos

Algorithm �� EsPrimo��n�� Devuelve true si n es primo

n� random����n� ��if an�� � ��modn� then

return falseelse

return true �aunque deber�ia ser maybe �end if

Por ejemplo n � ���� a � ��� ���� � ������� � ������ � �� � ��� � ���� Pero��� � �� � ��

Claramente estamos ante un algoritmo aleatorizado �usa un n�umero al azarpara realizar el chequeo� y de tipo Montecarlo� ya que la aleatorizaci�on no afectael tiempo de ejecuci�on del algoritmo sino el resultado� Eventualmente nuestroalgoritmo EsPrimo� puede devolver como primo un n�umero que no lo es� Elorden del algoritmo es el orden que insume realizar an��� como vimos en clasesanteriores es ��logn� es decir que pasamos de un algoritmo exponencial a unosub lineal �logar�itmico��

Un detalle importante es calcular cual es la probabilidad de que un n�umeroque no es primo sea considerado primo por el algoritmo� no la vamos a calcularen este apunte pero es inferior a ��� Si se elige mas de un n�umero al azary se efect�ua el chequeo varias veces esta probabilidad disminuye� de hecho laprobabilidad de devolver un resultado erroneo se puede hacer tan chica como sedesee�

Algorithm �� EsPrimo��n�� Devuelve true si n es primo

for k � � to constante don� random����n� ��if an�� � ��modn� then

return falseend if

end forreturn true

El orden del algoritmo es ��j � logn� es decir que sigue siendo un algoritmode orden logar�itmico� Cuanto mayor sea j mas tiempo va a tardar pero eso noafecta el orden del algoritmo�

Este comportamiento es t�ipico de los algoritmos de tipo Montecarlo� en dondese puede disminuir la probabilidad de devolver un resultado equivocado a costasde insumir mayor tiempo en el algoritmo�

��

Page 80: PPP - Algoritmos

Numeros muy raros Pese a que hagamos el chequeo una cantidad enormede veces el algoritmo aun tiene un problema� existen n�umeros no primos que sat isfacen el teorema de Fermat para todo � � a � n��� estos n�umeros se conocencomo �N�umeros Carmiqueleanos�� nuestro algoritmo es incapaz de distinguir unn�umero primo de un n�umero Carmiqueleano� Afortunadamente estos n�umerosson muy raros� hay solamente � en los primeros ��� millones de n�umeros en teros� por lo tanto podemos testear si el n�umero es o no Carmiqueleano contrauna tabla �Esto se hace en tiempo constante porque la tabla tiene longitud �ja��

Los primerosn�umerosCarmiqueleanos

��� ���� ����

Nuestra tercera versi�on del algoritmo EsPrimo es muy similar al algoritmoutilizado hoy en d�ia para chequear si un n�umero es o no primo� los algoritmostipo Montecarlo son ideales ya que reducen enormemente el tiempo de proces amiento y son bastante con�ables en cuanto al resultado que producen� Elalgoritmo mas utilizado es el de �Miller Rabin� que tambi�en detecta y eliminan�umeros Carmiqueleanos�

��� Resumen y puntos clave

Esta clase presento una familia de algoritmos muy particulares los algoritmosaleatorizados� que en alg�un momento de su ejecuci�on toman una decisi�on en basea un n�umero random�

Los algoritmos de tipo Las Vegas aleatorizan el tiempo de ejecuci�on delmismo� siempre producen un resultado correcto pero el mismo puede insumirgran cantidad de tiempo con una probabilidad muy baja� En estos algoritmos elobjetivo de la aleatorizaci�on es independizar el fucionamiento del algoritmo dela disposici�on de los datos de entrada� de forma tal que el peor caso se vuelvamuy poco probable� El algoritmo QuickSort es un ejemplo t�ipico�

Los algoritmos de tipo Montecarlo aleatorizan el resultado que producen�son algoritmos muy r�apidos pero que pueden dar un resultado equivocado conuna probabilidad muy baja� La probabilidad de obtener un resultado erroneopuede disminuirse aumentando el tiempo del algoritmo� En estos algoritmos laaleatorizaci�on tiene por objetivo resolver en forma muy veloz un problema que sidebe resolverse con total con�anza insumir�ia demasiado tiempo� Los algoritmosde testeo de primalidad son los ejemplos mas notables de la aplicaci�on de estetipo de algoritmos�

��

Page 81: PPP - Algoritmos

�� Ejercicios

�� El siguiente algoritmocreado por N�Lomuto particionaA�p��r� en A�p��i�� A�i����j� de forma tal que cada elemento de la primera regi�on es menor o iguala x � A�r� y cada elemento de la segunda regi�on es mayor o igual que x�

Algorithm �� Lomuto Partition�A�p�r��

x� A�r�i� p� �for j � p to r doif A�j� � x theni� i� �Swap�A�i�� A�j��

end ifend forif i � r then

return ielse

return i �end if

�a� Validar el algoritmo

�b� Analizar el tiempo de ejecuci�on del algoritmo�

�c� Analizar el tiempo de ejecuci�on de Quick � Sort utilizando el algor itmo de Lomuto para particionar�

�d� De�nir un algoritmo aleatorizado que intercambie A�r� con un ele mento elegido al azar de A�p��r� y luego invoque al algoritmo deLomuto� Analizar el algoritmo�

�� Mostrar que el mejor caso de Quick � Sort es ��n logn�

�� Una forma interesante de mejorar el rendimiento de Quick � Sort esaprovechando la e�ciencia de Insert � Sort para ordenar vectores queest�an casi ordenados� De esta forma se puede modi�car el algoritmode Quick Sort para que no ordene particiones de menos de k elementos�Luego se llama a Insert Sort sobre el vector casi ordenado para �nalizar elproceso� Mostrar que este algoritmo es O�nk�n log �n�k��� Indicar comodeber�ia elegirse k tanto en teor�ia como en la pr�actica�

��

Page 82: PPP - Algoritmos

Chapter �

Sort

�� Algoritmos de Sort

El prop�osito de esta clase es revisar algunos algoritmos de sort ya vistos conanterioridad� estudiar algunos metodos de sort y realizar algunas conclusionesgenerales sobre m�etodos de sort� Para comenzar vamos a establecer algunasde�niciones que ser�an �utiles mas adelante�

Estabilidad Se dice que un algoritmo de sort es estable si para elementosque tienen la misma clave en el vector original mantiene el orden en el vectorresultado� La estabilidad es una propiedad deseable en la mayor�ia de los algor itmos de sort y se vuelve necesaria cuando estamos ordenando por mas de unaclave�

In�situ Un algoritmo de sort funciona �in situ� cuando no requiere de espaciode memoria adicional �a excepci�on de un cierto espacio constante� para realizarel ordenamiento�

����� Algoritmos no recursivos

Los algoritmos de sort no recursivos son los mas simples para programar yentender� hay muchos m�etodos pero tres de ellos son los mas conocidos elburbujeo� la selecci�on y la inserci�on�

Burbujeo

Es un algoritmo �in situ�� puede implementarse como un algoritmo estable yes de orden cuadr�atico ��n��� El c�odigo y funcionamiento del algoritmo ya fuevisto en clases anteriores� es un algoritmo que en general resulta demasiado lentoya que realiza una gran cantidad de intercambios entre los elementos del vector�

��

Page 83: PPP - Algoritmos

Selecci�on

Este algoritmo es de tipo �in situ�� Lamentablemente no puede implementarseen forma estable sin grandes modi�caciones� Es de orden cuadr�atico al igual queel burbujeo ��n��� En general es mas e�ciente que el burbujeo porque realizamenor cantidad de intercambios entre los elementos del vector�

Inserci�on

El isert sort es un algoritmo �in situ� que puede implementarse en forma estable�es tambien de orden cuadr�atico O�n�� pero en su mejor caso es de orden linealO�n�� Pese a ser considerado un algoritmo lento es en general mejor que elburbujeo y la selecci�on�

����� Algoritmos recursivos

Los algoritmos recursivos se basan en general en el paradigma �Divide � Con quer�� Los algoritmos de este tipo mas populares son el QuickSort� elMergeSorty el HeapSort� los dos primeros ya fueron estudiados mientras que el tercero seve en gran detalle en este apunte�

MergeSort

El algoritmo de MergeSort es un algoritmo estable de orden ��n logn�� lament ablemente no se puede implementar in situ pues requiere de un vector auxiliardel mismo tamanio que el original para funcionar�

QuickSort

El algoritmos de QuickSort es un algoritmo in situ pero no es estable� es unalgoritmo aleatorizado de tipo Las vegas� en su peor caso es de orden cuadr�aticoO�n��� sin embargo este caso se da con muy baja probabilidad� En la mayor�ia delos casos es O�n logn�� Este algoritmo creado por �Hoare� es reconocido por seren general el mas r�apido de los algoritmos de sort� el truco del algoritmo consisteen que las comparaciones se hace siempre contra un elemento pivote que puedeser almacenado en un registro de la m�aquina� esto le da ventaja sobre algoritmosque son asintoticamente equivalentes como el HeapSort o el MergeSort�

�� HeapSort

El algoritmo de HeapSort se basa en la utilizaci�on de una estructura de datosespecial denominada Heap��

����� Heaps

Un Heap es una estructura especial que permite implementar una cola con pri oridades� las operaciones principales de las colas con prioridad se pueden realizar

��

Page 84: PPP - Algoritmos

usando un Heap en ��logn�� Un Heap es un �arbol binario completo a izquierda�lo cual quiere decir que todos los niveles del �arbol excepto el �ultimo est�an com pletos y que el �ultimo nivel se completa de izquierda a derecha� Adem�as loselementos se almacenan cumpliendo la propiedad de que la clave de un nodosiempre es mayor �o menor� que la clave de sus hijos� De esta forma la raiz delarbol es siempre el mayor elemento en todo el Heap�

Importante Un Heap debe cumplir dos propiedades

�� Ser un �arbol binario completo a izquierda�

�� La clave de un nodo siempre es mayor que la clave de su�s� hijo�s��

Almacenamiento Un Heap tiene la interesante cualidad de poder ser alma cenado en un vector sin ocasionar inconvenientes en el manejo de la estructura�Lo cual evita la necesidad de utilizar punteros� Esto es posible gracias a queun Heap siempre es un �arbol completo a izquierda� El Heap se almacena en unvector A����n�� ademas se usa una variable que indica cuantos elementos tiene elHeap m� de esta forma el heap es el sub array A����m��

Almacenamos el Heap en el vector copi�andolo en el mismo nivel por nivel�El primer nivel tiene exactamente � elemento� el segundo �� y asi sucesivamentehasta el �ultimo nivel que es el que puede no estar completo� la cantidad deelementos en el �ultimo nivel la conocemos por conocer la cantidadm de elementosen el Heap�

Para acceder a los elementos del Heap en el array basta con efectuar algunasoperaciones aritm�eticas b�asicas�

� Left�i� return � � i� Right�i� return � � i� �

��

Page 85: PPP - Algoritmos

� Parent�i� return bi��c� IsLeaf�i� return Left�i� � m

� IsRoot�i� return i �� �

Manteniendo los elementos en orden Para mantener la propiedad de quela clave de un nodo siempre es mayor que la clave de sus hijos existe una op eraci�on fundamental denominada Heapify� La idea es que dado un elemento delHeap que no est�a en orden y suponiendo que el resto del Heap si lo est�a se pro cede a colocar el elemento en cuesti�on en su posici�on correspondiente realizandointeracambios con sus hijos si fuese necesario y luego invocando el procedimi ento en forma recursiva� Es decir que el elemento fuera de orden es empujadohasta el lugar que le corresponde�

Algorithm �� Heapify�A�i�m�� Reordena el heap de m elementos a partir deA�i�

l � Left�i�r� Right�i�max � iif l � m and A�l� � A�max� thenmax� l

end ifif r � m and A�r� � A�max� thenmax� r

end ifif max � i then

Swap�A�i��A�max��Heapify�A�max�m�

end if

Recomendamos realizar un seguimiento para ver como funciona este procedi miento� Ademas el procedimiento recursivo es intuitivo pero no es el mas e� ciente de todos� la versi�on iterativa puede ser un poco mejor y se deja comoejercicio�

HeapSorting El algoritmo de HeapSort consiste de dos grandes partes Enprimer lugar construir el Heap inicial� y luego extraer el mayor �o menor� ele mento del Heap uno a uno�

An�alisis de Heapify Un �arbol binario tiene completo tiene logn niveles� Lacantidad de trabajo que se hace en cada nivel es constante� por lo tanto Heapifyes O�logn�� No es ��logn� ya que para las hojas por ejemplo el tiempo esconstante O����

��

Page 86: PPP - Algoritmos

Construyendo un Heap El procedimiento Heapify se puede utilizar paraconstruir un Heap de la siguiente manera� primero se empieza con un Heap com pletamente desordenado� luego se invoca Heapify para cada nodo comenzandodesde el primer nivel de nodos no hojas� El primer nodo no hoja es A�bn��c��

Algorithm � BuildHeap�A�n�� Construye un Heap a partir de A����n�

for i � n�� downto � doHeapify�A�i�n�

end for

An�alisis de BuildHeap Como cada llamada insume O�logn� y se hacenn�� llamadas el tiempo es O��n��� logn� � O�n logn� Luego veremos que enrealidad es mucho mas r�apido y tarda en realidad O�n��

����� HeapSort

Una vez resueltos todos los asuntos concernientes al Heap podemos ver el algor itmo de HeapSort� La idea es remover el mayor elemento que es siempre la raizdel Heap� una vez seleccionado el m�aximo lo intercambiamos con el �ultimo ele mento del vector� decrementamos la cantidad de elementos del Heap e invocamosHeapify a partir de la raiz�

Algorithm � HeapSort�A�n�� Ordena el vector A de n elementos�

BuildHeap�A�n�m� nwhile m � � do

Swap�A����A�m��m� m � �Heapify�A���m�

end while

An�alisis

Como vemos hacemos n� � llamadas a Heapify� cada llamada es O�logn�� Porlo tanto el tiempo total es O��n� �� logn� � O�n logn�

BuildHeap revisado Para analizar el procedimiento BuildHeap en mayordetalle supongamos que n � �h�� � �� donde h es la altura del �arbol� es decirque trabajaremos con un �arbol binario completo� �nota si h es la altura del�arbol� el �arbol tiene h� � niveles��

El �ultimo nivel del �arbol tiene �h nodos� todas las hojas residen en el nivelh�La raiz esta en el nivel ��

Page 87: PPP - Algoritmos

Al llamar a Heapify el tiempo de ejecuci�on depende de cuan lejos pueda serllevado el elemento al ser empujado hacia abajo en el Heap� en el nivel mas bajohay �h nodos� para ellos no invocamos a Heapify por lo que el trabajo es cero�En el siguiente nivel hay �h�� nodos� y cada uno puede descender a lo sumoun nivel� En el tercer nivel hay �h�� nodos y cada uno puede descender dosniveles� En general en el nivel j hay �h�j nodos y cada uno puede descender jniveles� Si contamos desde abajo hacia arriba nivel por nivel podemos calcularel tiempo total como�

T �n� �hX

j�o

j�h�j �hX

j��

j�h

�j

Factoreando el termino �h tenemos�

T �n� � �hhX

j��

j

�j

Esta es una sumatoria que no habiamos visto nunca hasta el momento� pararesolverla hay que aplicar algunos trucos� Sabemos que�

�Xj�o

xj ��

�� x

Derivando a ambos lados respecto de x y multiplicando por x�

�Xj��

jxj�� ��

��� x��

�Xj��

jxj �x

��� x��

Si reeemplazamos x � ��� obtenemos�

�Xj��

j

�j�

���

��� ��������

���

���� �

Que es la sumatoria que necesit�abamos� en nuestro caso no vamos hasta in�nitopero como la serie in�nita esta acotada la podemos usar para una aproximaci�onmuy v�alida�

T �n� � �hhX

j��

j

�j� �h

�Xj��

j

�j� �h � � � �h��

Como n � �h�� � � tenemos que T �n� � n � q � O�n�� Y claramente elalgoritmo debe acceder por lo menos una vez a cada elemento del arreglo por loque el tiempo de BuildHeap es ��n��

��

Page 88: PPP - Algoritmos

Esta es la segunda vez que un algoritmo con dos ciclos anidados terminaresultando lineal si lo analizamos detalladamente� el secreto de BuildHeap resideen que el procedimiento es mas e�ciente para los niveles mas bajos del �arbol yaque alli realiza menos trabajo y en un �arbol binario el ��� por ciento de losnodos del �arbol residen en los tres ultimos niveles�

HeapSort HeapSort es un algoritmo de orden ��n logn�� que funciona �in situ� pero no es estable�

�� L�imite inferior de los algoritmos de sort

Hasta ahora todos los algoritmos de sort que hemos analizado ya sea iterativoso recursivos se basan para ordenar en comparar elementos del vector entre si�si realizamos una abstracci�on podemos analizar en forma gen�erica cualquieralgoritmo de sort basado en comparaciones�

Es l�ogico pensar que para ordenar un vector de n elementos hay una ciertacantidad de comparaciones que todo algoritmo debe realizar como m�inimo parapoder determinar el orden de los elementos del vector� Para realizar una asb tracci�on independiente de la t�ecnica utilizada para ordenar vamos a representara un algoritmo de sort gen�erico basado en comparaciones mediante un �arbol dedecisi�on�

Dada una secuencia de elementos fa�� a�� � � �� ang el orden entre los elementospuede determinarse usando las coparaciones ai � aj� ai � aj� ai � aj� ai � aj�ai � aj� De todas las comparaciones solamente una es su�ciente para determinarel orden de un vector� por ejemplo podemos comparar ai � aj� En un arbolde decision cada nodo no hoja representa una comparaci�on a realizar entre doselementos de la secuencia y las ramas son los caminos que se pueden seguir segunel resultado de la comparaci�on� Las hojas del �arbol de decisi�on representan elorden �nal del vector que se deduce a partir de las comparaciones realizadas�

Por ejemplo para tres elementos podemos realizar el siguiente �arbol de decisi�onque permite determinar el orden de los elementos �ver �gura��

��

Page 89: PPP - Algoritmos

Es de destacar que algunos de los nodos del �arbol son inalcanzables� por ejem plo la cuarta hoja desde la izquierda indica que a� � a� y que a� � a� lo cuales imposible en cicunstancias normales� Esto explica porqu�e algunos algorit mos de sort son ine�cientes� por realizar comparaciones de mas que resultaninnecesarias�

Sea T �n� la cantidad m�inima de comparaciones que un algoritmo de sort deberealizar� observemos que T �n� es exactamente la altura del arbol de decisi�one indica cuantas comparaciones se hicieron hasta llegar a determinar cual esel ordenamiento de los elementos del vector� Un �arbol binario como sabemostiene a lo sumo �T n hojas distintas� que es la cantidad de resultados posiblesdel algoritmo de sort� A esta cantidad la llamaremos A�n�� El resultado delalgoritmo es una cualquiera de las permutaciones posibles para n elementos�y hay n permutaciones posibles� por lo tanto el algoritmo debe ser capaz degenerar n permutaciones posibles por lo que debe satisfacer�

A�n� � �T n

A�n� � n

�T n � n

T �n� � logn

Para aproximar n se suele utilizar la aproximaci�on de Stirling�

n �p

��n�n

e�n

T �n� � log �p

��n�n

e�n�

T �n� � logp

��n � n logn � n log e ��n logn�

��

Page 90: PPP - Algoritmos

De acuerdo a lo anterior acabamos de probar que cualquier algoritmo de sortbasado en la comparaci�on de elementos es ��n logn�� con lo cual los algoritmosde MergeSort� QuickSort y HeapSort son asintoticamente �optimos� no se puedeordenar mediante comparaciones en un orden menor�

�� Algoritmos de sort lineales

Como sabemos mediante comparaciones no podemos ordenar una secuencia masrapido que ��n logn�� Sin embargo algunos algoritmos pueden� realizando al gunas hip�otesis sobre los datos de entrada ordenarlos sin la necesidad de realizarcomparaciones� Estos algoritmos solo funcionan en situaciones muy restrictivaspor ejemplo enteros chicos� caracteres� notas de un examen� n�umeros de cuatrod�igitos etc� � �Presentaremos dos algoritmos de sort que no realizan compara ciones� estos algoritmos como veremos son extremadamente r�apidos�

����� Counting Sort

El algoritmo de counting sort se basa en la hip�otesis de que los elementos sonn�umeros enteros de rango ���k el algoritmo funciona en orden ��n� k� �Si k es��n� entonces el algoritmo resulta lineal�

La idea basica es determinar para cada elemento en el vector de entrdandacual ser�a su rango en el vector resultado� Una vez determinado el rango de cadaelemento simplemente se lo copia en su posici�on y se obtiene el vector ordenado�La clave reside en determinar el rango de un elemento si compararlo contra losdem�as�

El m�etodo

El algoritmo utiliza tres vectores A����n� es el vector original� donde la clavede un elemento A�j� es A�j��key� B����n� es un vector de registros donde alma cenaremos el resultado �claramente el algoritmo no funciona in situ�� R����k� unvector de enteros� R�x� es el rango de x en A donde x ����k��

El algoritmo es notablemente simple e ingenioso en primer lugar se construyeR� esto se hace en dos pasos� En primer lugar inicializamos R�x� como lacantidad de elementos de A cuya clave es igual a x� Esto se logra inicializandoR en cero y luego por cada j de � hasta n incrementamos R�A�j��key� en �� Paradeterminar la cantidad de elementos menores o iguales a x reemplazamos luegoR�x� con la suma de los elementos en el vector R����x��

Una vez armado R el vector contiene el rango de cada elemento� luego recor riendo el vector original se toma cada elemento y se accede a R para determinarsu posicion en el vector resultado� luego de posicionar el elemento x en B�R�x��decrementamos R�x� en una unidad�

��

Page 91: PPP - Algoritmos

El algoritmo

Algorithm �� CountingSort�A�B�n�k� Ordena A en B con n elementos y kposibles claves

for x � � to k doR�x� � �

end forfor j � � to n doR�A�j��key� � �

end forfor x � � to k doR�x� � R�x� � R�x� ��

end forfor j � n downto � dox� A�j��keyB�R�x�� � A�j�R�x� � R�x�� �

end for

An�alisis

El algoritmo consta de cuatro ciclos no anidados que insumen O�k � n � �k ��� � n� por lo que el orden del algoritmo es O�n � k� si kesO�n� entonces elalgoritmo es ��n�� La �gura muestra un ejemplo del algoritmo� se recomiendarealizar un seguimiento para convencerse de su funcionamiento�

��

Page 92: PPP - Algoritmos

El algoritmo de CountingSort es un algoritmo estable� esto se debe al ultimociclo que corre desde n hasta �� si se hiciera desde � hasta n no seria estable�Para ordenar enteros de tamanio chico el algoritmo funciona en orden lineal yes claramente recomendable�

����� Radix Sort

La principal desventaja del algoritmo CountingSort es que solamente es aplic able� debido al costo espacial� para enteros de tamanio chico� Si tenemos enterosque pueden valer entre � y������� no vamos a querer contar con un vectorauxiliar de un mill�on de posiciones� Radix sort provee un metodo para ordenarenteros grandes ordenando d�igito por d�igito� Una aplicacion t�ipica de Radix Sort es ordenar strings considerando que cada digito es un caracter �� byte� delstring� El algoritmo es extremadamente simple y funciona en base al mismoprincipio que usaban las maquinas que servian para ordenar tarjetas perforadashace ya algunos anios� En primer lugar ordena el vector de acuerdo al ultimod�igito de cada clave� luego repite el proceso para los restantes d�igitos usando

��

Page 93: PPP - Algoritmos

un algoritmo de sort estable� El algoritmo de CountingSort es ideal para estaparte�

Algorithm �� RadixSort�A�n�d� Ordena A de n elementos con claves de ddigitos

for i � � to d doSort A en forma estable con respecto al iesimo digito�

end for

An�alisis

El orden del algoritmo es ��dn�� por lo que se trata de un algoritmo de ordenlineal� Hay que tener cuidado ya que el algoritmo se aplica unicamente cuandoel tamanio de los n�umeros a ordenar es �jo en cuanto a la cantidad de d�igitos�si no fuera asi la cantidad de digitos de un numero n es d � logn y el ordenpasa a ser ��n logn�� Por lo que equivale al QuickSort� HeapSort� aunque conun overhead mucho mayor que estos ultimos� RadixSort usando CountingSortes extremadamente e�ciente para ordenar numeros de una cierta cantidad �jade d�igitos o bien para ordenar strings de una cierta cantidad de caracteres�Adema�as es necesario contar con una buena cantidad de elementos a ordenar yaque los factores constantes que acompanian al algoritmo de RadixSort suelenser grandes y las ventajas del m�etodo reci�en se hacen evidentes para coleccionesde datos relativamente grandes�

�� Resumen y puntos clave

El prop�osito de esta clase ha sido resumir varios conceptos sobre algoritmos desort que se habian visto a lo largo del curso y tambi�en aprender algunos m�etodosnuevos� En primer lugar hemos repasado los algoritmos ya conocidos� como porejemplo el burbujeo� la selecci�on� la inserci�on� el quicksort� y el mergesort� Luegoestudiamos en detalle el HeapSort� un algoritmo basado en una estructura dedatos especial� Para generalizar demostramos que ning�un algoritmo de sort que

��

Page 94: PPP - Algoritmos

se base en la comparaci�on de claves puede ordenar una secuencia en menos de��n logn�� Para �nalizar observamos que en situaciones especiales se puedenaplicar metodos de sort que no necesitan comparar claves para ordenar un con junto de elementos� CountingSort y RadixSort son dos algoritmos de ordenlineal que pueden aplicarse en algunas situaciones�

Algoritmo Peor Caso Caso Medio Mejor Caso Estable In SituBurbujeo O�n�� O�n�� O�n�� Si SiSeleccion O�n�� O�n�� O�n�� No SiInsercion O�n�� O�n�� O�n� Si SiMergeSort O�n logn� O�n logn� O�n logn� Si NoQuickSort O�n�� O�n logn� O�n logn� No SiHeapSort O�n logn� O�n logn� O�n logn� No SiCountingSort O�n� O�n� O�n� Si NoRadixSort O�n� O�n� O�n� Si No

� Ejercicios

�� El siguiente algoritmo de sort fue creado por Howard�

Algorithm �� STOOGE SORT�A�i�j�

if A�i� � A�j� thenSwap�A�i��A�j��

end ifif i � � � j then

returnend ifk� b�j � i � ����cSTOOGE SORT�A�i�j k�STOOGE SORT�A�i�k�j�STOOGE SORT�A�i�j k�

�a� Validar el algoritmo�

�b� Dar una recurrencia para el peor caso de STOOGE SORT�

�c� Analizar el algoritmo y compararlo con los dem�as algoritmos estu diados� indicar si este algoritmo merece atenci�on�

�� Indicar como implementar una cola FIFO usando Heaps� indicar comoimplementar una pila usando Heaps�

�� Dar un algoritmoO�logn� para el procedimiento Heap Increase Key�A�i�k��Que asigna a A�i� el m�aximo entre A�i� y k y adem�as actualiza la estructuradel Heap en forma acorde�

��

Page 95: PPP - Algoritmos

�� Un Heap n ario es similar a los heaps estudiados pero cada nodo en lugarde tener � hijos puede tener hasta n�

�a� Indicar como se representar�ia este tipo de Heap en un vector�

�b� Indicar cual es la altura de un Heap d ario con n elementos� Expres arlo en funci�on de n y d�

�c� Indicar como implementar Extract Max en un Heap d ario� analizarel orden del algoritmo en funci�on de d y n�

�d� Indicar como implementar Insert en un Heap d ario� analizar el ordendel algoritmo en funci�on de d y n�

��

Page 96: PPP - Algoritmos

Chapter �

Grafos

�� Grafos

El proposito de esta clase es prestar atenci�on a aquellos algoritmos relacion ados con grafos� Basicamente un grafo es un conjunto de �nodos� o �v�ertices�interconectados por un conjunto de �aristas�� Los grafos son estructuras dis cretas muy importantes ya que permiten modelar un sinnumero de situaciones�Practicamente cualquier problema que presente una serie de objetos y relacionesinter objeto puede representarse adecuadamente con un grafo� Las aplicacionesque involucran el uso de grafos son tan numerosas que no podr�iamos iniciar unalista sin que la misma quedara sumamente incompleta� Para comenzar vamos arevisar algunas de�niciones sobre grafos�

�� Introducci�on a la Teor�ia de Grafos

����� Grafos y Grafos Dirigidos

Un grafo dirigido o digrafo G � �V�E� consiste de una serie �nita de v�erticesV �tambi�en llamados nodos� y una relaci�on binaria sobre V que son las aristasE� Cada arista es un par ordenado de v�ertices�

En la �gura mostramos un grafo dirigido �izquierda�� Observemos que los�loops� estan permitidos por la de�nici�on� M�ultiples aristas no son permitidaspero las aristas �v� w� y �w� v� son distintas� El grafo dirigido G � �V�E� estacaracterizada por V � f�� �� �g y E � f��� ��� ��� ��� ������ ������ ��� ��g�

Page 97: PPP - Algoritmos

En ungrafo no dirigido o simplemente� grafo� G � �V�E� las aristas estanrepresentadas por un par no ordenado de v�ertices distintos� por lo tanto los�loops� no estas permitidos� En la �gura el grafo de la derecha es un grafo no di rigido caracterizado por V � f�� �� �� �g y E � f��� ��� ��� ��� ��� ��� ��� ��� �����g�

����� V�ertices adyacentes

Decimos que un v�ertice w es adyacente a un v�ertice v si existe una arista dev hacia w� En un grafo no dirigido decimos que una arista es incidente en unv�ertice si el v�ertice es punto de llegada o partida de una arista� En un grafodirigido decimos que una arista entra o sale de un v�ertice por lo que hablamosde aristas entrantes o salientes�

����� Grafos pesados

Un grafo es pesado si sus aristas estan rotuladas con valores num�ericos lamadospesos� El signi�cado del peso depende de la aplicaci�on� por ejemplo puede serla distancia entre los v�ertices� la capacidad de la arista� etc�

����� Grado de un v�ertice

En un digrafo el n�umero de aristas que salen de un determinado v�ertice determinael grado de salida �Grs� del v�ertice� a su vez las aristas que entran al v�erticedeterminan el grado de entrada �Gre� v�ertice � En un grafo no dirigido sehabla simplemente del grado �Gr� de un v�ertice como la cantidad de aristasincidentes en dicho v�ertice� El grado de un grafo es el grado m�aximo de susv�ertices�

jEj indica la cantidad de aristas de un grafo�jV j indica la cantidad de v�ertices de un grafo�

��

Page 98: PPP - Algoritmos

Observaci�on Para un grafo dirigido G � �V�E�Xv�V

Gre�v� �Xv�V

Grs�v� � jEj

Observaci�on Para un grafo no dirigido� G � �V�E�Xv�V

Gr�v� � �jEj

���� Caminos y ciclos

En un grafo dirigido un camino es una secuencia de v�ertices �v�� v�� � � � � vn�en donde vale que �vi��� vi� es una arista para i � �� �� � � �n� La longitud delcamino es la cantidad de aristas n del mismo� Decimos que w es alcanzabledesde u si existe un camino donde v� � u� vn � w� Todo v�ertice es alcanzabledesde si mismo por un camino de longitud cero� Un camino es simple si todossus v�ertices �excepto a veces el primero y el �ultimo� son distintos�

Un ciclo es un camino que contiene al menos una arista y para el cual valeque vo � vn� un ciclo es simple si� adem�as� v�� � � � � vn son distintos� Un �loop�es un ciclo simple de longitud ��

En un grafo no dirigido de�nimos caminos y ciclos de la misma forma peropara un ciclo simple agregamos el requisito de que el ciclo visite al menostres v�ertices distintos� esto sirve para eliminar el ciclo degenerado �v� u� v� queimplicar�ia ir y venir siempre por la misma arista�

����� Ciclo Hamiltoniano

Un ciclo Hamiltoniano es un ciclo que visita todos los v�ertices de un grafoexactamente una vez� En un camino Hamiltoniano no hace falta regresar alv�ertice inicial�

����� Ciclo Euleriano

Un ciclo Euleriano es un ciclo �no necesariamente simple� qye visita cada aristadel grafo exactamente una vez� En un camino Euleriano no hace falta regresaral v�ertice inicial�

El problema de los puentes de Koningsberg

Uno de los problemas que motiv�o tempranamente el inter�es por la teor�ia degrafos es el Problema del puente de Konigsberg� Esta ciudad sobre el rio Pregelest�a unida por � �siete� puentes� El problema es si es posible cruzar los sietepuentes sin pasar mas de una vez por cada puente� Euler mostr�o que tal cosa

��

Page 99: PPP - Algoritmos

era imposible enunciando las caracer�isticas que deb�ia tener un grafo para queexista un camino Euleriano�

Para que un grafo tenga un camino Euleriano todos salvo a lo sumo dos de losv�ertices deben tener grado par� En el grafo de Konigsberg los � v�ertices tienengrado impar�

���� Grafo ac�ilico

Un grafo es ac�ilico si no contiene ciclos simples�

����� Grafo conexo

Un grafo es conexo si todo v�ertice es alcanzable desde cualquier otro� Un grafoac�iclico y conexo se denomina �arbol� estos �arboles se conocen tambien como�arboles libres para destacar el hecho de que no poseen raiz� Un �arbol es ungrafo minimamente conexo ya que al eliminar una arista cualquiera del grafoel mismo deja de ser conexo� Adem�as existe un �unico camino entre dos v�erticesde un �arbol� El agregado de una arista a un �arbol implica la creaci�on de unciclo�

������ Componentes conexos� �arboles y bosques

La propiedad de v�ertice alcanzable es una relaci�on de equivalencia entre losv�ertices� es decir que es re�exiva �un v�ertice es alcanzable desde s�i mismo�� essim�etrica y es transitiva� Esto implica que la propiedad particiona los v�erticesdel grafo en clases de equivalencia� Estas clases se denominan componentesconexos

��

Page 100: PPP - Algoritmos

Un grafo conexo tiene un �unico componente conexo� Un grafo ac�iclico �no ne cesariamente conexo� consiste de una serie de �arboles y se lo denomina bosque�

������ Grafos fuertemente conexos y componentes fuerte�mente conexos

Un grafo dirigido es fuertemente conexo si para cualquier par de v�ertices u y v�u es alcanzable desde v y v es alcanzable desde u� Los grafos fuertemente conexosparticionan sus v�ertices en clases de equivalencia denominadas componentesfuertemente conexos

������ Grafo dirigido ac�iclico� �GDA

Un grafo dirigido ac�iclico se denomina GDA �Grafo Dirigido Ac�iclico� y esdistinto de un �arbol dirigido�

������ Grafos Isomorfos

Dos grafos G � �E� V � y G� � �E�� V �� son isomorfos si hay una funci�on biyectivaf V � V � tal que �u� v� E si y solo si �f�u�� f�v�� E�� Los grafos isomorfosson esencialmente �iguales� con la excepci�on de que sus v�ertices tienen distintosnombres�

Determinar si dos grafos son isomorfos no es tan sencillo como parece� Porejemplo consideremos los grafos en la ilustraci�on� Claramente �a� y �b� se pare cen mas entre s�i que con respecto a �c� sin embargo esto es solo una ilusi�on�optica� Observemos que los tres casos todos los v�ertices tienen grado � y quehay ciclos simples de longitud � en �a� pero que en �b� y �c� los ciclos simplesmas chicos son de longitud � Esto implica que �a� no puede ser isomorfo a�b� ni a �c�� Resulta que �b� y �c� s�i son isomorfos� Uno de los isomor�smos

��

Page 101: PPP - Algoritmos

posibles es el que damos a continuacion� la notaci�on �u � v� signi�ca que elv�ertice u en el grafo �b� es mapeado al v�ertice v en el grafo �c��

f�� � ��� �� � ��� �� � ��� �� � ��� � � ��� �� � �� �� � ���� �� � ��� �� � ��� ��� � ��g

������ Subgrafos y grafo inducido

Un grafo G� � �E�� V �� es un subgrafo de G � �E� V � si V � � V y E� � E� Dadoun subconjunto V � � V el subgrafo inducido por V� es el grafo G� � �V �� E��donde

E� � f�u� v� Etalqueu� v V �g

Es decir que se toman todas las aristas de G que inciden sobre v�ertices de V ��

���

Page 102: PPP - Algoritmos

����� Grafos completos� Cliques�

Un grafo no dirigido que tiene el n�umero m�aximo posible de aristas se denominagrafo completo� Los grafos completos se suelen denotar con la letra K� PorejemploK� es el grafo completo con v�ertices� Dado un grafo G un subconjuntode v�ertices V � � V � forma un clique su ek subgrafo inducido por V � es completo�En otras palabras si todos los v�ertices de V � son adyacentes unos con otros�

������ Conjunto independiente

Un subconjunto de v�ertices V � forman un conjunto independiente si el sub grafo inducido por V � no tiene aristas� Por ejemplo en la �gura �a� el subconjuntof�� �� �� �g es un clique y el f�� �� �� �g es un conjunto independiente�

������ Grafo bipartito

Un grafo bipartito es un grafo no dirigido en donde los v�ertices pueden serparticionados en dos conjuntos V � y V � de forma tal que todas las aristas vande un v�ertice de V � a un v�ertice de V �� El grafo en la �gura �b� es un grafobipartito�

����� Grafo complemento� Grafo transpuesto

El complemento de un grafo G � �E� V � denotado G�� es un grafo sobre elmismo conjunto de v�ertices pero en el cual las aristas han sido complementadas�La reversa de un grafo dirigido denotado GR es un grafo dirigido sobre el mismoconjunto de v�ertices en donde la direcci�on de las aristas ha sido cambiada� a estegrafo se lo denomina tambien grafo transpuesto GT

���

Page 103: PPP - Algoritmos

������ Grafos planares� Formas planares

Un grafo es planar si puede ser dibujado en el plano de forma tal que no se crucening�un par de aristas� Los grafos planares son una familia importante de losgrafos ya que se usan en muchas aplicaciones desde los sistemas de informaci�ongeogr�a�ca hasta circuitos y modelado de s�olidos�

En general hay muchas formas de dibujar un grafo planar en dos dimensiones�Por ejemplo en la pr�oxima �gura mosramos dos dibujos esencialmente diferentesdel mismo grafo� Cada uno de estos dibujos se denomina forma planar� Losvecinos de un v�ertice son los v�ertices adyacentes al mismo� Una forma planaresta determinada para el ordenamiento antohorario de los vecinos de cada unode los v�ertices� Por ejemplo en la forma de la izquierda los vecinos del v�erticeuno en sentido antohorario son f�� �� �� g pero en la forma de la derecha elordenamiento es f�� � �� �g y por eso ambas formas son diferentes�

Caras

Un hecho importante acerca de las formas planares de un grafo es que subdividenal grafo en regiones denominadas caras� Por ejemplo en la �gura de la izquierdala �gura triangular limitada por los v�ertices f�� �� g es una cara� Siempre existeuna cara denominada cara externa que rodea a todo el grafo� Las formasplanares de las �guras tienen por ejemplo � caras en ambos casos� Dos formasplanares siempre tienen el mismo n�umero de caras� esto se desprende de laf�ormula de Euler

���

Page 104: PPP - Algoritmos

F�ormula de Euler

Una forma planar de un grafo conexo con V v�ertices� E aristas y F caras satis face

V �E � F � �

En los ejemplos ambos grafos tienen v�ertices y � aristas y por lo tanto de laformula de Euler deben tener F � �� V � E � �� � � � � caras�

������ Tamanios

Al referirnos a grafos y digrafos vamos a utilizar que n � jV j y e � jEj� Lostiempos de ejecuci�on de los algoritmos que operan con grafos suelen dependerde n y e por lo que se bueno ver que relaci�on existe entre ambos n�umeros�

Observaci�on Para un grafo dirigido e � n� � O�n��� Para un grafo no

dirigido e ��

n�

� n�n� ���� � O�n��

������ Grafos dispersos

Decimos que un grafo es disperso cuando e es mucho mas chico que n�� Parael importante caso de los grafos planares e � O�n�� En la mayor�ia de lasaplicaciones los grafos muy grandes tienden a ser dispersos� Esto es importanteal diseniar algoritmos que utilicen grafos porque� cuando n es realmente grandeun tiempo de respuesta del orden de O�n�� a menudo es inaceptable�

�� Representaci�on de Grafos

Los algoritmos que trabajan sobre grafos deben contar con una estructura dedatos apropiada para la representaci�on de datos� vamos a describir dos formasde describir grafos ya sea dirigidos o no dirigidos� Por ejemplo sea el grafodirigido G � �E� V � con n � jV j y e � jEj� Asumimos que los v�ertices de G sonf�� �� � � � � ng�

����� Matriz de adyacencias

Es una matriz de nxn de�nida para � � v� w � n donde�

A�v� w� � f � si�v� w� E� sino

Si el grafo dirigido tiene pesos podemos almacenar los pesos en la matriz� Porejemplo si �v� w� E entonces A�v� w� � W �v� w� �el peso de la arista �v� w���

���

Page 105: PPP - Algoritmos

Si �v� w�not E entonces en general W �v� w� no necesita ser de�nido pero amenudo se inicializa en un valor especial como por ejemplo �� o �

����� Lista de Adyacencias

Es un vector Adj����n� de punteros donde para � � v � n�Adj�v� apunta a unalista enlazada que contiene los v�ertices que son adyacentes a v �los v�ertices queson alcanzables desde v usando una sola arista�� Si las aristas tienen pesos lospesos pueden almacenarse en las listas�

Los grafos no dirigidos se pueden representar de la misma forma pero es tar�iamos guardando cada arista dos veces� En particular representar�iamos laarista �v� w� como el par de aristas �v� w�y�w� v��

Esto puede causar algunas complicaciones� por ejemplo un algoritmo quemarca aristas de un grafo deberia tener cuidado de marcar dos aristas en lugar deuna sola si el grafo es no dirigido ya que las dos aristas en realidad representanla misma�

Al almacenar la lista de adyacencias puede resultar poco e�ciente recorrertodas las listas por lo que suelen incluirse cross links como se muestra en lailustraci�on�

�� obviamente es un n�umero que es mayor que el peso m�aximo posible� o el valor m�aximo

almacenable en una variable del tipo que se esta usando

���

Page 106: PPP - Algoritmos

Una matriz de adyacencias requiere ��n�� � espacio� una lista de adyacenciasrequiere ��n� e�� Para grafos dispersos la lista de adyacencias es mas e�ciente�En la mayor�ia de las aplicaciones tanto la matriz de adyacencias como la listade ayacencias son representaciones �utiles para un grafo�

�� Algoritmos para Grafos

Una vez repasadas algunas de�niciones y estudiado distintas formas de repres entar un grafo debemos empezar a analizar los algoritmos utilizados para operarcon grafos� vamos a empezar con un algoritmo muy necesario que es aquel quepermite recorrer todos los v�ertices de un grafo� El objetivo del algoritmo esrecorrer todos los v�ertices del grafo�pasando sola una vez por cada v�ertice� Estatarea que era muy simple en un �arbol � resulta mas di�cultosa en un grafo debidoa la natural falta de estructura de los mismos� Hay dos t�ecnicas para recorrerun grafo� el algoritmoBFS �Breadth �rst search� y DFS �Depth �rst search��

����� BFS

El algoritmo BFS se basa en recorrer el grafo �a lo ancho primero�� Dado ungrafo G � �V�E� BFS comienza con un v�ertice cualquiera s y �descubre� todoslos v�ertices que son adyacentes a s� En un momento cualquiera del algoritmoexiste una �frontera� de v�ertices que han sido descubiertos pero no procesados�

�Estamos usando tambien esta notacion para el costo en espacio��Recordemos los algoritmos para recorrer un �arbol� pre�order� post�order e in�order

��

Page 107: PPP - Algoritmos

Inicialmente todos los v�ertices excepto el origen son pintados de color blanco�lo cual quiere decir que aun no han sido observados� Cuando un v�ertice esdescubierto se lo pinta de color gris �y pasa a ser parte de la forntera�� cuandoun v�ertice ya fue procesado �se descubri�o toda su frontera� se lo pinta de colornegro�

Algorithm �� BFS�G��E�V�� s�� Recorre el grafo G a partir del v�ertice s

int color����size�V��cola Qfor each u in V docolor�u� � blanco

end forcolor�s� � gris ��Inicializamos el origen�encolar�Q� s�while Q not empty dou� desencolar�Q�for each v in Adj�u� doif color�v���blanco thencolor�v� � grisencolar�Q� v�

end ifend forcolor�u� � negro

end while

���

Page 108: PPP - Algoritmos

BFS hace uso de una cola FIFO donde los elementos son obtenidos en elmismo orden en que fueron insertados� Mantienen tambien el vector color�u� quecontiene el color del v�ertice u �blanco�no observado� gris� observado pero noprocesado� negro� procesado�� El funcionamiento del algoritmo puede requerirrealizar algunos seguimientos para poder comprenderlo en totalidad�

Distancia m�inima usando BFS

BFS suele ser muy utilizado para calcular la distancia m�inima desde un v�erticedado hasta cualquier otro de un grafo no dirigido� esto es muy sencillo de hacerporque BFS recorre los v�ertices en orden de distancia �creciente� a partir delorigen� Esto se logra realizando las siguientes modi�caciones al algoritmo�

Algorithm �� BFS�G��E�V�� s�� Recorre el grafo G a partir del v�ertice s

int color����size�V��cola Qint d����size�V�� ��vector de distancias�int pred����size�V�� ��predecesor de cada v�erticefor each u in V docolor�u� � blancod�u� � INFINITOpred�u� � NULL

end forcolor�s� � gris ��Inicializamos el origen�d�s� � �encolar�Q� s�while Q not empty dou� desencolar�Q�for each v in Adj�u� doif color�v���blanco thencolor�v� � grisd�v� � d�u� � �pred�v� � uencolar�Q� v�

end ifend forcolor�u� � negro

end while

Hemos agregado un vector de distancias que para cada v�ertice v indicara aque distancia esta dicho v�ertice del v�ertice origen s� adem�as para saber cual es

���

Page 109: PPP - Algoritmos

el camino que debemos hacer para obtener dicha distancia almacenamos en cadav�ertice cual es el v�ertice anterior al mismo en el camino m�inimo que parte des y llega a dicho v�ertice� Esto es valido debido al principio de optimalidadque dice que si un camino es m�inimo entonces todos sus sub caminos tambi�enlo son�

En la �gura podemos observar que los punteros predecesores de BFS de�nenun arbol invertido� Si invertimos las aristas obtenemos un �arbol desordenadodenominado �Arbol BFS de G para s�Las aristas de G que forman el �arbol sedenominan aristas del �arbol y el resto de las aristas se denominan aristas decruce� En la �gura podemos observar el arbol BFS para nuestro ejemplo�

���

Page 110: PPP - Algoritmos

An�alisis

El tiempo de ejecuci�on de BFS es muy similar al tiempo de ejecuci�on de muchosalgoritmos que recorren grafos� Si n � jV j y e � jEj� Observamos que la inicial izaci�on requiere ��n�� El ciclo que recorre el grafo es el n�ucleo del algoritmo�Como nunca visitamos un v�ertice dos veces la cantidad de veces que ejecutamosen el ciclo while es a lo sumo n �es exactamente n si todos los v�ertices sonalcanzables desde s�� El n�umero de iteraciones dentro del ciclo interior es pro porcional a grado�u� � ��� Sumando para todos los v�ertices tenemos que eltiempo insumido es

T �n� � n�Xv�V

�grado�u� � � � n�Xv�V

grado�u� � n � �n� �e � ��n � e�

Para un grafo dirigido el an�alisis es esencialmente el mismo�

����� DFS

Una de las mayores di�cultades al diseniar algoritmos para grafos es la faltade estructura de los mismos� Al ordenar un vector� por ejemplo� vimos queera f�acil particionar el problema para aplicar un algoritmo de tipo �Divide �Conquer�� Sin embargo no es en absoluto claro como dividir un grafo en sub grafos� Lo importante de cualquier estrategia para recorrer grafos es la habiliadpara imponer algun tipo de estructura al grafo� En BFS vimos como podemosver al grafo como un �arbol �el �arbol BFS� mas un conjunto de aristas �aristasde cruce�� Los �arboles son objetos mucho mas estructurados que los grafos� porejemplo los arboles se pueden subdividir elegantemente en sub arboles para loscuales el problema es resuelto en forma recursiva� En un grafo aun nos quedar�iael problema de como manejar las aristas que no forman parte del arbol BFS� El

�El es debido a que si grado�u� � � necesitamos una cantidad de tiempo constante paraincializar el ciclo

���

Page 111: PPP - Algoritmos

algoritmo DFS �Depth �rst search�� tiene como propiedad inetersante que lasaristas no arboladas de�nen una estructura matematicamente manejable�

Consideremos el problema de buscar un tesoro en un castillo� Para resolverpodr�iamos usar la siguiente estrategia� Cada vez que entramos a una habitaci�ondel castillo pintamos un gra$ti en la pared para saber que ya estuvimos alli ��Sucesivamente viajamos de habitaci�on en habitaci�on mientras lleguemos a hab itaciones en las cuales nunca estuvimos� Una vez que volvemos a una habitaci�onen la cual ya estuvimos probamos con una puerta diferente a la usada anterior mente� Cuando todas las puertas han sido utilizadas volvemos a la habitaci�onanterior y repetimos el procedimiento�

Notemos que este procedimiento es descripto en forma recursiva� En partic ular cuando entramos a una nueva habitaci�on estamos comenzando una nuevab�usqueda� Este es el principio de funcionamiento del algoritmo DFS�

Algoritmo DFS Supongamos que tenemos un grafo dirigido G � �V�E� �elmismo algoritmo funciona para grafos no dirigidos pero la estructura resultantees distinta�� Vamos a usar cuatro vectores auxiliares� Como antes se mantieneun color por cada v�ertice� blanco signi�ca v�ertice no descubierto �habitaci�onsin gra$ti en la pared�� Gris signi�ca v�ertice descubierto pero no procesado�tiene gra$ti pero aun no usamos todas sus puertas�� Negro signi�ca v�ertice yaprocesado� Al igual que en BFS tambien almacenamos los punteros al v�erticepredecesor apuntando hacia atras hacia el v�ertice a partir del cual descubrimosel v�ertice actual� Tambien vamos a asociar dos n�umeros a cada v�ertice quedenominamos time stamps� Cuando descubrimos un v�ertice u por primera vezguardamos un contador en d�u� y cuando terminamos de procesar un v�erticeguardamos un contador en f �u�� El prop�osito de estos contadores sera explicadomas adelante�

Algorithm �� DFS�G�� Recorre el grafo G en orden DFS�

for each u in V docolor�u� � blancopred�u� � NULL

end fortime� �for each u in V doif color�u���blanco then

DFSVisit�u�end if

end for

�Por favor no intenten esto en sus casas

���

Page 112: PPP - Algoritmos

Algorithm �� DFSVisit�G�u��

color�u� � grisd�u� � time � �for each v in Adj�u� doif color�v���blanco thenpred�v� � uDFSVisit�v�

end ifend forcolor�u� � negrof �u� � time � �

An�alisis

El tiempo de ejecuci�on de DFS es ��n � e�� Esto es bastante mas dif�icil deobservar con respecto al an�alisis de BFS debido a la naturaleza recursiva delalgoritmo� Normalmente una recurrencia es una buena forma de calcular eltiempo de ejecuci�on del algoritmo pero esto no ocurre aqui porque no tenemosnoci�on del tamanio de cada llamada recursiva� En primer lugar observemosque ignorando las llamadas recursivas DFS corre en O�n�� Observemos quecada v�ertice es visitado exactamente una vez en la b�usqueda y que por lo tantoDFSV isit�� es llamado exactamente una vez por cada v�ertice� Podemos analizarcada llamada individualmente y sumar sus tiempos de ejecuci�on� Ignorando eltiempo necesario para las llamadas recursivas podemos ver que cada v�ertice upuede ser procesado en O�� � Gradosalida�u��� Por lo tanto el tiempo total delprocedimiento es�

T �n� � n�XuinV

�Gradosalida�u� � �� � n�XuinV

Gradosalida�u� � n � �n�e � ��n�e�

���

Page 113: PPP - Algoritmos

Clasi�caci�on de aristas luego de DFS

El algoritmo DFS impone en el grafo una estrutura de �arbol �en realidad unacolecci�on de �arboles�� Este �arbol no es mas que el �arbol de recursi�on donde laarista �u� v� surge cuando porcesando el v�ertice u llamamos a DFSV isit�v�� Lasaristas que forman parte del �arbol de recursi�on son llamadas aristas del �arbolDFS� Para grafos dirigidos las restantes aristas del grafo se pueden clasi�car dela siguiente manera�

Aristas de retroceso �u� v� donde v es un antecesor �no necesariamente propio�de u en el �arbol� Por lo tanto un �loop� es considerado una arista deretroceso�

Aristas de avance �u� v� donde v es un sucesor de u en el �arbol�

Aristas de cruce �u� v� donde u y v no son ni antecesor ni sucesor entre si� Aunmas� la arista podr�ia conectar dos �arboles distintos�

No es dif�icil clasi�car las aristas de un �arbol DFS analizando el valor del colorde cada v�ertice y�o considerando los time stamps�

En un grafo no dirigido no hay distinci�on entre aristas de avance y de retrocesopor lo que las llamaremos aristas de retroceso en forma uniforme� Ademas nopueden existir aristas de cruce�

Estructuras a partir de los Time�Stamps Los time stamps tambien im ponen al grafo una estrutura interesante� en algunos libros esta estructura seconoce como estructura de intervalos�

Teorema� �Teorema de los intervalos�� Dado un digrafoG � �V�E� y un arbolDFS para G y dos v�ertices cualesquiera u� v V �

� u es un sucesor de v si y solo si �d�u�� f �u��� �d�v�� f �v��

� u es un antecesor de v si y solo si �d�u�� f �u��� �d�v�� f �v��

� u no tiene relaci�on con v si y solo si �d�u�� f �u�� y �d�v�� f �v�� son disjuntos�

Notaci�on �x�y� es un intervalo perteneciente a los n�umeros naturales�

���

Page 114: PPP - Algoritmos

Ciclos Los time stamps dados por el algoritmo DFS permiten determinarmuchos datos importantes sobre un grafo dirigido o no dirigido� Por ejemplopodemos determinar si el grafo contiene o no ciclos� Esto lo podemos hacergracias a los siguientes lemas�

Lema� Dado un digrafo G � �V�E� consideremos cualquier arista �u� v� E�Si la arista es parte de un �arbol DFS� es una arista de avance o es una arista decruce entonces f �u� � f �v�� Si la arista es de retroceso entonces f �u� � f �v��

Demostraci�on� Para un �arbol o arista de avance o retroceso la demostraci�onsurge directamente del teorema de los intervalos� �Por ejemplo para una aristade avance �u� v� v es un sucesor de u� y por lo tanto el intervalo de v estacontenido dentro del de u implicando que f �u� � f �v� pues f �v� fue rotuladoantes que f �u���� Para una arista de cruce �u� v� sabemos que los intervalos sondisjuntos� Cuando procesamos u� v no fue blanco �sino �u� v� ser�ia una arista del�arbol�� eso implica que v fue inspeccionado antes que u� y como los intervalosson disjuntos v tiene que haber �nalizado antes que u�

Lema� Dado un digrafo G � �V�E�� G tiene un ciclo si y solo si existe unaarista de retroceso�

Demostracion� ��� Si hay una arista de retroceso �u� v� entonces v es unpredecesor de u y siguiendo las aristas del �arbol DFS de v hacia u obtenemos unciclo� ��� Supongamos que no hay aristas de retroceso� Por el teorema anteriorcada uno de los tipos de aristas restantes tienen la propiedad de que van dev�ertices con rotulo f mayor que el valor del v�ertice hacia el cual se dirigen�Por lo tanto siguiendo cualquier camino el tiempo disminuye monotonamenteimplicando que no puede haber un ciclo�

Precauci�on� No hay relaci�on alguna entre la cantidad de aristas de retrocesoy el n�umero de ciclos en un grafo�

���

Page 115: PPP - Algoritmos

Ordenamiento Topol�ogico

Consideremos un GDA �grafo directo ac�iclico�� El cual es muy utilizado enaplicaciones en las cuales se muestra precedencia entre objetos �tareas� eventos�procesos� etc�� En este tipo de aplicaciones una arista �u� v� implica que la tareau debe �nalizarse antes de empezar la tarea v�

Un ordenamiento topol�ogico de un GDA es un ordenamiento lineal de losv�ertices del grafo de forma tal que para cada arista �u� v� u aparezca antes quev en el ordenamiento� En general hay varios ordenamientos topol�ogicos validospara un GDA�

Obtener el ordenamiento topol�ogico es sencillo utilizando DFS� Por el lemaanterior para cada arista �u� v� en un GDA el tiempo f de u es mayor queel tiempo f de v� Por lo tanto es su�ciente devolver los v�ertices ordenadosen orden decreciente de tiempo f � Esto puede hacerse en forma muy sencillaal mismo tiempo que se utiliza el algoritmo DFS� En el siguiente algoritmohemos modi�cado el algoritmo DFS para que solamente realice el ordenamientotopol�ogico del grafo dejando de lado todo lo dem�as�

Algorithm �� TopSort�G�� Realiza el ordenamiento topol�ogico del grafo G�

Require� G no debe tener ciclos�for each u en V docolor�u� � blanco

end forL� new�LinkedList�for each u en V doif color�u��blanco then

TopVisit�u�end if

end forreturn L

Algorithm � TopVisit�u�G��

color�u� � grisfor each v in Adj�u� doif color�v��blanco then

TopVisit�v�end if

end forAppend u a la cabeza de L

���

Page 116: PPP - Algoritmos

An�alisis Al igual que el algoritmo DFS TopSort es de orden ��n � e�

Componentes fuertemente conexos

Un problema importante realtivo a los grafos dirigidos es su conectividad� cuandoeste tipo de grafos son utilizados para modelar redes de comunicaciones o redesde transporte es deseable saber si dichas redes son completas en el sentido de quecualquier nodo es accesible desde cualquier otro� Esto se da cuando el digrafoque modela la red es fuertemente conexo�

Es deseable tener un algoritmo que determine si un grafo es fuertemente con exo� De hecho vamos a resolver un problema un tanto mas dif�icil que consisteen calcular los componentes fuertemente conexos cfc de un digrafo� Enparticular vamos a particionar el grafo en subconjuntos de v�ertices de forma talque el subgrafo inducido por cada subconjunto es fuertemente conexo� Estossubconjuntos deber�an ser lo mayor posibles en tamanio�

Si mergeamos los v�ertices de cada componente fuertemente conexo �cfc� enun super v�ertice y si juntamos dos superv�ertices �A�B� si y solo si existenv�ertices u A y v B tales que �u� v� E el digrafo resultante llamadodigrafo componente es necesariamente ac�iclico� Si fuera c�iclico entonces losdos cfc"s podr�ian formar un cfc de mayor tamanio�

Hemos introducido este tema debido a que el algoritmo que presentamos comosoluci�on es un verdadero ejemplo de disenio� Es extremadamente simple� e� ciente e ingenioso� a tal punto que resulta dif�icil ver como funciona� Vamos a

��

Page 117: PPP - Algoritmos

dar algunas pautas intuitivas sobre el funcionamiento del algoritmo aunque� novamos a llegar a demostrar formalmente su correcci�on�

Consideremos para entrar en tema el recorrido DFS del grafo ilustrado �izquierda��Observemos que cada cfc es un sub arbol del bosque DFS� Esto no siempre esverdad para cualquier DFS pero siempre existe una forma de ordenar el DFS deforma tal que esto sea verdad�

Supongamos que conocemos el grafo componente por adelantado� � supongamosademas que tenemos un ordenamiento topol�ogico rebatido del grafo componente�Es decir que si �u� v� es una arista en el grafo comoponente entonces v apareceantes que u en el ordenamiento� Ahora corramos DFS pero cada vez que neces itamos un nuevo v�ertice para iniciar la b�usqueda tomamos el pr�oximo v�erticedisponible de la lista rebatida del ordenamiento topol�ogico� Como consecuen cia interesante de este procedimiento cada �arbol en el bosque DFS ser�a un cfc�magia���

Revelando la magia Claramente una vez que DFS empieza dentro de uncfc debe visitar cada v�ertice del componente � y posiblemente otros� antes de�nalizar� Si no empezamos en orden topologico inverso la b�usqueda puede �es caparse� hacia otros cfc coloc�andolos en el mismo �arbol DFS� En la �gura de la

�Esto es ridiculo porque necesitariamos conocer los cfc y este es el problema que queremosresolver� pero permitanme la disgresion por ahora�

���

Page 118: PPP - Algoritmos

derecha� por ejemplo� la b�usqueda empez�oen el v�ertice a� no solo se visita dichocomponente sino tambien otros componentes� Sin embargo visitando compon entes en orden inverso de acuerdo al ordenamiento topol�ogico impedimos que lab�usqueda se escape hacia otros componentes�

Esto nos deja con la intuici�on de que si de alguna manera pudiesemos ordenarel DFS entonces tendr�iamos un algoritmo sencillo para calcular los cfc� sinembargo no sabemos el aspecto que tiene el grafo componente� El truco esque podemos encontrar un ordenamiento de los v�ertices que tiene la propiedadnecesaria sin realmente calcular el grafo componente�

Desafortunadamente es dif�icil explicar como funciona este criterio� Present aremos el algoritmo y sepan disculpar la falta de formalidad en su explicaci�on�Recordemos que GR es el grafo transpuesto�

Algorithm � StrongComp�G�

Run DFS�G�� computando f �u� para cada vertice uR� Reverse�G� ��R es el grafo transpuesto�Ordenar los vertices de R �counting sort� en orden decreciente de f �u�Run DFS�R� utilizando dicho ordenamiento de los vertices�Cada arbol DFS es un CFC

Todos los pasos del algoritmo son sencillos de implementar� y trabajan enO�n� e�

�� Resumen y puntos clave

En esta clase hemos cubierto toda la teor�ia que vamos a necesitar en el cursosobre Grafos� los grafos son estruturas particularmente importantes en el mode lado de ciertos problemas y requieren de gran cuidado al diseniar algoritmos queempleen grafos� Los algoritmos que hemos estudiado en esta clase son algorit mos para recorrer todos los v�ertices de un grafo� En primer lugar presentamos elalgoritmoBFS que recorre el grafo �a lo ancho primero�� una aplicacion directadel algoritmoBFS puede ser utilizada para hallar caminos minimos en un grafono dirigido�

Luego vimos el algoritmo DFS� el cual sirve para establecer una estructuramuy particular en el grafo� la cual permite realizar una buena clasi�cacion de lasaristas del grafo� Entre las aplicaciones directas de DFS vimos que sirve paradeterminar si un grafo tiene ciclos y para realizar un ordenamiento topol�ogicode los v�ertices de un grafo dirigido ac�iclico� El problema de los componentes

���

Page 119: PPP - Algoritmos

fuertemente conexos en un grafo sirve como ilustraci�on de un algoritmo extrema damente elegante en cuanto a su disenio y nos permite observar que el manejode grafos puede ser realmente delicado�

Con esto ha sido su�ciente por ahora� pero hay muchos problemas con grafosque aun no hemos estudiado y que vamos a analizar en los temas subsiguientes�por eso es recomendable mantener estos temas presentes�

� Ejercicios

�� Dar un algoritmo de orden lineal o mejor que dado un grafo conexo Gdevuelva un v�ertice de forma tal que la eliminaci�on de dicho v�ertic nodesconecte el grafo�

�� Dado el siguiente grafo�

�a� Indicar todas las propiedades que pueda sobre el grafo�

�b� Realizar una b�usqueda BFS sobre el grafo a partir del nodo A�

�c� Realizar una b�usqueda DFS sobre el grafo a partir del nodo A� Darel ordenamiento topol�ogico del grafo� indicar si el grafo tiene ciclos�

�d� Indicar cuales son los componentes fuertemente conexos de un grafo�

���

Page 120: PPP - Algoritmos

�� Dar un agoritmo de orden lineal que determine si un grafo es bipartito�

���

Page 121: PPP - Algoritmos

Chapter �

Programaci�on din�amica

��� Introducci�on a la programaci�on din�amica

La programaci�on din�amica es una t�ecnica muy valiosa para el disenio de algor itmos� se aplica a problemas de optimizaci�on� es decir aquellos problemas enlos cuales de un conjunto de soluciones posibles �que en general es un n�umerogrande� se debe elegir aquella que maximiza o minimiza un cierto par�ametro�

Metodo de programacion dinamica

Programacion dinamica metodo

El desarrollo de un algoritmode programaci�on din�amica comprende los siguientespasos�

�� Caracterizar la estructura de una soluci�on �optima�

�� Recursivamente de�nir el valor de una soluci�on �optima�

�� Calcular el valor de la soluci�on �optima en forma bottom up�

�� Construir la soluci�on �optima a partir de la informaci�on calculada�

Los primeros tres pasos forman la base de una soluci�on de programaci�on din�amicaa un problema� El paso � puede ser omitido si solo se desea el valor de la soluci�on�optima� si se desea adem�as saber cu�al es la soluci�on �optima el paso � es oblig atorio�

���� Caracter�isticas de un problema de programaci�on din�amica

Es interesante saber a que tipo de problemas podemos aplicarles el paradigmade programaci�on din�amica al diseniar un algoritmo� no hay una respuesta exactaa esta pregunta pero si podemos dar algunas caracter�isticas que son comunes a

���

Page 122: PPP - Algoritmos

los problemas que se pueden resolver utilizando programaci�on din�amica� dichascaracter�isticas son

�� Subestructura �optima

�� Superposici�on de subproblemas�

Subestructura �optima

Decimos que un problema exhibe subestructura �optima si una soluci�on �optimaal problema en cuesti�on contiene soluciones �optimas a los subproblemas involuc rados�

Superposici�on de subproblemas

La segunda caracter�istica a observar en un problema para que el m�etodo de pro gramaci�on din�amica sea aplicable es que la soluci�on de los distintos subproblemasimplica la soluci�on de sub sub problemas de forma tal que un sub sub problemaes requerido para solucionar mas de un subproblema� Almacenando el resultadode los sub sub problemas en una tabla es posible evitar recalcularlos cada vez�

A continuaci�on veremos algunos problemas cl�asicos que se resuelven por pro gramaci�on din�amica�

Problema de la multiplicacion de matrices

Multiplicacion en cadena de matrices

��� Multiplicaci�on en cadena de matrices

Dada una secuencia de n matrices hA�� A�� � � � � Ani donde la cantidad de �lasde Ai es Ai�� y la cantidad de columnas es Ai � Aj�� �la cantidad de columnasde Ai debe ser igual a la cantidad de �las de Ai�� para poder multiplicarlas�Queremos calcular el producto�

A� �A� � � � �An

De forma tal de utilizar la menor cantidad de multiplicaciones posibles� comoel producto de matrices es asociativo resulta que hay varias formas de multiplicarla cadena de matrices� Por ejemplo cuatro matrices pueden multiplicarse de lassiguientes formas�

�A��A��A�A����

�A���A�A��A���

��A�A���A�A���

��A��A�A���A��

���A�A��A��A��

���

Page 123: PPP - Algoritmos

La forma en la cual asociamos la cadena de matrices puede tener un impactodram�atico en la cantidad de multiplicaciones que tenemos que hacer� por ejemplocon tres matrices hA�� A�� A�i de dimensiones ��x���� ���xyx�� Si hacemos��A�A��A�� tenemos que realizar �� � ��� � � ��� � �� � � � � ��� � ���multiplicaciones en total� Si en cambio hacemos �A��A�A��� hacemos ������ ����� � �� � ��� � � � ���� � ���� multiplicaciones� Por lo tanto la primeraasociacion es diez veces mas e�ciente que la segunda�

Notemos que para multiplicar A �B insumimos

FilasA �ColumnasA �ColumnasBmultiplicaciones� El algoritmo que multiplica dos matrices es el siguiente�

Algorithm �� Matrix Multiply�A�B�� Multiplica las matrices A y B

if columnas�A� � �las�B� thenerror

elsefor i � � to filas�A� dofor j � � to columnas�B� doC�i� j� � �for k � � to columnas�A� doC�i� j� � C�i� j� �A�i� k� �B�k� j�

end forend for

end forend ifreturn C

���� Aproximaci�on por fuerza bruta

Antes de aplicar la t�ecnica de programaci�on din�amica es conveniente veri�car sila soluci�on por fuerza bruta es ine�ciente� En este caso la soluci�on por fuerzabruta consiste en un algoritmo iterativo que pruebe todas las formas posibles deasociar las matrices calculando cuantos productos son necesarios en cada caso�El algoritmo de esta forma luego de veri�car todas las asociaciones puede decidircual es la forma �optima de asociar las matrices para multiplicarlas�

Para saber si este algoritmo es e�ciente necesitamos saber cuantas asociacionesposibles existen dado un conjunto de n matrices�

Cuando solo hay dos matrices hay una sola forma de asociarlas� Cuandotenemos n matrices hay n � � lugares en donde podemos poner el par depar�enteisis mas externos� Por ejemplo con seis matrices tenemos

�A�A��

���

Page 124: PPP - Algoritmos

�A�A�A��

�A�A�A�A��

�A�A�A�A�A��

Cuando el par�entesis mas externo es puesto luego de la kesima matriz creamosdos sublistas a ser asociadas� Una con k matrices y otra con n � k matrices�Entonces debemos resolver como asociar estas sublistas� Como ambas sublistasson independientes si hay L formas de asociar la sublista izquierda y R formas deasociar la lista derecha el total de asociaciones posibles es L �R� Esto sugiere lasiguiente recurrencia donde P�n� es la cantidad de formas de asociar n matrices�

P �n� �

�� si n � �Pn��

k�� P �k�P �n� k� si n � �

Esta es una funci�on muy conocida en c�alculo combinatorio porque de�ne losnumeros Catalanes �cantidad de diferentes �arboles binarios con n nodos�� Enparticular en nuestro caso P �n� � C�n� ���

C�n� ��

n� �

��nn

Aplicando la aproximaci�on de Stirling al c�alculo del factorial podemos saberque C�n� ���n�n����� Como �n es exponencial el crecimiento de P �n� esexponencial�

Dado que el crecimiento de P �n� es exponencial la soluci�on por fuerza brutano es aplicable a menos que la cantidad de matrices sea extremadamente chica�

Resulta interesante observar como para n matrices cada forma de asociarlasde�ne un �arbol binario que indica el orden en el cual deben realizarse los pro ductos� de alli que la cantidad de asociaciones sea la cantidad de �arboles binariosposibles para n� � nodos�

���� Soluci�on por programaci�on din�amica

Veamos como se aplican los cuatro pasos b�asicos de la t�ecnica de programaci�ondin�amica a nuestro caso�

Estructura de una soluci�on �optima

El primer paso al aplicar programaci�on din�amica es caracterizar la estructurade una soluci�on �optima� Para el problema del producto de la cadena de matricespodemos hacerlo de la siguiente manera�

���

Page 125: PPP - Algoritmos

Sea Ai��j el resultado de multiplicar Ai �Ai�� � � � �Aj � Una asociaci�on �optimadel producto de n matrices necesariamente implica dividir la cadena en dossubcadenas� asociar las sub cadenas y luego multiplicarlas�

A� �A� � � � � �An � Ak �Ak��

El costo de esta asociaci�on �optima es el costo de Ak mas el costo de Ak��

mas el costo de multiplicar ambas matrices resultantes� La clave consiste enobservar que se cumple el principio de subestructura �optima ya que si laasociaci�on Ak �Ak�� es �optima entonces la asociaci�on de Ak tambi�en debe serlode lo contrario la soluci�on no ser�ia �optima� Analogamente la asociaci�on de Ak��

tambien debe ser �optima�

De�nici�on recursiva de una soluci�on �optima

El segundo paso de un problema de programaci�on din�amica es de�nir el valorde una soluci�on �optima en forma recursiva�

Sea m�i� j� la cantidad de multiplicaciones �optimas para realizar el productoAi��j� para n matrices la cantidad de multiplicaciones m�inimas es m��� n�� Po demos de�nir m�i� j� recursivamente de la siguiente manera� Si i � j entonces lacadena tiene solo una matriz y no hace falta ninguna multiplicaci�on por lo tantom�i� i� � �� Para calcular m�i� j� supongamos que la asociaci�on �optima de las nmatrices es Ak �Ak�� entonces�

m�i� j� � m�i� k� �m�k � �� j� � pi��pkpj

Donde pi�� es la cantidad de �las de Ai� pk es la cantidad de columnas de Ai yla cantidad de �las de Aj � pj es la cantidad de columnas de Aj�

La ecuaci�on recursiva que de�nimos asume que conocemos el valor de k� lo cualno es cierto� Sin embargo solo hay j�� valores posibles de k� como la asociaci�on�optima necesariamente utiliza alguno de estos valores podemos chequearlos to dos para encontrar el mejor� Por lo tanto nuestra de�nici�on recursiva para laasociaci�on �optima de n matrices es�

m�i� j� �

�� si i � jmini�k�jfm�i� k� �m�k � �� j� � pi��pkpjg si i � j

Los m�i� j� nos dan los valores de las soluciones �optimas a los subproblemas�

Calculo de la soluci�on �optima en forma botton�up

El tercer paso para diseniar un algoritmo de programaci�on din�amica es poderdiseniar una estrategia que construya la soluci�on �optima de un problema a partirde las soluciones de los sub problemas involucrados� Veamos como podemoshacer esto para el producto de la cadena de matrices�

���

Page 126: PPP - Algoritmos

Supongamos que tenemos matrices hA�� A�� A�� A�� A�i�Los siguientes sub problemas ya los tenemos solucionados�

m��� �� � A����

m��� �� � A����

m��� �� � A����

m��� � � A����

Ya que solamente implica multiplicar dos matrices� Luego podemos pasar a lossubproblemas con � �tres� matrices� Para m��� �� tenemos que calcular el m�inimoentre ��A�A��A�� y �A��A�A���� Esto implica calcular lo siguiente

m��� �� � minfm��� �� � p�p�p��m��� �� � p�p�p�g

Analogamente podemos calcular m��� ���m��� ��

Pasamos ahora a los subproblemas de longitud �� por ejemplo para calcularm��� �� k puede valer �� �� � por lo tanto tenemos que hallar el m�inimo entre

m��� �� � min

� m��� �� � m��� �� � p�p�p�

m��� �� � m��� �� � p�p�p�m��� �� � m��� �� � p�p�p�

�A

Notemos que m��� ���m��� ���m����� son subproblemas que ya resolvimos por loque no necesitamos resolverlos de nuevo� simplemente si m�i� j� es una tablaaccedemos al valor correspondiente� Aplicamos la misma forma para m�����que es el otro subproblema de longitud ��

Por �ultimo podemos resolver el problemad de longitud que es el problemacompleto�para ello aplicamos la misma t�ecnica que antes�

m��� � � min

BB�

m��� �� � m��� � � p�p�p�m��� �� � m��� � � p�p�p�m��� �� � m��� � � p�p�p�m��� �� � m�� � � p�p�p�

�CCA

De esta forma podemos observar como resolviendo los sub problemas en el ordenapropiado podemos ir llenando una tabla de forma tal que cada sub problemasea solucionado utilizando la soluci�on a los subproblemas anteriores� El ordenen el cual debemos llenar la tabla es de acuerdo al tamanio de los subproblemasen nuestro caso fue�

m��� �� �����

m��� �� �����

m��� �� �����

��

Page 127: PPP - Algoritmos

m��� �� �����

m�� � ����

m��� �� �����

m��� �� �����

m��� � �����

m��� �� �����

m��� � ������

m��� � ������

Conociendo la de�nici�on recursiva necesaria para calcular la soluci�on �optima yel orden en que debemos resolver los subproblemas podemos escribir el siguientealgoritmo de programaci�on din�amica�

Algorithm �� Matrix Chain Order�n�� Determina la asociaci�on �optima de nmatrices�

for i � � to n dom�i� i� � �

end forfor l � � to n dofor i � � to n� l � � doj � i� l � �m�i� j� � for k � � to j � � doq � m�i� k� � m�k � �� j� � pi��pkpjif q � m�i� j� thenm�i� j� � q

end ifend for

end forend for

Si realizamos un seguimiento del algoritmo podemos observar como se llenala tabla en el orden necesario para resolver el problema�

Calculo de la soluci�on �optima

Hasta aqui el algoritmo permite calcular cual es el n�umero de multiplicacionesm�inimo para n matrices� sin embargo tambien necesitamos saber cual es laasociaci�on que nos permite realizar el producto en dicho orden� Para ello bastacon utilizar una tabla auxiliar que llamaremos s�i� j� en donde si s�i� j� � kquiere decir que para Ai��j la asociaci�on �optima es Ak �Ak��� De esta forma elalgoritmo que calcula la cantidad de multiplicaciones puede calcular la tabla scon un sencillo cambio� Para calcular la asociaci�on �optima tenemos que accedera s en forma recursiva� el algroritmo �nal es el siguiente�

���

Page 128: PPP - Algoritmos

Algorithm �� Matrix Chain Order�n�� Determina la asociaci�on �optima de nmatrices�

for i � � to n dom�i� i� � �

end forfor l � � to n dofor i � � to n� l � � doj � i� l � �m�i� j� � for k � � to j � � doq � m�i� k� � m�k � �� j� � pi��pkpjif q � m�i� j� thenm�i� j� � qs�i� j� � k

end ifend for

end forend for

Algorithm �� Matrix Chain Multiply�A�s�i�j��Usando s multiplica la cadenaAi��j

if j � i thenx�Matrix�Chain�Multiply�A� s� i� s�i� j��y �Matriz � Chain�Multiply�A� s� s�i� j� � �� j�returnMatrix�Multiply�X�Y �

elsereturn Ai

end if

���

Page 129: PPP - Algoritmos

Ejemplo Por ejemplo supongamos que tenemos cuatro matrices�

A� x�A� �x�A� �x�A� �x�

Las tablas se completan de la siguiente forma

El algoritmo es un tanto rebuscado por lo que resultar�ia conveniente realizarun seguimiento hasta asgurarse de comprender su funcionamiento� la soluci�on�nal del ejemplo es ��A��A�A���A��

��� El problema de todas las distancias m�inimasen un grafo

Vamos a retornar a los algoritmos relacionados con la manipulaci�on de gra fos� Cuando estudiamos el algoritmo BFS vimos que pod�ia ser utilizado paracalcular la distancia m�inima desde un v�ertice hasta cualquier otro en un grafoen el cual las aristas no tenian pesos� En esta secci�on vamos a realizar dosampliaciones importantes al problema� en primer lugar vamos a calcular las dis tancias m�inimas desde cualquier v�ertice hasta cualquier otro� En segundo lugarvamos a admitir que las aristas del grafo tienen pesos que en general representandistancias aunque podr�ian tener cualquier otro signi�cado �por ejemplo costo delpeaje etc��

���

Page 130: PPP - Algoritmos

���� De�nici�on del problema

Sea G � �E� v� un grafo dirigido con aristas pesadas� Si �u� V � E es una aristade G entonces el peso de la arista es W �u� v�� Supongamos por el momento quelas aristas siempre tienen pesos positivos� un peso positivo excesivamente grandeW �u� v� �equivalente a � indica que no existe camino entre ambos v�ertices�Dado un camino � � hu�� u�� � � �uki el costo del camino es la suma de los pesosde las aristas�

costo��� � W �u�� u�� � W �u�� u�� � � � ��W �uk � �� uk� �kXi��

W �ui� �� ui�

El problema consiste en encontrar todos los caminos de costo m�inimo desdeun v�ertice hasta cualquier otro del grafo� Para este problema vamos a suponerque el grafo se encuentra representado por una matriz de adyacencias en lugarde la mas com�un en general lista de adyacencias ��

Los datos de entrada estan almacenados en una matriz de nx W que contienelos pesos de las aristas� Sea wij el elemento W �i� j��

wij �

���

� si i � jW �i� j� si i � j and �i� j� E� si i � j and �i� j�not E

���

El resultado del algoritmo debe ser una matriz de nx D � dij donde dij � ��i� j�el costo del camino mas corto desde i hasta j� Conocer cual es el camino mascorto implica el uso de una matriz auxiliar pred�i� j�� El valor de pred�i� j� es unv�ertice que pertenece al camino m�inimo entre i y j� es decir que pred�i� j� � kimplica que para ir desde i hasta j con costo m�inimo hay que pasar por k� luegopara seguir construyendo el camino hay que observar pred�i� k� y pred�k� j��

���� Soluci�on por programaci�on din�amica

Por el momento nos vamos a concentrar en calcular el costo de los caminosm�inimos en lugar del camino en si� En primer lugar necesitamos descomponer elproblema en subproblemas� Podemos por ejemplo adoptar el siguiente enfoque

para � � m � n� �� de�nimos Dmij como el costo del camino m�inimo desde i

hasta j usando a lo sumo m aristas� La idea es calcular D�� D�� � � �Dn���Ya que ningun camino puede usarmas de n�� aristas �en caso contrario deberiarepetir un v�ertice�� sabemos que Dn�� es la matriz �nal� De esta forma hemoscaracterizado la estructura de la soluci�on �optima� Esto se ilustra en la siguiente�gura�

�Para grafos dispersos la lista de adyacencias suele ser mas e ciente� pero en estos problemases raro encontrar un grafo disperso ya que en general desde un v�ertice hay caminos hacia casitodos los dem�as v�ertices

���

Page 131: PPP - Algoritmos

El siguiente paso consiste en de�nir la soluci�on en forma recursiva� Paracomputar las matrices de distancias el caso basico es D� � W dado que lasaristas del digrafo son caminos de longitud ��

D�ij � Wij

Ahora queremos ver que es posible calcularDm a partir de Dm�� param � ��

Consideremos que Dmij es la distancia m�inima desde i hasta j usando a lo sumo

m aristas� Hay dos casos�

Caso �� Si el camino m�inimo usa estritamente menos de m aristas entoncessu costo es D

m��ij �

Caso �� Si el camino m�inimo usa exactamente m aristas entonces el caminousa m�� aristas para ir desde i hasta algun v�ertice k y luego usa la arista �k� j�de peso wkj para llegar hasta j� El camino desde i hasta k debe ser tambi�en�optimo �subestructura �optima�� por lo que la longitud del camino resultante es

Dm��ik � Wkj�

Como no sebmos el valor de k debemos hallar el m�inimo probando con todoslos valores posibles de k�

Dmij � min

D

m��ij

min��k�n�Dm��ik � wkj�

���� Primera soluci�on

A continuaci�on mostramos un algoritmo tentativo que utiliza esta regla recursiva�

���

Page 132: PPP - Algoritmos

Algorithm �� Dist��m�i�j�� Calcula la distancia m�inima desde i hasta j

if m � � thenreturn W �i� j�

end ifbest� for k � � to n dobest � min�best�Dist��m � �� i� k� � W �k� j��

end forreturn best

Desafortunadamente el algoritmo es realmente lento� sea T �m�n� el tiempodel algoritmo en un grafo de n v�ertices� El algoritmo hace n llamadas a simismo con el primer par�ametro de m � �� cuando m � � tenemos T���n����Sino hacemos n llamadas recursivas a T �m � �� n�� Es decir

T �m�n� �

�� sim � �nT �m � �� n� � � sino

El tiempo total es T �n � �� n�� esto se resuelve en forma directa usando elm�etodo iterativo obteniendo como resultado T �n� � O�nn�� Y lamentablementeesta funci�on es una de las funciones de crecimiento mas r�apido que conocemos�es super exponencial y crece incluso mas rapido que n � Esto ocurre porque elalgoritmo simplemente intenta con todos los caminos posibles desde i hasta j yla cantidad de caminos posibles entre dos v�ertices de un grafo es exponencial�

Vemos este algoritmo para ilustrar la ventaja de la t�ecnica de programaci�ondin�amica sobre los m�etodos simples o de fuerza bruta� el �unico paso que nosfaltaba para obtener un algoritmo de programaci�on din�amica era determinarcomo calcular la soluci�on en forma bottom up reutilizando los subproblemas yaresueltos�

El siguiente algoritmo implementa este paso� el procedimiento principal ShortestPath�n�w�recibe la cantidad de v�ertices n y la matriz de pesos W � La matriz Dm es alma cenada en la tabla D�m�� Para cada m� D�m� es una matriz de dos dimensiones�por lo que D es una matriz tridimensional� Inicializamos D� copiando W �Luego cada llamada a ExtendPaths calcula Dm a partir de Dm�� usando laf�ormula que habiamos mostrado antes�

El procedimiento ExtendPaths consiste de tres ciclos anidados por lo que suorden es ��n��� Es llamado n� � veces desde el procedimiento principal y porlo tanto el tiempo total es ��n���

���

Page 133: PPP - Algoritmos

Algorithm �� ShortestPath�n�W�� Calcula todos los caminos m�inimos�

array D����n ������n�����n�copiar W en D���for m � � to n � � doD�m� � ExtendPaths�n�D�m� ���W �

end forreturn D�n ��

Algorithm �� ExtendPaths�n�d�W��

matrix dd����n�����n��d����n�����n� �� copiamos d en ddfor i � � to n dofor j � � to n dofor k � � to n dodd�i� j� � min�dd�i� j�� d�i� k� �W �k� j��

end forend for

end forreturn dd

El funcionamiento del algoritmo puede verse en la ilustraci�on�

���

Page 134: PPP - Algoritmos

���� Algoritmo de Floyd�Warshall

El algoritmo de Floyd Warshall surge en la decada del !�� y permite calculartodos los caminos m�inimos en ��n�� lo cual mejora el orden de nuestro algoritmoanterior que era ��n��� El algoritmo se basa en lo siguiente

Estructura de la soluci�on �optima El camino m�inimo desde i hasta j puedeser o bien W �i� j� o bien d�i� k� � d�k� j� implicando que para ir desde i hasta jhay que pasar por j� A su vez d�i�k� y d�k�j� tambi�en deben ser �optimos�

Algorithm �� Floyd Warshall�n�W�

array d����n�����n�for i � � to n dofor j � � to n dod�i� j� �W �i� j�pred�i� j� � null

end forend forfor k � � to n dofor i � � to n dofor j � � to n doif �d�i� k� � d�k� j� � d�i� j�� thend�i� j� � d�i� k� � d�k� j�pred�i� j� � k

end ifend for

end forend forreturn d

El algoritmo

An�alisis

Claramente el orden del algoritmo es ��n��� la clave esta en el orden en el cualse construye la soluci�on� en primer lugar se recorre toda la matriz para el v�erticeintermedio �� luego para el �� etc� A continuaci�on mostramos el algoritmo enun ejemplo�

���

Page 135: PPP - Algoritmos

Para calcular cu�al es el camino m�inimo hay que usar la matriz pred�i� j� quetambi�en calcula el algoritmo� en forma recursiva se puede calcular cual es elcamino m�inimo de la siguiente manera�

Algorithm � Camino�i�j�

if pred�i� j� � null thenoutput�i�j�

elsePath�i�pred�i�j��Path�pred�i�j��j�

end if

���

Page 136: PPP - Algoritmos

��� El problema de la subsecuencia com�un dem�axima longitud

Vamos a incursionar ahora en un algoritmo para manipulaci�on de strings� unode los problemas b�asicos es por ejemplo encontrar un string dentro de otro� estetipo de algoritmo debe ser utilizado por programas como el GREP y otros� Enalgunos casos sin embargo no interesa comparar dos strings en forma exacta sinoen forma aproximada� esto tiene muhcas aplicaciones incluyendo varios aspectosimportantes de la gen�etica�

Subsecuencias Dadas dos secuencias X � hX�� X�� � � �Xni y Z � hZ�� Z�� � � �Zkidecimos que Z es una subsecuencia de X si existe un orden estrictamentecreciente de �indices hi�� i�� ��iki �� � i� � i� � � � � � ik � n� tales queZ � hXi�� Xi�� � � � � Xiki� Por ejemplo Z � hAADAAi es una subsecuenciade X � hABRACADABRAi� Notemos que el hecho de que existan elementosde X en el medio que no estan en Z no afecta el concepto de subsecuencia�

Subsecuencia com�un de longitud m�axima Dados dos strings X y Y lasubsecuencia com�un de longitud m�axima �SCM� de X y Y es la sub secuencia de longitud m�axima Z que es a su vez subsecuencia de X y Y �

Por ejemplo si X � hABRACADABRAi y Y � hY ABBADABBADOOi�La subsecuencia com�un de m�axima longitud es Z � hABADABAi

El problema de la SCM El problema �SCM� es el siguiente dados dosstrings X y Y determinar cual es la subsecuencia com�un de longitud m�axima�si la misma no fuese �unica basta con calcular una cualquiera�

���� Soluci�on por programaci�on din�amica

La aproximaci�on por fuerza brute al problema consistiria en computar todas lassubsecuencias de un string y luego veri�car si las mismas son subsecuencias delsegundo string� de todas las subsecuencias comunes luego se elige la de mayorlongitud� Sin embargo esto es claramente ine�ciente ya que en un string de ncaracteres existen �n posibles subsecuencias por lo que el algoritmo simple ser�iade caracter exponencial �o super exponencial� lo cual es claramente ine�ciente�

Para aplicar el m�etodo de programaci�on din�amica necesitamos dividir el prob lema de la �SCM� en sub problemas� esto lo vamos a hacer de�niendo al pre�joXi de una secuencia X como hX�� X�� � � �Xii �La idea es computar la �SCM�por cada posible par de pre�jos� Sea c�i� j� la longitud de la subsecuencia delongitud m�axima de Xi y Yj � Eventualmente el resultado �nal sera c�m�n��Como veremos c�i� j� puede calcularse si conocemos c�i�� j�� para i� � i� j� � j�pero no ambos iguales�Empecemos con algunas observaciones�

��

Page 137: PPP - Algoritmos

Caso b�asico c�i� �� � c�j� �� � �� Si alguna de las subsecuencias es vac�iaentonces no hay �SCM��

Si los �ultimos caracteres son iguales Sea xi � yj � Por ejemplo Xi �hABCAi y Yj � hDACAi� Como ambos terminan en �A� a�rmamos que la

�SCM� tambi�en deber terminar en A� ya que sino agregandoA al �nal tendr�iamosuna subsecuencia com�un de mayor longitud� Una vez que sabemos que A esparte de la �SCM� entonces podemos hallar la LCS de Xi�� � hABCi y Yj�� �hDACi� Entonces� Si xi � yj entonces C�i� j� � c�i� �� j � �� � �

Si los �ultimos caracteres son distintos Supongamos que xi � yj � En estecaso o bien xi no es parte dela SCM o bien yj no es parte de la SCM o bienninguno es parte de la SCM� En el primer caso la SCM de Xi e Yj es la SCMde Xi�� e Yj � En el segundo caso la SCM es la SCM de Xi y Yj��� Entonces�Si xi � yj c�i� j� � max�c�i� �� j�� c�i� j� ���� El tercer caso queda cubierto porun primer caso seguido de un segundo caso� La regla recursiva para calcular lasoluci�on �optima es entonces la siguiente

c�i� j� � f� si i � � o j � �c�i � �� j � �� � � si i� j � � y xi � yimax�c�i� j � ��� c�i� �� j�� si i� j � � y xi � yj

La tarea a continuaci�on es implementar la f�ormula recursiva en forma bottom upreutilizando los subproblemas resueltos�

���� An�alisis

El an�alisis es muy sencillo ya que el algoritmo consiste de dos ciclos de n y miteraciones anidados� el orden es por lo tanto O�mn�� El funcionamiento delalgoritmo puede resultar un tanto misterioso por lo que se recomienda realizarun seguimiento para observar como funciona� La ilustraci�on es un ejemplo decomo funciona el algoritmo�

���

Page 138: PPP - Algoritmos

Algorithm � LCS�char x����m��char y����n��

int c����m�����n�for i � � to m doc�i� �� � �b�i� �� � SKIPX

end forfor j � � to n doc��� j� � �b��� j� � SKIPY

end forfor i � � to m dofor j � � to n doif x�i� � y�j� thenc�i� j� � c�i� �� j � �� � �b�i� j� � ADDXY

elseif c�i� �� j� � c�i� j � �� thenc�i� j� � c�i� �� j�b�i� j� � SKIPX

elsec�i� j� � c�i� j � ��b�i� j� � SKIPY

end ifend if

end forend forreturn c�m�n�

���

Page 139: PPP - Algoritmos

El c�alculo de cual es la subsecuencia com�un de longitud m�axima es simpleutilizando los punteros almacenados en la matriz auxiliar b�i� j�

Algorithm �� getSCM�char c����m��char y����n�� int b����m����n��

SCM � emptyi� mj � nwhile i � � and j � � doif b�i� j� � ADDXY then

add x�i� to front of SCMi� i� �j � j � �

end ifif b�i� j� � SKIPX theni� i� �

end ifif b�i� j� � SKIPY thenj � j � �

end ifend whilereturn SCM

��� Resumen y puntos clave

La programaci�on din�amica es una t�ecnica que permite diseniar algoritmos e� cientes �al menos mas e�cientes que los de fuerza bruta� a problemas de op

���

Page 140: PPP - Algoritmos

timizaci�on� Para que un problema sea solucionable mediante programaci�ondin�amica debe presentar dos caracter�isticas

� Subsestructura �optima El problema debe poder dividirse en sub problemasde forma tal que si la soluci�on al problema es �optima la soluci�on de lossubproblemas que lo componen tambien debe serlo�

� Superposici�on de subproblemas Un problema debe poder resolverse a partirde la resoluci�on de sus sub problemas y asi sucesivamente en forma recur siva� Ademas un sub problema debe formar parte de la soluci�on de mas deun problema de mayor orden de forma tal que si se almacena el reusltadodel sub problema en una tabla el mismo pueda ser usado para evitar re solver dos veces el mismo problema�

La t�ecnica de programaci�on din�amica consiste en los siguientes pasos

� De�nir la estructura de la soluci�on

� Hallar una f�ormula recursiva para calcular la soluci�on

� Implementar la soluci�on recursiva en forma botton up reutilizando los sub problemas ya resueltos�

� Encontrar la soluci�on �optima

Como ejemplos de programaci�on din�amica vimos cuatro algoritmos import antes� el primero de ellos sirve para multiplicar una cadena de matrices en forma�optima� el segundo y el tercero resuelven el problema de las distancias m�inimasen un grafo� el cuarto resuelve un problema con strings que tiene muchas aplic aciones en la actualidad�

Comprender y dominar el m�etodo de programaci�on din�amica requiere tiempoy dedicaci�on pero permite encontrar soluciones e�cientes donde de otra forma elcosto para resolver el problema ser�ia demasiado grande�

�� Ejercicios

�� Una empresa se encuentra organizando una �esta para sus empleados� laempresa est�a organizada en forma jer�arquica con una estructura en formade �arbol� La comisi�on de �estas ha asignado a cada empleado un n�umeroreal que indica el �carisma� de cada uno de sus empleados� Adem�as paraque las conversaciones sean mas �uidas y amenas se ha decidido que nopueden asistir a la �esta un empleado y su superior inmediato juntos� Lacomisi�on desea maximizar la sumatoria de carisma total� Dar un algoritmode programaci�on din�amica que permita determinar quienes deben asistir ala �esta�

���

Page 141: PPP - Algoritmos

Chapter �

Algoritmos Golosos

��� Algoritmos golosos� principios�

El t�ermino �algoritmo goloso� es una traducci�on libre del ingl�es �greedy al gorithms�� en algunos textos se re�ere a este tipo de algoritmos como algoritmos��avidos�� Los algoritmos golosos se utilizan para resolver problemas de optim izaci�on y son extremadamente sencillos � se basan en un principio fundamental

Principio� Un algoritmo goloso siempre toma la decisi�on que parecemejor de acuerdo al estado actual del problema

Un algoritmo goloso funciona construyendo una soluci�on en base a una secuen cia de decisiones golosas� se dice que la decisi�on que toman estos algoritmoses golosa porque si bien son �optimas en el estado actual del problema no implicaque lleven necesariamente a una soluci�on �optima del problema�

Importante� Una soluci�on localmente �optima no necesariamente llevaa una soluci�on globalmente �optima�

Algunos algoritmos golosos son �optimos� en el sentido de que terminan gen erando una soluci�on que es �optima para el problema planteado� otros no son�optimos pero sirven para encontrar una buena aproximaci�on de la soluci�on� por�ultimo en algunos casos un algoritmo goloso puede llevar a cualquier soluci�onaleatoriamente alejada de la soluci�on �optima�

Importante� Aplicar un algoritmo goloso a un problema en el cual lat�ecnica no resulte propicia suele llevar a una soluci�on que no es mas queuna soluci�on cualquiera del conjunto de soluciones posibles�

���

Page 142: PPP - Algoritmos

����� Fundamentos

Para que un problema pueda ser solucionable en forma �optima mediante unalgoritmo goloso debe presentar dos caracter�isticas fundamentales

� Subestructura �optima El problema debe poder ser descompuesto en variossub problemas de forma tal que si la soluci�on del problema es �optima lasoluci�on de los subproblemas tambi�en lo es� �Este requisito tambi�en eranecesario para el m�etodo de programaci�on din�amica��

� Opci�on golosa Deber ser posible demostrar que una elecci�on localmente�optima lleva a una soluci�on globalmente �optima� Esta es la clave de losalgoritmos golosos y en general se demuestra por inducci�on� en primerlugar se prueba que si existe una soluci�on �optima entonces existe tambi�enuna soluci�on que parte de una decisi�on golosa� Luego para el subproblemarestante por inducci�on se prueba que se puede llegar a una soluci�on �optima�

En esta secci�on observaremos algunos problemas nuevos y otros no tanto quepueden ser resueltos utilizando un algoritmo goloso�

��� El problema de la selecci�on de actividades

El problema de la selecci�on de actividades es el siguiente dado un un conjuntode n actividades S � hS�� S�� � � � � Sni y conociendo la hora de inicio y �n decada actividad Si� Fi se de�ne que dos actividades son compatibles si no sesuperponen en el tiempo� El problema consiste en encontrar el conjunto deactividades compatibles de mayor cardinalidad�

����� Ejemplo

Actividad Inicio FinS� � �S� �S� � �S� � �S� � S � �

En nuestro ejemplo hay varios conjuntos de cantidad de actividades compat ibles m�axima� por ejemplo hS�� S�� S�i o hS�� S�� Si o hS�� S�� S�i� etc Sonsoluciones �optimas�

����� Algoritmo goloso para la selecci�on de actividades

El algoritmo goloso para resolver el problema se basa en lo siguienteEn primer lugar ordenar las actividades por orden de �nalizaci�on creciente�

���

Page 143: PPP - Algoritmos

Elegir la primera actividad�Luego elegir la primera actividad compatible con la �ultima elegida�Repetir hasta que no queden actividades�

Algorithm �� Greedy Selector�S�� Recibe un conjunto de S actividades�

Require� S debe estar ordenado por hora de �nalizacion S�i��f � S�i � ���fn� length�S�A� f�gj � �for i � � to n doif S�i�s � S�i��f thenA� A � figj � i

end ifend for

Para nuestro ejemplo el algoritmo elegir�ia hS�� S�� S�i

����� An�alisis

Es evidente que el algoritmo es e�ciente� insume el tiempo necesario para elsort mas un tiempo que es ��n� para el proceso de selecci�on� A continuaci�ontenemos que demostrar que el algoritmo goloso para el problema de la selecci�onde actividades es �optimo�

Teorema� El algoritmo Greedy � Selector produce soluciones �optimas�

Demostraci�on� Sea S � hS�� S�� � � � � Sni el conjunto de actividades a selec cionar ordenadas por tiempo de �nalizaci�on de forma tal que la actividad � es laque �naliza mas temprano� Queremos mostrar que existe al menos una soluci�on�optima que contiene la actividad S��

Supongamos que A � S es una soluci�on �optima para el problema y ordenemoslas actividades de A por hora de �nalizaci�on� Supongamos ademas que la primeraactividad de A es Sk� Si k � � entonces la soluci�on contiene la actividadelegida por el algoritmo goloso� Si k � � queremos mostrar que existe otrasoluci�on �optima B que contiene S�� Sea B � A � fSkg � f�g� Como S��f �Sk�f las actividades en B son compatibles� y como B tiene la misma cantidadde actividades que A que era una soluci�on �optima entonces B es tambien unasoluci�on �optima� Por lo tanto siempre existe una soluci�on �optima que contienela decisi�on golosa�

���

Page 144: PPP - Algoritmos

Adem�as una vez realizada la decisi�on golosa de la actividad el problema sereduce a encontrar un conjunto �optimo de actividades sobre el conjunto S� siendoS� las actividades de S compatibles con S�� Es decir que si A es una soluci�on�optima a S entonces A� � A � fS�g es una soluci�on �optima a S� � fi S si � s��fg� Esto se debe a que si podemos encontrar una soluci�on B� a S conmas actividades que A entonces agregando la actividad S� a B� tendr�iamos unasoluci�on al problema original S con mas actividades que A y por lo tanto A noser�ia una soluci�on �optima� Por inducci�on sobre la cantidad de decisiones tomadaspor el algoritmo tenemos que la soluci�on �nal es �optima�

��� El problema de los caminos m�inimos �parteII�

El problema de los caminos m�inimos en un grafo es un problema que ya habiamosestudiado y que consist�ia en encontrar todos los caminos m�inimos en un grafodirigido donde W �i� j� indicaba el costo de utilizar la arista �i� j� en un camino�El costo de un camino era la sumatoria del costo de todas las aristas del camino�Para este problema hab�iamos visto dos algoritmos de programaci�on din�amicaque servian� uno era ��n�� y el otro era el algoritmo de Floyd Warshall queera ��n��� A continuaci�on trataremos el siguiente problema dado un v�erticev encontrar todos los caminos m�inimos desde ese v�ertice hasta cualquier otrov�ertice del grafo� El algoritmo que vamos a presentar para este problema es unalgoritmo goloso conocido como Algoritmo de Dijkstra��

����� Algoritmo de Dijkstra para caminos m�inimos

La estructura b�asica del algoritmo de Dijkstra consiste en mantener un estim�ado de la distancia m�inima desde el origen s hasta cualquier otro v�ertice denom inada d�v�� Este valor va a ser siempre mayor o igual a la distancia m�inima desdes hasta v y adem�as vamos a requerir que d�v� siempre sea igual a la distancia deun cierto camino desde s hasta v �excepto cuando d�v� � indicando que nohay camino�� Inicialmente d�s� � � y todos los dem�as v�ertices d�v� se setean en � A medida que el algoritmo progresa examina mas y mas v�ertices intentandoactualizar d�v� para cada v�ertice del grafo hasta que d�v� converge al valor de ladistancia m�inima�

����� Mecanismo de relajaci�on

El proceso por el cual se actualiza d�v� se denomina relajaci�on� Intuitivamentesi uno puede ver que la soluci�on aun no ha alcanzado un valor �optimo se lapresiona un poco mas hacia el �optimo� en particular si se descubre un camino de

�El algoritmo de Floyd�Warshall de programaci�on din�amica encuentra todos los caminosm�inimos desde cualquier v�ertice hasta cualquier otro en O�n��� ahora se trata de encontrartodos los caminos m�inimos desde solo un v�ertice hasta todos los dem�as lo cual deber�ia poderhacerse en menos tiempo� El orden a batir es entonces O�n���

���

Page 145: PPP - Algoritmos

s hacia v mas corto que d�v� entonces es necesario actualizar d�v�� este principioes com�un en muchos algoritmos de optimizaci�on�

Consideremos una arista desde un v�ertice u hacia un v�ertice v cuyo peso esW �u� v�� Supongamos que hemos calculado el estimado para d�u�� d�v�� Sabemosque hay un camino desde s hacia u de costo d�u�� usando este camino y agregandola arista �u� v� obtenemos un camino desde s hasta v de distancia d�u��W �u� v��Si este camino es mejor que el que ya ten�iamos entonces actualizamos d�v�� encaso contrario lo dejamos como est�a�

Algorithm �� Relax�u�v�� Relaja la arista �u�v�

if d�u� �W �u� v� � d�v� thend�v� � d�u� �W �u� v�pred�v� � u

end if

No es dif�icil observar que si realizamos relajaciones sucesivas en todas lasaristas del grafo entonces d�v� eventualmente converge la verdadera distanciam�inima desde s hasta v� La inteligencia en un algoritmo de este tipo esta enrealizar las relajaciones de forma tal que la convergencia sea lo mas r�apidaposible�

����� El algoritmo de de Dijkstra

El algoritmo de Dijkstra se basa en la realizaci�on de sucesivas relajaciones� Elalgoritmo opera manteniendo un subconjunto de v�ertices S � V para los cualesconocemos la verdadera distancia m�inima d�v�� Inicialmente S � Null y d�s� � �y d�v� � para los demas v�ertices� Uno por uno seleccionamos v�ertices deV � S para agregarlos a S� El conjunto S puede implementarse como un vectorde v�ertices coloreados� inicialmente todos los v�ertices son blancos y seteamoscolor�v� � negro para indicar que v S�

Al seleccionar que v�ertice de V �S se agregara a S entra en acci�on la decisi�ongolosa� Para cada v�ertice u V � S hemos computado la distancia estimadad�u�� La decisi�on golosa consiste en elegir el v�ertice u para el cual d�u� es m�inimo�es decir el v�ertice sin procesar que de acuerdo a nuestra estimaci�on esta mascercano a s�

Para hacer esta selecci�on mas e�ciente almacenamos los v�ertices de V � S enuna cola de prioridades �Un Heap por ejemplo�� donde el valor clave de cadav�ertice u es d�u�� Este es el algoritmo de Dijkstra�

���

Page 146: PPP - Algoritmos

Algorithm � Dijsktra�G�w�s�� Calcula todos los caminos minimos desde s�

for each u in V dod�u� � color�u� � blancopred�u� � null

end ford�s� � �pred�s� � nullQ� construircolacontodoslosverticeswhile Non empy�Q� dou� Extract�min�Q�for each v in Adj�u� doRelax�u� v�Decrease � key�Q� v� d�v�

end forcolor�u� � negro

end while

����� Validaci�on

Queremos ver ahora que el algoritmo de Dijkstra es correcto� es decir que calculalas distancias m�inimas desde s el v�ertice origen hasta cualquier otro v�ertice� Sea��s� u� la distancia m�inima de s hasta u�

Teorema� Cuando un v�ertice u es agregado a S� d�u� � ��s� u��

��

Page 147: PPP - Algoritmos

Demostraci�on� Supongamos que en algun momento el algoritmo intenta porprimera vez agregar un v�ertice u a S para el cual d�u� � ��s� u�� De nuestrasobservaciones sobre la relajaci�on sabemos que d�u� � ��s� u�� Consideremos lasituaci�on anterior a la insercion de u� Consideremos el verdadero camino m�inimodesde s hasta u� Como s S y u V � S en elg�un momento el camino debetomar por primera vez un salto hacia afuera de S� Sea �x� y� la arista que tomael camino donde x S y y V � S� Podemos probar que y � u�

Como x S� Tenemos d�x� � ��s� x� �porque u es el primer vertice queviola el principio�� Entonces cuando aplicamos la relajaci�on a x tendr�iamos qued�y� � d�y� �W �u� x� � ��s� y�� Por lo tanto d�y� es correcto y por hip�otesis d�u�no es correcto entonces no pueden ser el mismo v�ertice�

Observemos ahora que como y parece en algun punto del camino desde s hastau tenemos que ��s� y� � ��s� u� y por lo tanto�

d�y� � ��s� y� � ��s� u� � d�u�

Por lo tanto y deberia ser agregado a S antes que u lo cual contradice que ues el pr�oximo v�ertice que se agrega en S y por lo tanto el algoritmo es correcto�

���� An�alisis

El algoritmo de Dijkstra es O��n� e� logn�� Si se usan heaps de Fibonacci � enlugar de Heaps binarios standard el tiempo es entonces O�n logn� e��

�Los heaps de Fibonacci se estudiaran mas adelante en el curso

���

Page 148: PPP - Algoritmos

��� El problema del �arbol generador m�inimo

Un problema comun en redes de comunicaciones y disenio de circuitos es aquelque pretende conectar un conjunto de nodos mediante una red de longitud totalm�inima� �Siendo la longitud la sumatoria de las longitudes de los tramos queintegran la red��

Se asume que la red es una red no dirigida� Para minimizar la longitud de lared nunca ser�a conveniente tener un ciclo ya que podemos sacar una de las aristasque forman el ciclo sin destruir la conectividad y disminuyendo la longitud de lared� El grafo en de�nitiva debe ser conexo� no dirigido y ac�iclico� es decir quedebe ser un �arbol�

El que tratamos se denomimaproblema del �arbol generadorm�inimo �AGM��Formalmente dado un grafo conexo no dirigido G � �V�E� un �arbol generadores un subconjunto de aristas T � E que conectan todos los v�ertices sin formarciclos� Asumiendo que cada arista �u� v� tiene asociado un costo W �u� v� de�ni mos le costo del �arbol generador T como la sumatoria de las aristas que integranel �arbol�

w�T � �X

u�v�TW �u� v�

Un �arbol generadorm�inimo �AGM� es un �arbol generador de costo m�inimo�Y puede no ser �unico� pero si todos los pesos son distintos entonces el �arbol�optimo es �unico �esto es un tanto sutil y no lo vamos a demostrar�� La �guramuestra dos �arboles generadores m�inimos para el mismo grafo�

���

Page 149: PPP - Algoritmos

Presentaremos un algoritmo goloso para hallar el �arbol generador m�inimode un grafo� Antes tenemos que hacer algunas consideraciones generales queafortunadamente son f�aciles de probar�

Lema

� Un �arbol con n vertices tiene exactamente n � � aristas�

� Siempre existe un �unico camino entre dos v�ertices de un �arbol�

� Agregar una arista cualquiera a un �arbol crea un ciclo� eliminando cu alquier arista de este ciclo se recupera el �arbol�

Sea G � �V�E� un grafo no dirigido conexo cuyas aristas tienen pesos� Laintuici�on detr�as de los algoritmos golosos para el �AGM� es simple� mantenemosun subconjunto de aristas A incialmente vacia y agregamos una arista a la vezhasta que A es el �AGM�� Decimos que un subconjunto A � E es viable siA es unsubconjunto de aristas en alg�un AGM� Decimos que una arista �u� v� E�Aes segura si A � f�u� v�g es viable� Es decir que la elecci�on de �u� v� es unaelecci�on segura de forma tal que A aun puede ser extendido hasta formar unAGM

Un algoritmo goloso gen�erico opera agregando en forma repetida cualquierarista segura al AGM actual�

���

Page 150: PPP - Algoritmos

����� Algoritmo de Kruskal

El algoritmo de Kruskal trabaja agregando aristas a A en orden creciente depeso� �Las aristas menos costosas se agregan primero�� Elige la arista masecon�omica y si la mismano produce un ciclo entonces la agrega alAGM � Cuandono quedan aristas por agregar �no hay mas o bien no se puede agregar ninguna�queda formado el �arbol generador m�inimo�

La unica parte intrincada del algoritmo es detectar la formaci�on de ciclos�Para ello podr�iamos aplicar DFS pero eso llevar�ia demasiado tiempo� el de tectar si el agregado de una arista causa un ciclo en A puede hacerse empleandouna estructura de datos denominada estructura Union�Find � la estructurasoporta las siguientes operaciones�

� Create Set�u�� Crea un conjunto conteniendo u

� Find Set�u�� Encuentra el conjunto que contiene un elemento u�

� Union�u�v�� Realiza la uni�on de los conjuntos que contienen u y v en ununico conjunto�

Usando esta estructura podemos crear un conjunto por cada �arbol del bosqueA� de esta forma detectamos que se forma un ciclo si agregamos una arista cuyosv�ertices pertenecen al mismo conjunto�

Veamos como podemos usar esta estructura como una caja negra en la cualcada operacion se hace en O�logn���

En el algoritmo de Kruskal los v�ertices del grafo son los elementos a almacenaren los conjuntos y los conjuntos ser�an v�ertices en cada �arbol de A� El conjuntoA puede guardarse como una lista simple de aristas�

�Esta estructura y su implementaci�on se estudian mas adelante en el curso�de hecho hay implementaciones aun mas r�apidas

���

Page 151: PPP - Algoritmos

Algorithm � Kruskal�G�W��Calcula el AGM del grafo G

A� fgfor each u in V do

Create Set�u�end forSort E de acuerdo al peso w�for each �u� v� de la lista ordenada doif Find Set�u� � Find Set�v� then

Add �u� v� to AUnion�u�v�

end ifend forreturn A

��

Page 152: PPP - Algoritmos

����� An�alisis

El algoritmo de Kruskal recorre todas las aristas del grafo y por cada aristarealiza operaciones que son O�logn� por lo tanto el orden del algoritmo es O��n�e� logn�

��� Resumen y puntos clave

Los algoritmos golosos permiten resolver problemas de optimizaci�on en formaextremadamente sencilla� En algunos problemas los algoritmos golosos generanuna soluci�on �optima pero en otros lamentablemente tal cosa no es posible�

Para que un algoritmo goloso sea �optimo deben darse dos condiciones�

� Subsestructura optima El problema debe poder dividirse en subproblemasde forma tal que si la soluci�on al problema es �optima la soluci�on de lossubproblemas tambien debe serlo�

� Decisi�on golosa Debe ser posible demostrar que existe al menos una soluci�on�optima que comienza con la decisi�on golosa� Por inducci�on debe poder pro barse que mediante una repetici�on de sucesivas decisiones golosas se llegaa un soluci�on �optima�

Como ejemplos vimos el problema de la selecci�on de actividades que es muy sen cillo� el algoritmo de Dijkstra para caminos m�inimos en un grafo y el algoritmode Kruskal para generar el �arbol generador m�inimo en un grafo�

�� Ejercicios

�� Una m�aquina expendedora de pasajes de tren necesita un algoritmo paradar el vuelto usando la menor cantidad de monedas posibles�

�a� Describir un algoritmo goloso para solucionar el problema para mone das de ����� y � centavos� Demostrar que el algoritmo es �optimo�

�b� Suponer que las monedas son ahora de c�� c�� c�� � � � � cn centavos parac � � y k � � enteros� Demostrar que el algoritmo anterior es �optimo�

�c� Indicar si el algoritmo es siempre �optimo independientemente del con junto de monedas que se utilice� dar ejemplos en los cuales el algor itmo no es �optimo�

��

Page 153: PPP - Algoritmos

Chapter �

Estructuras de datos

avanzadas

���� Revisi�on de alguna estructuras de datos simples

El objetivo de esta clase es analizar diversas estructuras de datos desde el puntode vista de la e�ciencia de las primitivas que dichas estructuras soportan� Elobjetivo de toda estructura de datos es modelar de forma simple y e�ciente unoo varios aspectos de un problema� Uno de los paradigmas v�alidos a la horade diseniar un algoritmo es modelar el problema en una estructura de datosapropiada de forma tal que las primitivas que soporta la estructura permitanresolver el problema en forma sencilla� Los evaluadores de expresiones queutilizan pilas o �arboles son buenos ejemplos de la aplicaci�on de este paradigma�Vamos a empezar revisando algunas estructuras de datos cl�asicas y luego vamosa estudiar otras mas novedosas�

������ Pilas

Una pila es una estructura din�amica en la cual la entrada y salida de elementos sehace en orden LIFO �Last in �rst out�� Una pila �stack� soporta las siguientesoperaciones�

� Create Stack�� Crea una nueva pila vacia� O����

� Empty Stack�� Indica si la pila esta vacia� O����

� Top�� Devuelve el elemento en el tope de la pila sin sacarlo de la pila�O����

� Push�e� Apila un elemento e� O����

� Pop�� Desapila un elemento y lo devuelve� O����

��

Page 154: PPP - Algoritmos

La implementaci�on de pilas es una tarea en extremo sencilla� las pilas suelen serestructuras muy utilizadas en gran cantidad de algoritmos�

������ Colas

Una cola es una estructura din�amica en la cual la entrada y salida de elementosse hace en orden FIFO �First in �rst out�� Una cola soporta las siguientesoperaciones�

� Create Queue�� Crea una nueva cola vacia� O����

� Enqueue�e� Agrega un elemento e a la cola� O����

� Dequeue�� Extrae un elemento de la cola� O����

Las aplicaciones de las colas son muchas�

Colas dobles

En una cola doble se puede encolar o desencolar ya sea desde la cabeza o desdela cola de la cola� Es decir que se pueden manejar los elementos en orden FIFOo en orden LIFO Las colas dobles soportan las siguientes operaciones�

� Create Queue�� Crea una nueva cola vac�ia� O����

� Enqueue Head�e� Agrega un elemento e a la cabeza de la cola� O����

� Dequeue Head�� Extrae un elemento de la cabeza de la cola� O����

� Enqueue Tail�e� Agrega un elemento e a la cola de la cola� O����

� Dequeue Tail�� Extrae un elemento de la cola de la cola� O����

������ Listas

Una lista enlazada es una colecci�on din�amica de objetos de prop�osito general� ensu uso mas b�asico una lista sirve para mantener una relaci�on entre una cantidadvariable de objetos� pero hay muchas variantes de listas especializadas en otrotipo de aplicaciones� Una lista enlazada simple provee�

� Create List Crea una lista enlazada vacia� O����

� Insert�e� Agrega un elemento e a la lista� O����

� Search�e� Busca un elemento e en la lista� O�n��

� Delete�e� Elimina el elemento e de la lista� O�n��

Algunas variantes de las listas son las listas doblemente enlazadas� las listasordenadas �en donde se inserta en forma ordenada�� las listas circulares� listasdobles circulares� etc�

��

Page 155: PPP - Algoritmos

������ Arboles Binarios

Un �arbol binario es una estructura demasiado popular como para realizar algunaobservacion� debemos suponer que el �arbol se mantiene ordenado �es decir que nopuede insertarse un elemento en cualquier lado�� Las operaciones que dependende la altura �h� del �arbol son

� Create Tree�� Crea un �arbol vacio� O����

� Insert�e� Inserta el elemento e en el �arbol� O�h��

� Recorrer�� Lista los elementos del �arbol en algun orden �inorder� preordero postorder�� O�n��

� Search�e� Busca un elemento e en el �arbol� O�h��

� Delete�e� Elimina el elemento e del �arbol� O�h��

Las aplicaciones de los �arboles binarios son innumerables�

����� Arboles AVL

En un �arbol binario cuando el orden en el cual se insertan los elementos esaleatorio la altura del �arbol tiende a ser h � logn� sin embargo si esto no ocurreun �arbol binario puede degenerar en una lista enlazada siendo h � n� los �arbolesAV L tambien llamados Red� Black � trees se encargan de mantener al �arbolbalanceado independientemente de los elementos que se inserten y del orden enque se hagan las inserciones� Un �arbol AVL es un �arbol binario que ademasde mantenerse ordenado se mantiene balanceado� cuando esto ocurre podemosdecir que h � logn por lo tanto las operaciones que son las mismas que en un�arbol binario son

� Create Tree�� Crea un �arbol vacio� O����

� Insert�e� Inserta el elemento e en el �arbol� O�logn��

� Recorrer�� Lista los elementos del �arbol en algun orden �inorder� preordero postorder�� O�n��

� Search�e� Busca un elemento e en el �arbol� O�logn��

� Delete�e� Elimina el elemento e del �arbol� O�logn��

El costo de balancear el �arbol es un factor constante que se agrega en cada op eraci�on� pero precisamente por ser constante no afecta el orden de las primitivas�

Los �arboles AV L son herramientas �utiles y bastante poderosas para resolvervarias situaciones problem�aticas� Por ejemplo son muy e�cientes para imple mentar la parte interna del algoritmo de ReplacementSelection para sort ex terno�

��

Page 156: PPP - Algoritmos

���� An�alisis amortizado

El an�alisis amortizado es una herramienta important�isima para analizar el tiempode ejecuci�on de las primitivasde una determinada estructura de datos� Supongamosque para una operaci�on Op conocemos el peor caso del tiempo de ejecuci�on�muchas veces este peor caso no es demasiado importante y nos interesa masconocer cual es el tiempo de ejecuci�on promedio si efectuamos n operacionesOp� Sorprendentemente hay operaciones que son individualmente costosas peroque realizadas en serie son mas e�cientes�

El an�alisis amortizado analiza el tiempo promedio de una operaci�onque se supone se realiza n veces�

Las t�ecnicas de analisis amortizado conocidas son las siguientes

� M�etodo de agregacion

� M�etodo contable

� M�etodo de los potenciales

Vamos a estudiar en esta clase los dos primeros que son los mas simples� eltercero requiere de algunas herramientas que no estan a nuestro alcance en estecurso�

������ M�etodo de agregacion

En el m�etodo de agregacion calculamos el peor caso de una serie de n opera ciones como T �n� y luego calculamos el costo amortizado de una operaci�on comoT �n��n�

T �n� � Costo de n operaciones � T �op� �T �n�

n

Ejemplo Supongamos que agregamos a la estructura de datos pila la operaci�onMultipop que se encarga de remover k elementos de la pila o bien se detiene sien algun momento la pila queda vacia� El algoritmo es

Algorithm � Multipop�S�k�� Elimina hasta k elementos de la pila S

while not Empty Stack�S� and k � � doPop�S�k � k � �

end while

El costo de multipop depende de la cantidad de pops que se realicen� la can tidad de pops es el minimo entre k y la cantidad de elementos en la pila n� comopop es O��� el algoritmo Multipop es O�min�k� n���

Page 157: PPP - Algoritmos

En el peor caso Multipop elimina n elementos de la pila �todos los elementos�y por lo tanto Op � O�n��

Queremos analizar que ocurre si hacemos n operaciones Push� Pop yMultipopen orden aleatorio para n un n�umero grande� Como Push y Pop son O���y Multipop es O�n� podr�iamos decir que el costo de las n operaciones esn � O�n� � O�n�� con lo que dir�iamos que T �n� � O�n�� y por lo tantoT �n��n � n sin embargo esto no es cierto�

Si analizamos el caso con mejor cuidado podemos ver que por tratarse de unapila un elemento puede ser Popeado a lo sumo tantas veces como fue pusheado�por lo tanto en n operaciones Pop� Push�Multipop la cantidad de Pops es menoro igual a la cantidad de Pushs� y esto incluye a la operaci�on Multipop queconsiste en una cantidad entera de Pops� por lo tanto T �n� nunca puede serO�n�� sino que es a lo sumo O�n�� luego aplicando el m�etodo de agregaci�onT �n��n � O�n��n � O���� Por lo tanto el costo amortizado de la operaci�onMultipop es O����

Observaci�on adicional La primitivaMultipop es un ejemplo de una agregaci�ona una estructura de datos� Una agregaci�on consiste en implementar una prim itiva nueva sobre una estructura de datos conocida con el proposito de resolverun problema espec�i�co� Muchas veces la soluci�on de un problema se simpli�canotablemente realizando una agregaci�on a una estructura conocida� Ademas sila estructura esta bien diseniada en general el agregar una nueva primitiva essencillo y se reutilizan muchas de las primitivas ya realizadas�

Ejemplo II Nuestro segundo ejemplo es una estructura de datos que simulaun contador binario� esta estructura soporta solamente una operaci�on denomin ada Increment� que incrementa el contador en una unidad� El contador estaimplementado sobre un vector de k d�igitos binarios la operaci�on se realiza de lasiguiente forma

Algorithm � Increment�A�� Incrementa el contador A�

i� �while i � len�A� and A�i� � � doA�i� � �i� i � �

end whileif i � len�A� thenA�i� � �

end if

��

Page 158: PPP - Algoritmos

Este algoritmo es exactamente el mismo que se utiliza en hardware para ince mentar un registro� Queremos medir el costo de la operaci�on como la cantidadde bits que se cambian de estado� en el peor caso A � ������� y al incrementarlohay que cambiar todos sus bits por lo que el costo es O�k��

Si hacemos n operaciones� sin embargo� el costo no es O�nk�� Observemosun seguimiento del contador y de la cantidad de bits que se cambiaron en formaacumulada�

Valor Representacion Costo Acumulado� ������ � �� ������ � �� ������ � �� ������ � �� ������ � � ������ � �� ������ � ��� ������ � ��� ������ � �

Observemos que luego de incrementar n veces el contador el costo acumuladonunca es mayor que �n� observemos tambien que el bit menos signi�cativo cam bia su estado n�� veces� el segundo bit menos signi�cativo cambia su estado n��veces la cantidad de bits que se cambian al incrementar el contador n veces esentonces�

lognXi��

n

�i� n

�Xi��

�i� �n

Lo cual concuerda con nuestra observacion de que el costo acumulado nuncasuperaba �n� De lo anterior el peor caso de n operaciones es T �n� � O��n� porlo que aplicando el m�etodo de agregaci�on el costo de la operaci�on Increment esT ��n��n � O���

������ M�etodo contable

En el m�etodo de agregaci�on supon�iamos que todas las operaciones ten�ian uncosto igual al realizarse n veces e igual a n por el costo de la operaci�on� en elm�etodo de contabilidad se asigna a cada operaci�on un valor que se denominacosto amortizado� y luego se realiza una simulaci�on de n operaciones� cadavez que se realiza una operaci�on se debe pagar lo que la operaci�on cuesta y secuenta para ello con el costo amortizado� si el costo amortizado no alcanza parapagar la operaci�on hay que reajustar el costo y volver a comenzar� Si el costosobra la estructura de datos recibe un cierto cr�edito que puede ser usado siotras operaciones no pueden pagar su costo� �� Veamos un ejemplo para ver de

�Todo esto deber�ia resultarles verdaderamente raro� si asi ocurre no se asusten

��

Page 159: PPP - Algoritmos

que se trata este asunto�

Ejemplo � Volvamos al ejemplo de los n Push� Pop�Multipop� Asignemoslos siguientes costos amortizados�

PUSH � �

POP � �

MULTIPOP � �

Un pop o un multipop no pueden hacerse si antes no se hizo al menos un push�cuando se hace un push que insume O��� disponemos de � unidades� por lo quela estructura recibe � cr�edito� A medida que se hacen mas y mas operaciones seacumula un cr�edito por cada Push� cada pop insume O��� por lo que consumeun cr�edito� Multipop consume una cantidad de cr�editos variable pero podemosdemostrar que siempre hay cr�editos su�cientes para Multipop� por lo tanto comoPop es O��� y tiene costo amortizado cero Multipop tambi�en debe ser O����

El m�etodo contable es mas �fant�astico� que el m�etodo de agregaci�on y requieremucha pr�actica�

������ M�etodo de los potenciales

El m�etodo de los potenciales es mas complejo que los dos anteriores pero estambien mas poderoso� La idea es de�nir una funcion potencial que mapeauna estructura de datos a un numero real� mide la cantidad de esfuerzo quehemos aplicado a la estructura de forma tal de poder aprovecharlo en futurasoperaciones� el concepto es an�alogo al usado en f�isica cuando hablamos de energiapotencial�

Es importante destacar que el potencial depende unicamente de la estructurade datos en si misma� no de las operaciones que han sido aplicadas sobre dichaestructura en el pasado� En algunas ocasiones sin embargo es posible modi�carla estructura de datos de forma tal de llevar un registro en algun lugar de alma cenamiento de las operaciones que le fueron aplicadas� en estos casos la funci�onpotencial podr�ia depender de dicho lugar de almacenamiento�

El costo amortizado de la operaci�on i se de�ne como c��i� donde

c��i� � c�i� � �D�i�� � �D�i � ���

Siendo Di la estructura de datos que resulta luego de la operaci�on i�� y Dondec�i� es le costo verdadero asociado a la operaci�on� por lo tanto

Xi � �nc��i� �

nXi��

c�i� � �D�n�� � �D����

��

Page 160: PPP - Algoritmos

Por lo tanto si es siempre no negativa y �D���� � � el costo amortizado

nXi��

c��i�

sirve como cota superior del costo verdadero�

Ejemplo Volviendo al ejemplo de Multipop de�namos � Cantidad de ele mentos en el stack� Entonces

c��i� � c�i� � �D�i�� � �D�i � ���

���

� � � � � POP� � ���� � � POPk � ��k� � � Multipop

���

Por lo tanto C��i� esta acotado por � y ese es el l�imite del costo amortizado poroperaci�on�

El arte reside en encontra la funci�on potencial en forma ingeniosa� por ejemploque funci�on deberiamos usar para el ejemplo del contador binario�

Resumen Debemos notar que el an�alisis amortizado es importante ya que engeneral el costo amortizado representa en forma mas pr�actica y real el costode una primitiva y cuando de utilizar primitivas se trata debemos ser suma mente precisos en sus costos para no afectar en forma innecesaria el costo de losalgoritmos que las utilizan�

���� Heaps Binomiales

Al estudiar el algoritmo de HeapSort estudiamos una estructura de datos muyimportante denominada Heap� ahora vamos a extender esta estructura a otra demayor envergadura denominada Heaps Binomial� Un Heap Binomial soportalas siguientes operaciones

� Make Heap Construye un heap nuevo vac�io�

� Insert�H�x� Inserta el elemento x en el Heap H�

� Minimum�H� Devuelve el elemento minimo del Heap H�

� Extract Min�H� Devuelve el minimo y ademas lo remueve del Heap H�

� Union�H��H�� Realiza la union de dos Heaps en uno �unico�

� Delete�H�x� Elimina el elemento x del Heap H�

� Decrease Key�H�x�k� Cambia el elemento x por el elemento k que es menor�

��

Page 161: PPP - Algoritmos

En un Heap comun las operaciones Make�Heap y Minimum son O��� y lasrestantes excepto la union son O�logn�� La operaci�on de union en un heapcom�un es O�n�� Los Heaps Binomiales y los Heaps de Fibonacci tienen comoobjetivo realizar estas operaciones en forma mas e�ciente�

Para construir un Heap binomial necesitamos previamente el concepto de�arbol binomial�

������ Arboles Binomiales

Un �arbol binomial es un �arbol binario� Un �arbol binomial de orden k estaformado por dos �arboles binomiales de orden k� � en donde la raiz del �arbol deorden k es la raiz del �arbol derecho de orden k � �� El gr�a�co muestra algunos�arboles binomiales�

Propiedades Las siguientes propiedades son v�alidas en un �arbol binomial deorden k�

�� Bk tiene Bk nodos�

�� La altura de Bk es k

�� Bk tiene exactamente

�ki

nodos en el nivel i�

�� La raiz de Bk tiene grado k y no hay otro nodo en Bk con grado mayor oigual que k

� Si los hijos de Bk son rotulados de izquierda a derecha como k � �� k ��� k� �� � � � � � entonces el hijo i es la raiz de un Bi

Todas las propiedades se pueden probar en forma simple por inducci�on�

���

Page 162: PPP - Algoritmos

������ Estructura de un Heap Binomial

Un Heap binomial es una estructura de datos que consiste en una lista de�arboles binomiales �las ra�ices de los �arboles forman una lista� con las siguientespropiedades�

�� Cada �arbol binomial esta en Heap�order es decir que la clave de un nodoen uno cualquiera de los �arboles es mayor que la clave de sus hijos�

�� El heap no contiene dos �arboles de igual orden�

�� La lista de �arboles se mantiene en orden creciente de acuerdo al grado dela raiz�

������ Implementaci�on

Para implementar un Heap binomial se recurre a un nodo que presenta lasiguiente estructura

� Puntero al nodo padre�

� Valor de la clave�

� Grado del nodo� �cantidad de hijos�

� Puntero al hijo izquierdo�

� Puntero al hermano derecho�

Esta estructura es su�ciente para todos los nodos de un heap binomial� elpuntero al hermano derecho en los nodos que son raiz del �arbol binomial sirvenpara mantener la lista de �arboles� La ilustraci�on muestra un heap binomial y suimplementaci�on�

���

Page 163: PPP - Algoritmos

���

Page 164: PPP - Algoritmos

������ Implementaci�on de las operaciones

Create�Heap

Para crear un nuevo Heap Binomial hay que crear un nodo con los punteros ygrado seteados apropiadamente� esto insume �����

Minimum

Se recorre la lista de ra�ices� esto funciona porque cada �arbol binomial esta enorden de Heap� por lo tanto el elemento m�inimo es alguna de las raices de los�arboles binomiales� Cuando hay n nodos los tamanios de los �arboles binomialesen el Heap corresponden a las potencias de � que aparecen en la expansi�onbinaria de n� Por ejemplo para n � �� � � � � � � tendremos un B�� un B� yun B�� Esto implica que a lo sumo hay �� logn �arboles binomiales por lo tantoeste algoritmo insume O�logn��

Algorithm � Minimum�H�� Devuelve la clave m�inima de un Heap BinomialH�

y � NULLx� head�H�min� while x � NULL doif key�x� � min thenmin� key�x�y � x

end ifx� sibling�x�

end whilereturn y

Union

Para hacer la union de dos heaps binomiales tomamos la lista de ra�ices de cadaHeap y realizamos un merge de acuerdo al grado de cada raiz� Luego hacemosun merge de los �arboles binomiales de igual grado�

En primer lugar presentamos un algoritmo que dados dos �arboles binomialesde grado k representados por sus nodos raices construye un nuevo �arbol binomialde grado k � � donde z es la raiz del �arbol�

Como podemos ver Binomial Link es O���� El algoritmo que realiza la Uniones complejo pues se deben manejar varios casos� el algoritmofunciona enO�logn��

���

Page 165: PPP - Algoritmos

Algorithm Binomial Link�y�z�� Genera un nuevo �arbol binomial a partir dey y z

p�y� � zsibling�y� � child�z�childz � ydegree�z� � degree�z� � �

Algorithm Union�H��H��� Realiza la union de dos heaps binomiales�

h�Make �Binomial �Heap��head�H� � Binomial �Heap�Merge�H��H��Liberar los objetos H� y H� pero no las listasif head�H� � NULL then

return Hend ifprev � x� NULLx� head�H�next� x� sibling�x�while next� x � NULL doif degree�x� � degree�next � x� or �sibling�next � x� � NULL anddegree�sibling�next � x�� � degree�x�� thenprev � x� xx� next� x

elseif key�x� � key�next � x� thensibling�x� � sibling�next � x�Binomial � Link�next � x� x�

elseif prev � x � NULL thenhead�H� � next� x

elsesibling�prev � x� � next� x

end ifBinomial � Link�x� next� x�x� next� x

end ifend ifnext � x� sibling�x�

end while

���

Page 166: PPP - Algoritmos

Insert

Para insertar un elemento en un Heap Binomial simplemente construimos unHeap vac�io� lo inicializamos con el elemento a insertar y luego hacemos la Unionentre el Heap creado y el Heap donde queremos insertar el elemento� Como soloagregamos tiempos constantes a la union este algoritmo es O�logn��

Extract�Min

Hay que encontrar la raiz con clave m�inima �de la lista de raices�� Remover estaraiz y su �arbol asociado de la lista� tomando el �arbol que estaba asociado a estaraiz y quitando la raiz obtenemos k �arboles binomiales que ponemos en una listaenlazada� Luego hacemos la Union �primitiva de Union� par juntar esta listacon la lista anterior�

Decrease�Key

Se mueve la nueva clave hacia la raiz hasta que es � que su padre�

Delete

Se decrementa la clave �decrease key� hasta � de esa forma el nodo llega a lalista raiz� una vez alli usamos Extract�Min para eliminarlo�

���� Heaps de Fibonacci

Los Heaps de Fibonacci son otra forma de implementar Heaps que soportan lasmismas operaciones que los heaps binomiales� algunas de las operaciones de losheaps de Fibonacci pueden hacerse en menos tiempo que un Heap Binomial ypor eso la estructura merece atenci�on�

���� Resumen de Heaps

El siguiente cuadro resume el orden de las operaciones para las tres estructurasde Heap estudiadas�

Primitiva Heap Heap Binomial Heap de FibonacciMake Heap ���� ���� ����Insert ��logn� O�logn� ����Minimum ���� O�logn� ����Extract Min ��logn� ��logn� O�logn�Union ��n� O�logn� ����Decrease Key ��logn� ��logn� ����Delete ��logn� ��logn� ��logn�

��

Page 167: PPP - Algoritmos

��� Union�Find

La estructura Union�Find es una estructura de datos que implementa una seriede conjuntos disjuntos� Las operaciones que se permiten son

� Make Set�x� Crea un nuevo conjunto que contiene el elemento x es decirfxg�

� S�Union�x�y� Toma dos conjuntos como par�ametros y realiza la union �el resultado es un nuevo conjunto cuyo nombre es el nombre de algunos delos conjuntos que lo originaron � los conjuntos anteriores son destruidos�

� Find�x� Devuelve el nombre del conjunto que contiene al elemento x� Elnombre en la mayor�ia de las implementaciones es un elemento representat ivo del conjunto� de forma tal que Find�x� � Find�y� si x e y pertenecenal mismo conjunto�

Aplicaci�on La estructura Union Find ya habia sido mencionada en el algor itmo de Kruskal� y tiene varias aplicaciones importantes mas� Por ejemplosupongamos que G � �V�E� es un grafo no dirigido� Decimos que el v�ertice vesta en el mismo componente conexo que el v�ertice w si hay un camino usandoejes de E que conecta v y w� Dado un par de v�ertices queremos saber si estanen el mismo componente conexo� Podemos resolver el problema de la siguienteforma

Algorithm � Connected Components�G�

for each v in V doMake � Set�v�

end forfor each �u� v� in E doif Find Set�u� %& Find Set�v� thenUnion�u� v�

end ifend for

�Un elemento cualquiera sirve ya que los conjuntos son disjuntos

���

Page 168: PPP - Algoritmos

Algorithm � Same Component�u�v�

if Find Set�u��Find Set�v� thenreturn TRUE

elsereturn FALSE

end if

������ Implementaci�on usando listas

En nuestra primera implementaci�on �simple�� Cada conjunto va a estar rep resentado por una lista enlazada y el nombre del conjunto va a ser el primerelemento de la lista� Cada elemento de la lista tiene un puntero al primer ele mento de la lista y al siguiente�

Las operaciones se implementan de la siguiente manera�

� Make Set�x� Creamos una nueva lista que contiene x� O���

� Find Set�x� Usamos el puntero a la cabeza de la lista desde x� O���

� Union�x�y� Hay que realizar la union de dos listas y actualizar los punterosa la cabeza �ver �gura�� Esta operaci�on se denomina splice� el splice deL� en L� implica hacer que la cabeza de L� apunte al primer elemento deL� y el ultimo elemento de L� apunte al elemento que antes era la cabezade L�� esto engancha ambas listas� Ademas hay que actualizar todos lospunteros a la cabeza de L� para que apunten ahora a la cabeza de L��O�n��

���

Page 169: PPP - Algoritmos

Para m operaciones esta implementaci�on requiere ��m���

������ Segunda Implementaci�on usando listas

Para mejorar el tiempo necesario para realizar la operaci�on de Union� agregamosun campo a cada nodo de la lista� Para los elementos a la cabeza de una lista elcampo contiene la cantidad de elementos en la lista� para el resto de los elementoseste campo no se usa�

Con esta implementacion las operaciones Make� Set y Find� Set� no cam bian�

Union�x�y� Para realizar el splice el mismo se hace de la lista que tiene menoselementos en la otra� De esta forma tenemos que actualizar menor cantidad depunteros� veamos como afecta esto el orden de la Union�

Realicemos un an�alisis amortizado para m operaciones�en el viejo algoritmode Union esto insum�ia ��n���

Consideremos cuantas veces cambia el nombre de un objeto �el puntero ala cabeza�� Cada vez que el nombre de un objeto x cambia sabemos que xpertenec�ia a un conjunto de menos elementos de los dos que participan en laUnion� La primera vez que x es actualizado el conjunto resultante pasa a tener

���

Page 170: PPP - Algoritmos

dos conjuntos� la segunda vez pasa a tener al menos � elementos �en caso con trario el conjunto de x no seria el mas chico�� Por lo tanto por cada vez que seactualiza un puntero el tamanio del conjunto por lo menos se duplica� Como unconjunto puede tener a lo sumo n elementos la cantidad de veces que el nombrede un objeto puede ser actualizado es logn� Como hay n objetos el costo totales O�n logn�� Si consideramos m operaciones �Make Set�Find Set�Union� vemosque Make Set y Find Set son O��� por lo tanto el total es O�m � n logn��

������ Implementaci�on usando Forests

En esta implementacion cada conjunto del grupo Union�Find esta representadopor un Up� Tree�� la implementaci�on cumple las siguientes propiedades�

�� Cada nodo de un �arbol representa un elemento del conjunto�

�� Cada nodo apunta a su padre�

�� La raiz es padre de si mismo�

�� El nombre del �arbol es su raiz�

Operaciones

� Make Set�x� Crea un nuevo nodo con un puntero a si mismo�

�Cada nodo apunta a su padre

���

Page 171: PPP - Algoritmos

� Union�x�y� Apunta la raiz del �arbol de menor altura a la raiz del �arbol mas

alto�

� Find�x� Desde el nodo x se siguien los punteros hasta la raiz del �arbol queel nombre del conjunto�

Path�Compression Una optimizaci�on interesante es la compresi�on de cam�inos� Cada vez que hacemos un Find del nodo x y el Find recorre el �arbol hastala raiz xr� pasando por los nodos x�� x�� � � �xr hacemos que xr sea el nuevo padrede todos estos nodos� De esta forma cualquier Find que hagamos para estosnodos va a tardar O����

Algorithm � AL Make Set�x��

p�x� � xrank�x� � �

Algoritmos

���

Page 172: PPP - Algoritmos

Algorithm � Union�x�y�

LINK�Find Set�x��Find Set�y��

Algorithm � LINK�x�y�

if rank�x� � rank�y� thenp�y� � x

elsep�x� � yif rank�x� � rank�y� thenrank�y� � rank�y� � �

end ifend if

Algorithm � Find Set�x�� sin path compression

if x � p�x� thenp�x� � Find� Set�p�x��

end ifreturn p�x�

Notemos que cada nodo tiene un campo rank� El �rank� de un nodo es unacota superior de la altura del nodo� Inicialmente es cero y solo se incrementeen � cuando el nodo es una raiz y otra raiz de igual rango es linkeada como unnuevo hijo�

An�alisis Puede probarse que si hacemosm operaciones fMakeSet� Union� F indgy n de ellas son Make� Set el tiempo total es O�m�m�n��� donde �m�n� esla funci�on inversa de Ackermann� que se de�ne de la siguiente forma

�m�n� � minfi � � A�i� bm�nc� � logng

Esta de�nici�on depende de A�m�n� que es la funci�on de Ackerman� que se de�nede la siguiente forma

A��� j� � �j para j � �

���

Page 173: PPP - Algoritmos

A�i� �� � A�i � �� �� para i � �

A�i� j� � A�i � �� A�i� j � ��� para i� j � �

Esta funci�on crece mas r�apido que practicamente cualquier funci�on que podamosimaginar� Por lo tanto �m�n� es una funci�on de crecimiento increiblementelento� para cualquier caso pr�actico podemos suponer que �m�n� � ��

No podemos� probar que el costo de la estructura Union�Find es O�m�m�n���pero podemos probar un l�imite mas d�ebil que es O�m log� n�� Donde la funci�onlog� n es una funci�on de crecimiento extremadamente lento y que de�nimos in formalmente como la cantidad de veces que debemos aplicar la funci�on log a npara obtener un numero � �� Notemos que para todo n � � ����� log� n � Podemos asumir entonces que log� n � para cualquier caso pr�actico�� �

Teorema � Tenemos que rank�x� � rank�p�x�� salvo que x � p�x�� Inicial mente rank�x� � � y rank�x� crece en forma monotona hasta x � p�x��

Demostraci�on Los nodos son linkeados de forma tal que el padre tiene mayorrank o si ambos tienen el mismo rango entonces el rango del padre se incrementa�Por lo tanto rank�x� � rank�p�x�� salvo que x sea su padre �x es raiz�� Cuandox ya no es una raiz su rango no puede cambiar� Lqqd�

Teorema � Sea Size�x� el numero de nodos en el sub �arbol cuya raiz es x�Entonces size�x� � �rankx

Demostraci�on Por inducci�on en size�x�� Claramente es verdad cuando size�x� ��� ya que rank�x� � �� Cuando y es linkeado a x entonces si rank�y� � rank�x��size�x� aumenta pero el rango no cambia por lo que la desigualdad se mantiene�

Si rank�y� � rank�x� � n entonces antes de linkear la desigualdad se mantienepara x y para y� por lo tanto size�x� � �n y size�y� � �n� Luego de que losnodos son linkeados� tenemos size�x�� � �n�� y rank�x�� � rank�x� � � dondex� es el nuevo x� Por lo tanto la desigualdad se mantiene� Lqqd�

Teorema � En cualquier momento hay a lo sumo n��r nodos de rango r�

Demostraci�on Supongamos que cuando el nodo x recibe el rango r rotulamostodos los nodos en el sub �arbol de x con el rotulo x� Notemos que ningun nodoes rotulado mas de una vez� por el Teorema �� Por el teorema �� size�x� � �r�por lo tanto cada vez por lo menos �r nodos son rotulados� Si hubiera mas den��r nodos de rango r habria un total de �n��r���r� nodos rotulados lo cualser�ia una contradicci�on� Lqqd�

�No queremos� no debemos� no sabemos�Es importante que quede claro que estamos hablando de funciones de crecimiento ex�

traordinariamente lento

���

Page 174: PPP - Algoritmos

Corolario El rango mas grande que puede tener un nodo es logn

Teorema � Supongamos que reemplazamos una serie S� de m� operacionesMake Set� Union y Find por una serie S de m operaciones Make Set� Link yFind �reemplazando cada Union por dos Finds y un Link�� Entonces si S insumeO�m log� n� operaciones S� insume O�m� log� n� operaciones�

Demostraci�on Observemos que una Union consiste de dos Finds y un Link�Por lo tanto m� � m � �m��

Por el Teorema � podemos contar la cantidad de operaciones en funci�on de lacantidad de Make Sets� Links y Finds e ignorar el costo de las uniones�

Ahora estamos listos para probar que O�m log� n� acota el tiempo de ejecuci�onde la estructura Union Find� Recordemos que m es la cantidad de operacionesMake Set� Link� Find y n es la cantidad de nodos en total �la cantidad de Make Set��

Cada Make Set es O��� y hay n de ellos entonces el tiempo de los Make Setses O�n� � O�m� ya que m � n�

Cada Link insume O��� y hay O�m� Links� el tiempo total es por lo tantoO�m��

Queda por contar el costo de los Finds� Cuando hacemos un Find de unnodo x� recorremos el camino x�� x�� � � � � xi desde x� hasta la raiz xi� El costototal del Find es la cantidad de nodos del camino� Vamos a calcular este costorotulando cada nodo en cada camino recorrido por un Find con una letra B�costo de bloque� o una letra P �costo de camino�� Una vez que esto fue realizadosumamos el total de Bs y Ps para obtener el costo total�

De�nimos un Bloque de la siguiente manera ponemos a cada nodo de rangor en el bloque log� r por ejemplo

rango bloque��� �� �

��� ����� � � ��� �

���� � � ���� �etc etc

���

Page 175: PPP - Algoritmos

Los costos se asignan de la siguiente forma Si un nodo es el ultimo en elcamino hacia la raiz con su rango en un bloque dado� rotulamos el nodo B� Elhijo del nodo rotulado B tambien recibe una B� el resto de los nodos del caminoson rotulados con P � Tal vez queda mas claro de esta forma

xi es rotulado con B si p�xi� � xi �es la raiz o su hijo�� o si log� rank�xi� �log�rank�p�xi��� �el nodo y su padre estan en distintos bloques�� Los restantesnodos del camino se rotulan con P �

Ejemplo Supongamos que hacemos un Find desde el nodo x� y los rangos sonlos siguientes

En el ejemplox�� x�yx recibir�ian el rotuloB mientras que x�� x�yx� recibir�ianel rotulo P �

Para computar el costo notemos que por el corolario del Teorema � hay a losumo log� n bloques diferentes� por lo tanto hay a lo sumo �log� n� � � nodosque perteneces a un bloque distinto que el de su padra� Sumando � por la raizy el hijo de la raiz tenemos a lo sumo � � log� n rotulaciones con B� El total deoperaciones Find es O�m�� por lo tanto el total de rotulaciones B es O�m log� n�

Para contar las veces que rotulamos con P la tecnica no la incluimos porqueresulta demasiado extensa� De lo anterior y de la cuenta de los r�otulos P sellega a O�m log� n�

���

Page 176: PPP - Algoritmos

Como puede verse esta implementaci�on de la estructura Union Find es ex tremadamente e�ciente� el uso de estructuras de datos apropiadas implementa das en forma e�ciente es un punto clave en el disenio de algoritmos� la estructuraUnion Find es de utilidad en gran cantidad de algoritmos� sobre todo en aquellosde tipo constructivo como por ejemplo el algoritmo de Kruskal�

��� Hash�Tables

Una de las estructuras de datos mas importantes es la familia de los diccionarios�Un diccionario es una estructura de datos que permite almacenar elementosde la forma �clave� descripcion� donde la clave identi�ca univocamente a cadaelemento y la descripci�on puede ser absolutamente cualquier cosa�

Las operaciones b�asicas sobre esta estructura son tres insertar un nuevoelemento en el diccionario� Buscar un elemento en el diccionario y opcionalmenterecuperar su descripci�on y por �ultimo eliminar un elemento del diccionario�

Para implementar este tipo de estructura existen varias opciones�

En primer lugar se puede usar una lista enlazada con lo cual logramos unabuena utilizaci�on de espacio en memoria �solo usamos lugar para los elementosinsertados� pero perdemos mucha e�ciencia al recuperar datos� La b�usqueda enuna lista enlazada es O�n�� por ejemplo�

La segunda opcion consiste en usar una tabla de acceso directo o Look Up Table� donde cada clave tiene una posici�on reservada en la tabla� de esta formala mayor�ia de las operaciones son O��� pero como desventaja necesitamos unatabla con capacidad de almacenar todas las claves posibles� Si la clave es porejemplo un numero de documento este tipo de esquema es inpracticable�

Las Hash Tables combinan la buena utilizaci�on del espacio de las listas enlaza das con la velocidad de acceso de las tablas de acceso directo� Basicamente unaHash Table es una tabla de acceso directo en donde el acceso a la tabla no sehace directamente por la clave sino aplicando a la clave una funci�on de hashing�La funci�on de hashing convierte la clave en una cierta posici�on de la tabla� latabla se reserva del espacio que se crea conveniente� Por ejemplo para una claveque es un n�umero de d�igitos podemos reservar solamente ��� posiciones y usarcomo funci�on de hashing la funci�on f�x� � xmod ��� �

������ Operaciones

Las operaciones soportadas por una Hash Table son las siguientes

�x mod y devuelve el resto de la divisi�on entera entre x e y

��

Page 177: PPP - Algoritmos

�� Insert�e�key�� Inserta un elemento e en la tabla con clave key� O���

�� Search�key�� Busca en la tabla el elemento cuya clave es key� O���

�� Delete�key�� Elimina de la tabla el elemento cuya clave es key� O���

La clave debe ser una parte del elemento que sirve para identi�carlo en formaunivoca con respecto al universo de elementos� Por ejemplo el padr�on de unalumno sirve como clave para todo el conjunto de alumnos�

������ Resoluci�on de colisiones

De�namos una hash�table como un vector H���m� donde m �� jU j cantidadde claves posibles� Es decir que el espacio utilizado es muy cercano al espacionecesario�

Una funci�on de hashing h mapea las claves a indices de H es decir queh U � ����m� o sea x U� f�x� � z z ����m��

El problema es que la funci�on de hashing puede producir colisiones lo cualimplica que la funci�on de hashing genera el mismo valor para dos claves dis tintas� h�k�� � h�k�� con k� � k�� Por ejemplo si h�x� � xmod � los valoresx � � y x � �� producen una colisi�on� A las claves que colisionan se las llamasin�onimos� Es necesario contar con alg�un m�etodo de resoluci�on de coli�siones que permita resolver este problema� Las t�ecnicas b�asicas para resolvercolisiones son

�� Encadenamiento Tambi�en llamado direccionamiento cerrado� los elementosque colisionan se encadenan en una lista enlazada�

�� Direccionamiento Abierto Cuando ocurre una colisi�on se busca una posici�onvac�ia de la tabla para el elemento en cuesti�on� Hay varias formas de buscareste lugar

� Lineal Se prueba en forma sucesiva y lineal x�x���x���� � �

� Cuadr�atico Se prueba mediante valores que se incrementan en formacuadratica�

� Doble hashing Una segunda funci�on de hashing determina donde probar�

Mas adelante consideraremos las funciones de hashing� por el momento supongamosque nuestra funci�on de hashing satisface

Principio de Uniformidad Simple Cualquier clave tiene la misma probab�ilidad de ser hasheada a cualquier ubicaci�on de la tabla H� La probabilidad deque a una clave x le corresponda la posici�on z en la tabla es la misma para todox

���

Page 178: PPP - Algoritmos

Resoluci�on de colisiones por encadenamiento

Todos los sin�onimos se encadenan en una lista enlazada� De esta forma� cadaposici�on de la tabla es en realidad una lista enlazada que tiene tantos elementoscomo colisiones hayan ocurrido en dicha posici�on�

Operaciones

� Insert�x� Calcular h�x� e insertar x en la cabeza de la lista en H�h�x������� siempre�

� Search�x� Calcular h�x� y buscar x en la lisra enlazada en H�h�x��� O�n�en el peor caso�

� Delete�x� Calcular h�x� y buscar x en H�h�x�� para eliminarlo� O�n�peor caso�

Como en todo an�alisis de primitivas no estamos tan interesados en el peorcaso sino en el caso medio si realizamos n operaciones�

Caso medio para Search�x�

Sea H � ����m� ��

Sea n El numero de elementos en H Factor de carga de H�

�n

m

Caso �� Caso medio de Search�x� si x no est�a en la tabla ���� paracalcular h�x� � tiempo promedio para buscar x en H�h�x��

���� � ��longitud � promedio � de� la� lista�

���� � ��n

m�

��� � �

���

Page 179: PPP - Algoritmos

Caso �� Caso medio de Search�x� si x est�a en la tabla

���� para calcular h�x� � cantidad esperada de elementos a examinar enH�h�x�� hasta encontrar x�

Nota� Si x es el iesimo elemento agregado a H entonces la longitud esperadade H�h�x�� antes de agregar x es i��

m

���� �nXi��

P �x� � � i � �

m� ��

���� �nXi��

n� � i� �

m� ��

���� �nXi��

i� �

nm�

nXi��

n

���� ��

nm

nXi��

�i � �� ��

n

nXi��

���� ��

nm� �n� ��n

��

n� n

���� �n

�m� �

�m� �

���� ��

�� � �

�m� � � ��� � �

Por lo tanto Search�x� es en promedio ��� � � lo cual es ���� si � ����lo cual ocurre si n � m�

Resoluci�on de colisiones por direccionamiento abierto

H es un vector simple� todos los elementos van a alguna posici�on de H� Suce sivamente se prueban distintas posiciones de H cuando ocurre una colision hastaencontrar un lugar para x�

La funci�on de hashing recibe como par�ametro adicional el numero de intento�

Secuencia de prueba� h�k� ��� h�k� ��� � � �mh�k�m � �� establece las posi ciones a probar si ocurre una colision� Si h�k� �� esta ocupado probamos conh�k� �� etc� En el peor caso se examina toda la tabla�

Operaciones Para implementar las operaciones en forma funcional debemostener asociada a cada posicion de la tabla un �ag que indique su estado

���

Page 180: PPP - Algoritmos

libre� La posici�on nunca fue ocupada�ocupada� La posici�on est�a ocupada por un elemento�borrada� La posici�on fue ocupada alguna vez pero el elemento ha sido

borrado�

Operaciones

� Insert�x� Calculamos h�x� i � ��� Si est�a libre o borrado insertamos xalli� Si la posici�on est�a ocupada probamos con h�k� i� �� hasta encontrarun lugar libre o borrado� Marcamos el lugar donde insertamos x comoocupado�

� Delete�x� Calculamos h�x� i � ��� Si la posici�on est�a ocupada por x elim inamos el elemento marcandolo como borrado� Si la posici�on est�a libre seproduce un error x no inexistente� Si la posici�on est�a ocupada por otroelemento o est�a borrada seguimos buscando con h�x� i��� hasta encontraral elemento o a una posici�on libre en cuyo caso la b�usqueda se detiene puessi el elemento existiera deber�ia estar alli�

� Search�x� Calculamos h�x� i � ��� Si la posici�on est�a ocupada por x �n�Si la posici�on est�a ocupada por otro elemento o est�a borrada seguimosbuscando con h�x� i� ��� si al buscar nos topamos con una posici�on libretermina la b�usqueda con x inexistente�

Principio de uniformidad� Toda clave tiene la misma probabilidad de tenera cualquiera de las m permutaciones posibles de �indices de H como su secuenciade prueba�

Notemos que es distinto del principio de uniformidad simple�

Direccionamiento abierto lineal

h�k� �� � h�k�

h�k� i� � �h�k� i� �� � ��modm

Notemos que la secuencia de pruebas es c�iclica� de la forma

x� x� �� x� �� � � � �m� �� �� �� � � �� x� �

Cada posici�on de la tabla establece una secuencia� por lo tanto hay tantassecuencias posibles como posiciones tiene la tabla� Entonces hay exactamentem secuencias posibles� Como m � m esta t�ecnica no es uniforme�

Ventajas y desventajas La principal ventaja de este m�etodo es que resultasumamente sencillo de implementar� La desventaja reside en que genera unfen�omeno conocido como clustering� largas zonas del vector ocupadas y otrasdesocupadas� los datos tienden a distribuirse en forma despareja�

���

Page 181: PPP - Algoritmos

Direccionamiento abierto cuadratico

h�k� �� � h�k�

h�k� i� � �h�k� � c� � i� c� � i��modmDonde c� y c� son constantes� Al igual que en el m�etodo lineal hay tantassecuencias de prueba como posiciones tiene la tabla y por lo tanto el m�etodo noes uniforme�

Ventajas y desventajas Este m�etodo si bien es un tanto mas complejo deimplementar tambi�en resulta sencillo� igual que el m�etodo lineal tambi�en generaclustering pero a diferencia del anterior lo hace en forma mas leve�

Direccionamiento abierto con Doble�Hashing

h�k� �� � h�k�

h�k� i� � �h��k� � h��k� � i�modm

Importante� Para estar seguros de que la secuencia de pruebas intenta contodos las posiciones de H debemos tener h��k� relativamente primo a m �sindivisores en com�un�� Esto es f�acil de conseguir asegurando que m sea un n�umeroprimo� Si m es una potencia de � y h��k� � kmodm entonces h��k� siempredebe ser impar�

Para este caso hay mas de m secuencias de prueba pero de todas formas elm�etodo no es uniforme�

An�alsis Para analizar la e�ciencia de las operaciones usando direccionamientoabierto debemos analizar cual esla cantidad esperada de pruebas a realizar�

Suponemos hashing uniforme �todas las m secuencias posibles son equi probables�� Suponemos que estamos analizando el Insert�c� pero tengamos encuaneta que el resto de las operaciones son an�alogas�

� nm por lo que necesitamos � �

Teorema� La probabilidad de que por lo menos i pruebas accedan a posicionesocupadas es menor o igual a i�

Demostraci�on

P �ipruebas� � P ��� � P ��� � � �P �i� ��

P �i� �n

m� n� �

m � �� � �

n � �i � ��

m� �i� ��

P �i� � �n

m�i

P �i� � i

���

Page 182: PPP - Algoritmos

Teorema� Si � � entonces el numero esperado de pruebas en una b�usquedano exitosa es menor o igual a �

���

Demostraci�on� En una b�usqueda no exitosa cuando � � alguna cantidadde pruebas acceden a posiciones ocupadas mientras que la �ultima accede a unaposici�on vac�ia o borrada�

Cantidad de pruebas �

� � E�pruebas que acceden a posiciones ocupadas�

���Xi��

i �Pr�exactamente� i�pruebas� acceden� a�posiciones� ocupadas�

Por teorema anterior�

� ��Xi��

i

��

Por ejemplo si � � entonces el n�umero promedio de pruebas es ����� � ��

Si la tabla est�a llena en un ��' el n�umero de pruebas promedio es ���

Teorema� Si � � entonces el numero esperado de pruebas en una b�usquedaexitosa es menor o igual a �

� ln ����

Demostraci�on Sea k la clave que estamos buscando� Supongamos que k fuela �i � � clave insertada� La cantidad promedio de pruebas para insertar k fue�seg�un teorema anterior�

�� im

�m

m� �

Cantidad de pruebas �

�n��Xi��

P �k�i� ��insertada� � m

m � i

��

n�n��Xi��

m

m � i

�m

n�n��Xi��

m� i

���

Page 183: PPP - Algoritmos

��

mXj�m�n��

j

� �

�Z m

j�m�n

xdx

��

� ln m

m � n

��

ln

��

Si la tabla est�a llena en un ��' el n�umero promedio de

������ Funciones de Hashing

No vamos a realizar un estudio de funciones de hashing debido a que no es temade la materia� basicamente hay dos m�etodos b�asicos para construir una funci�onde hashing�

M�etodo de la divisi�on

h�k� � kmodm

Para que la funci�on sea buena debe ser lo mas uniforme posible� esto ocurrecuando m es un n�umero primo�

M�etodo de la multiplicaci�on

h�k� � bm�k �Amod ��c

Donde A es una constante tal que � � A � �� kAmod � es la parte fraccionalde kA es decir kA� bkAc� El valor de m no es tan cr�itico en este m�etodo comoen el de la divisi�on� La distribuci�on depende mas del valor de A� un valor de A

que suele tener buen resultado es �p���� � Otra ventaja de este m�etodo es

que las multiplicaciones suelen costar menos que las divisiones en la mayor�ia delas arquitecturas conocidas�

���� Resumen y puntos clave

Este fue un cap�itulo realmente extenso cuyo principal objetivo es presentarlas herramientas necesarias para analizar la e�ciencia de diversas implmenta ciones de algunas estructuras de datos y presentaralgunas estructuras nuevasque pueden permitir diseniar mejores algoritmos�

���

Page 184: PPP - Algoritmos

En principio se repasaron ciertas estructuras de datos conocidas como serpilas� colas� listas� arboles� etc� Tener conocimiento de estas estructuras esfundamental para el disenio de algoritmos�

El analisis amortizado es la herramienta que debe utilizarse para analizarla e�ciencia de las primitivas que implementan la funcionalidad de una ciertaestructura de datos� Describimos el metodo de agregacion� el contable y el delos potenciales del analisis amorizado�

Los Heaps Binomiales presentan una implementacion sumamente e�cienciapara una estructura generica de Heaps Mergeables� para describir esta estructurahacemos uso de los arboles binomiales que tambien son nuevos�

La estructura Union Find es necesaria para manejo de estructuras basadasen conjuntos disjuntos� describimos y analizamos diversas implementaciones deesta estructura�

Por ultimo las hash tables son la opcion habitualmente mas e�ciente paraimplementar estructuras de tipo diccionario�

���� Ejercicios

�� Insertar las siguientes claves

� ��� ��� ����������������

En una hash table con resoluci�on de colisiones por encadenamiento conm � � y con h�k� � kmodm

�� Insertar las siguientes claves

��� ��� ��� ��������������

En una hash table con m � �� usando direccionamiento abierto usandoh�k� � kmodm� Emplear

�a� Direccionamiento abierto lineal�

�b� Direccionamiento abierto cuadratico con c� � � y c� � �

�c� Doble hashing con h��k� � � � �kmod �m � ���

�� La operaci�on Binomial Heap Minimum puede funcionar incorrectamente silas claves pueden tomar valor � explicar porque y re escribir la primitivapara poder manejar esta situaci�on�

�� Mostrar paso a paso la estructura resultante luego de realizar las siguientesoperaciones

���

Page 185: PPP - Algoritmos

for i � � to �� doMake Set�x�

end forfor i � � to � by � do

Union�Xi�Xi���end forfor i � � to �� by � do

Union�Xi�Xi���end forUnion�X��X�Union�X���X���Union�X��X���Find Set�X��Find Set�X��

���

Page 186: PPP - Algoritmos

Chapter ��

Complejidad

���� Introducci�on

A lo largo del curso hemos mencionado en algunas oportunidades problemas paralos cuales no ten�iamos una soluci�on e�ciente� problemas que requer�ian para sersolucionados algoritmos de orden exponencial o superexponencial� En particularten�iamos problemas con algoritmos de tipo O�cn�� O�nn�� O�n ��

En la d�ecada del !�� cientos de problemas estaban en esta situaci�on de incer tidumbre� La teor�ia de los problemas NP Completos desarrollada por StephenCook y Richard Karp aport�o las herramientas necesarias para poder comprendera este tipo de problemas y para poder clasi�car a un problema de acuerdo consu di�cultad para resolverlo algoritmicamente�

Es importante comprender cual es el verdadero problema de los algoritmos deorden exponencial� uno podr�ia suponer que el problema es que dichos algoritmosson ine�cientes y que el escollo puede salvarse usando hardware mas poderoso�este concepto es equivocado� En el gr�a�co podemos ver el tiempo necesariopara resolver un problema de acuerdo al orden del algoritmo utilizado en unacomputadora de primera l�inea� Como podemos ver los algoritmos que son expo nenciales necesitan varios anios para resolver un problema en el cual n � ���� siel orden es n para n � �� necesitamos mas de un siglo de c�alculos � El problema

��

Page 187: PPP - Algoritmos

de los algoritmos de este tipo es que para un cierto n no muy grande el problemasencillamente no se puede resolver�

������ Reducciones

Supongamos que tenemos un problema denominado problema X y que el prob lema X puede resolverse de la siguiente forma

Problema�X�Q�

�� Convertir Q en R que es una instancia del problema Y � R � f�Q��

�� Usar una rutina que resuelve el Problema Y de la forma Z � Problema�Y �R�

�� Convertir Z en W aplicando la inversa de f � W � f���Z��

�� Devolver W como la soluci�on de Problema X�Q��

La transformacion de instancias de un tipo de problema en instancias de otrotipo de problema de forma tal que las soluciones se preservan se denominaReducci�on� Las reducciones fueron introducidas por Richard Karp y son laherramienta fundamental para manejarnos dentro del mundo de los problemasNP completos�

Si nuestra reducci�on traduce Q en R en O�P �n�� entonces�

�� Si Problema Y�R� es O�P ��n�� entonces el Problema X puede resolverseen O�P �n� � P ��n��

�� Si sabemos que ��P ��n�� es una cota inferior para resolver el Problema X�entonces ��P ��n��P �n�� tiene que ser una cota inferior del Problema Y�

La segunda propiedad es la que vamos a utilizar para la tarea nada grata dedemostrar que un problema es demasiado complejo como para poder resolverlo�

Ejemplo Un problema interesante de la geometr�ia espacial es dado un con junto de puntos en el plano encontrar el pol�igono convexo mas extenso que esfrontera de dichos puntos� En la �gura vemos una soluci�on a un ejemplo�

���

Page 188: PPP - Algoritmos

Supongamos que disponemos de una rutina Convex�Hull�V� que dado unvector V de n puntos calcula el pol�igono convexo frontera y lo devuelve enun vector� Sorprendentemente aplicando una reducci�on podemos utilizar esteproblema para diseniar un curioso algoritmo de sort�

Dado un vector W de n numeros que queremos ordenar lo convertimos en unvector de puntos en el plano donde W �i��x � W �i��W �i��y � W �i��� al realizaresta transformaci�on los puntos forman una par�abola�

���

Page 189: PPP - Algoritmos

Como la par�abola es convexa cada punto de la par�abola forma parte delpol�igono convexo frontera� ademas como los puntos vecinos en el pol�igono tienenvalores de x vecinos el pol�igono covexo externo devuelve los puntos ordenadospor sus coordenadas x �es decir que ordena los n�umeros originales��

Algorithm � Sort CX�V�n�� Ordena el vector V�

for i � � to n doW �i��x� V �i�W �i��y � V �i��

end forConvex�Hull�W�n�for i � � to n doV �i� �W �i��x

end for

An�alisis Crear el vector W y luego copiarlo en V se hace en O�n�� Recordemosque la cota inferior de un algoritmo de sort era ��n logn�� Si pudieramos hacerel procedimiento Convex � Hull en menos de ��n logn� entonces podr�iamosordenar en menos de ��n logn� ya que un problema se puede reducir al otro �

Por lo tanto el algoritmo Convex Hull aunque no sepamos hacerlo debe ser��n logn��

Como podemos ver una reducci�on es una herramienta muy poderosa que nospermite demostrar propiedades de algunos problemas aun cuando no sabemoscomo resolverlos�

���� Fundamentos

Qu�e es un problema Un problema es una pregunta gen�erica con paramet�ros para los datos de entrada y condiciones que establecen como debe ser unasoluci�on satisfactoria a dicho problema�

Instancia de un problema Una instancia de un problema es un problemaaplicado a un cierto conjunto de par�ametros�

Problemas de decisi�on Un problema de decisi�on es un problema para el cuallas respuestas posibles son Si o No�

���

Page 190: PPP - Algoritmos

������ El problema del viajante

Problema gen�erico

Dado un grafo pesado G � �E� V �� encontrar un camino de distancia m�inimaque partiendo de un v�ertice dado visite todos los demas v�ertices una sola vezy que pase una sola vez por cada arista y luego regrese al origen sin formarsub tours�

min

n��Xi��

d�vi� vi � �� � d�vn� v��

Una instancia del problema

d��������� d������� d�������� d�������� d�������� d�������

Soluci�on

fv�� v�� v�� v�g

Costo����

Problema de decisi�on

Dado un grafo G � �E� V � y un entero k� indicar si existe una soluci�on alproblema del viajante tal que el costo sea � k�

���

Page 191: PPP - Algoritmos

Usando b�usqueda binaria y el problema de decisi�on del viajante podemosencontrar la soluci�on �optima al problema gen�erico del viajante�

Muy importante A partir de ahora vamos a concentrarnos en prob lemas de decisi�on� el problema gen�erico puede resolverse en general entiempo polin�omico si es posible resolver el problema de decisi�on entiempo polin�omico�

���� Complejidad

Necesitamos alguna forma de diferenciar aquellos problemas que se pueden re solver de aquellos que no debido a que no existe un algoritmo e�ciente parasolucionarlos� Esta distinci�on la vamos a hacer considerando aquellos problemasque se pueden resolver en tiempo polin�omico�

Hemos medido el costo en tiempo de un algoritmo expresando el orden delmismo en funci�on del tamanio de los datos de entrada n� Un algoritmo es deorden polin�omico si su orden es O�nk�� donde k es constante y no depende den� Un problema es solucionable en tiempo polin�omico si existe un algoritmo deorden polin�omico que resuelve el problema�

Algunas funciones no parecen polin�omicas pero lo son� por ejemplo O�n logn�no parece un polinomio pero esta acotada superiormente por O�n�� y por lotanto puede considerarse polin�omica�

������ La clase P de problemas

La clase P de problemas esta integrada por todos los problemas que son solu�cionables mediante un algoritmo de orden polin�omico�

������ La �eclase NP de problemas

Algunos problemas no se pueden resolver en tiempo polin�omico pero dadauna soluci�on candidata es factible veri�car si la soluci�on es �optima en tiempopolin�omico� Estos problemas forman la clase NP de problemas�

Ejemplo Un ejemplo de problema NP es el problema del ciclo Hamiltonianono dirigido� Dado un grafo G � �E� V � no dirigido encontrar un ciclo que visitecada v�ertice de G exactamente una vez�

�A veces una funci�on de la forma nm es ambigua pues no se sabe si es exponencial opolin�omica dependiendo de que var�ia en funci�on de que� Una notaci�on que permite resolvereste problema es �n�nm �polin�omica� o �m�nm �exponencial� donde � indica cual es el factorque var�ia�

���

Page 192: PPP - Algoritmos

Un aspecto interesante de este problema es que si el grafo tiene un ciclohamiltoniano es f�acil veri�carlo� Por ejemplo dado el ciclo hv�� v�� v�� � � � � v��i�Podemos inspeccionar el grafo y veri�car que sea un ciclo y que ademas visitetodos los v�ertices exactamente una vez� Por lo tanto aunque no sepamos comoresolver el problema del ciclo Hamiltoniano si disponemos de un metodo e�cientepara veri�car una posible soluci�on del problema� La soluci�on se denomina cer�ti�cado� Los problemas de tipo NP son veri�cables en tiempo polin�omico� porlo tanto el problema del ciclo Hamiltoniano pertenece a la clase NP �

Observaciones En primer lugar es evidente que P � NP ya que si un prob lema es solucionable en tiempo polin�omico entonces tambien es veri�cable entiempo polin�omico� Lo que no se sabe es si P � NP � parece poco sensato pensarque las clases son iguales� es decir que poder veri�car un problema en tiempopolin�omico no necesariamente implica poder solucionarlo en tiempo polin�omico�es aceptado que P � NP pero nadie ha podido demostrarlo hasta ahora� estees uno de los puntos abiertos mas importantes en el mundo de la computaci�on�

P ��NP

������ La clase de problemas NP�Completos

Los problemas NP � Completos son los problemas mas dif�iciles que vamos aenfrentar en este curso� existen sin embargo problemas aun mas dif�iciles que losproblemas NPC que se denominan problemas NP �Hard�

���

Page 193: PPP - Algoritmos

Es v�alido decir que NPC � NP es decir que los problemas NP Completos sepueden veri�car en tiempo polin�omico�

Los problemas NP Completos son problemas NP que cumplen la propiedadde que si existiera una soluci�on polin�omica a uno de ellos entonces todos losdem�as ser�ian solucionables en tiempo polin�omico�

������ La clase de problemas No�NP

Los problemas No � NP son problemas que ni siquiera pueden veri�carse entiempo polin�omico� Por ejemplo Cuantos tours de longitud menor o igual queK existen en un grafo G en el problema del viajante� Dado que hay un n�umeroexponencial de tours no podemos contarlos por lo que no podr�iamos veri�car lasoluci�on en tiempo polin�omico� Este es un problema que no petenece a la claseNP� En general este tipo de problemas no son de mucha utilidad�

Una historia En ���� T�E�Bell y otros matem�aaticos tenian como gran in terrogante si el n�umero � � � � era o no primo� En la reunion de la sociedadmatem�atica americana en Nueva York F�Cole present�o un paper con el modestot�itulo �Sobre la factorizaci�on de n�umeros muy grandes��

Cuando le lleg�o el turno de exponer su trabajo F�Cole que siempre fue unapersona muy callada camin�o hacia el frente y con sumo cuidado procedi�o acalcular � �� luego le rest�o uno� Se movi�o hacia el otro extremo del pizarr�ony escribi�o ���������x����������� y usando el m�etodo que todos aprendimosen la primaria hizo la cuenta� los dos n�umeros coincidieron sin decir una solapalabra volvi�o a su asiento�

Por primera y unica vez la sociedad matem�atica americana aplaudi�o ex tensamente al autor de un paper sin siquiera leerlo� A Cole se le hizo una solapregunta cuanto tiempo le hab�ia llevado la factorizaci�on del n�umero a lo cualrespondi�o ��� domingos��

���

Page 194: PPP - Algoritmos

Como puede verse hay problemas que son extremadamente simples de veri �car pero muy di�ciles de resolver� �

���� Reducciones

Las reducciones son �utiles para probar que un problema no puede resolverseen tiempo polin�omico� Supongamos que queremos probar que el problema Bno puede resolverse en tiempo polin�omico y que disponemos de un problema Aque sabemos que no se puede resover en tiempo polin�omico� Si suponemos quehay una soluci�on polin�omica para B y mediante una reducci�on podemos llegara que con esa soluci�on podemos resolver A en tiempo polin�omico llegar�iamos auna contradiccion y entonces podriamos a�rmar que B no puede resolverse entiempo polin�omico�

La clave para demostrar que un problema B no puede resolverse en ordenpolin�omico esta en poder reducir B a un problema A del cual sabemos no existeuna soluci�on polin�omica�

������ Ejemplo I

Es un hecho que el problema del ciclo Hamiltoniano en un grafo no dirigidoes Np Completo� Es decir que no se conoce algoritmo que pueda resolverloen tiempo polin�omico y los expertos ampliamente est�an convencidos de que talalgoritmo no puede eixstir�

Tratemos de ver que ocurre con el problema de encontrar un ciclo Hamilto niano en un grafo dirigido� Luego de pensar durante mucho tiempo podemosllegar a la sospecha de que no existe un algoritmo polin�omico para este problema�entonces podemos tratar de demostralo aplicando una reducci�on�

Dado un grafo no dirigido G � �E� V � creamos un grafo dirigido G� reem plazando cada arista del grafo no dirigido por un par de aristas en el grafodirigido de forma tal que la arista no dirigida �u� v� se convierte en las aristasdirigidas �u� v�y�v� u�� Ahora cada camino simple en G es tambien un caminosimple en G� y viceversa� Por lo tanto G tiene un ciclo Hamiltoniano solo siG� tambien lo tiene� Si pudi�eramos resolver el problema del ciclo hamiltonianoen G� podr�iamos resolver el problema del ciclo Hamiltoniano en G ya que uncamino en G� es tambien un camino v�alido en G� Por lo tanto el problema delciclo Hamiltoniano dirigido tambi�en es NP Completo�

�Curiosamente no se ha podido demostrar que la factorizaci�on sea un problema NP�Completo� la clasi caci�on de este problema es uno de los misterios que aun no se han re�suelto y del cual curiosamente depende la seguridad de varios organismos ya que las funcionescriptogr�a cas suelen estar basadas en la factorizaci�on de n�umeros�

���

Page 195: PPP - Algoritmos

Notemos que no hemos resuelto ninguno de los dos problemas� solo mostramoscomo podemos convertir la soluci�on de un problema P� en una soluci�on v�alidapara otro problema P�� A esto se lo denomina reducir P� a P��

������ Ejemplo II�

Consideremos los siguientes problemas�

El problema de los � colores ��COL� Dado un grafo G determinar si cadauno de sus v�ertices puede ser pintado con uno de � �tres� colores distintos deforma tal que dos v�ertices adyacentes no esten pintados del mismo color�

Cubrimiento con un Clique �CC� Dado un grafo G y un entero k determ inar si los v�ertices de G pueden ser particionados en subconjuntos V �� V �� � � � � V kde forma tal que �iV i � V y que cada Vi es un clique�

Recordemos que un clique es un subconjunto de v�ertices de forma tal que cadapar de v�ertices del subconjunto son adyacentes entre si�

��COL� es un problema NP Completo conocido� veamos si usando este prob lema podemos probar que �CC� tambien es NP Completo�

Demostraci�on Tenemos que probar dos cosas� en primer lugar debemos probarque �CC� pertenece a NP� esto es sencillo ya que dados k conjuntos veri�car quela union de los mismos forme el grafo y que cada uno de ellos es un clique puedehacerse en tiempo polin�omico�

En segundo lugar debemos probar que un problema NP Completo conocidoes reducible en forma polin�omica a �CC�� En nuestro caso el problema elegidova a ser ��COL��

Asumimos que existe una subrutina CliqueCover�G�k� polin�omica que determ ina si un grafo tiene un cubrimiento clique de tamanio k� Necesitamos poderusar esta rutina para resolver ��COL��

���

Page 196: PPP - Algoritmos

Veamos en que aspectos estos problemas son similares� Ambos problemasdividen los v�ertices en grupos� en �CC� para que dos v�ertices est�en en un grupodeben ser adyacentes� En ��COL� para que dos v�ertices est�en en el mismo grupono deben ser adyacentes� En cierta forma los problemas son similares pero lanoci�on de adyacencia est�a invertida�

Recordemos que Gc es el grafo complemento de G es decir que tiene las aristasque le faltan a G y no tiene las aristas que tenia G� Nuestra observaci�on es que Ges ��COL� si y solo si Gc tiene un cubrimiento clique con k � �� La demostraci�onno es dif�icil y queda como ejercicio�

Usando esta observaci�on podemos reducir ��COL� a �CC� de la siguientemanera� Dado un grafo G obtenemos su complemento Gc y luego invocamos aClique Cover�Gc���� Luego cada uno de los subconjuntos que devuelve Clique�Cover corresponde a un color en el grafo original y el problema ��COL� quedaresuelto�

Si podemos resolver �CC� en tiempo polin�omico entonces podr�iamos resolver��COL� en tiempo polin�omico� pero como sabemos que ��COL� es NP Completoentonces �CC� tambien es NP Completo�

Es importante notar que la reducci�on funciona siempre mostrando como lasoluci�on del problema que se sospecha NP Completo puede usarse para encontaruna soluci�on al problema que se sabe es NP Completo� Esto es importante�

��

Page 197: PPP - Algoritmos

Importante� Siempre se debe probar que el problema NP�Completose puede reducir al problema que sospechamos es NP�Completo�

Notaci�on Cuando realizamos una reducci�on utilizaremos la siguiente nota cion

X � Y

Donde X es un problema que se sabe es NP Completo� Y es el problema quequeremos probar que es NP Completo� los pasos a seguir son

�� Demostrar que Y pertenece a NP � es decir que dada una soluci�on se lapuede veri�car en tiempo polin�omico�

�� Suponer que el problema Y se puede resolver en tiempo polin�omico�

�� A partir de una instancia del problema X aplicar una transformaci�on quegenere una entrada v�alida para el problema Y

�� Demostrar que una vez solucionado Y la soluci�on permite encontrar unasoluci�on a la instancia del problema X planteada�

���� Algunos problemas NP�Completos

����� SAT

SAT �satis�ability�� es un problema bastante sencillo de plantear y sumamenteimportante para la teor�ia de los problemas NP Completos� el problema es elsiguiente dada una expresi�on l�ogica de la forma

�v�� ��v�� � � � � v�n� � �v�� � v�� � � � � v�o� � � � �� �vm� � � � � vmz�Que podemos anotar tambi�en como

�v��� v��� � � � v�n��v��� v��� � � � v�o� � � � �vm�� vm�� � � � vmz�

Encontrar valores para todas las variables booleanas vij de forma tal que laexpresi�on sea verdadera�

Ejemplo �

C � �v� ��v�� � ��v� � v��

La expresi�on es verdadera cuando v� � v� � true

Ejemplo �

C � �v� � v�� � �v� ��v�� � ��v��

Por mas que probemos y probemos no existen valores para v� y v� de forma talque la expresi�on sea verdadera�

�Esta es una palabra con traducci�on imposible� �satisfactibilidad��

���

Page 198: PPP - Algoritmos

Claramente SAT pertenece a NP� ya que dada una expresi�on y un conjuntode valores para sus variables podemos chequear en tiempo polin�omico si la ex presi�on evalua como verdadera� en la d�ecada del !�� Cook se encargo de de mostrar que SAT era un problema NP Completo� volveremos sobre esta de mostraci�on mas adelante� por ahora supongamos que SAT es NP Completo ycomo veremos a continuaci�on a partir de SAT y aplicando reducciones es sencillodemostrar que muchos otros problemas son NP Completos�

����� ��SAT �SAT � ��SAT

� SAT es una variaci�on de SAT en la cual cada �ororia� tiene exactamente trest�erminos� de la forma

�v�� � v�� � v��� � �v�� � v�� � v��� � � � �� �vn� � vn� � vn��

Claramente � SAT puede veri�carse en tiempo polin�omico y por lo tantopertenece a NP� pero al ser un problema mas restringido que SAT podr�iamospensar que � SAT no es NP Completo �tal vez sea la cantidad ilimitada det�erminos en cada ororia la fuente de la di�cultad de SAT��

Teorema� ��SAT es NP�Completo La demostraci�on se hace mediante lareducci�on SAT � �� SAT

Supongamos que existe un soluci�on polin�omica para � SAT� y tomemos unproblema gen�erico SAT� donde la i�esima cl�ausula de la expresi�on tiene exacta mente k literales�

�vi�� vi�� � � � vik�

El objetivo es transformar cada cl�ausula de SAT en un conjunto de cl�ausulas de� SAT de forma tal que si todas las variables de una cl�ausula de SAT son falsasno exista forma de lograr que las cl�ausulas de � SAT sean verdaderas� De estaforma lograr�iamos que ambos problemas fuesen equivalentes ya que una soluci�onv�alida de � SAT implicar�ia una soluci�on v�alida de SAT�

� Si k � � entonces Ci � �z��� creamos dos nuevas variables v�� v� y tresnuevas cl�ausulas

�v�� v�� z���v���v�� z����v�� v�� z���v�� v�� z��

Observemos que para que las cuatro cl�ausulas sean verdaderas z debe serverdadero� Si z� es falso entonces alguna de las cl�ausulas seguro que esfalsa�

� Si k � � Ci � �z�� z�� creamos una nueva variable v� y dos nuevascl�ausulas

�v�� z�� z����v�� z�� z��

Observemos que si z� es falso no hay forma de asignar v� y v� para quela expresi�on sea verdadera�

���

Page 199: PPP - Algoritmos

� Si k � � Ci � �z�� z�� z�� no realizamos ninguna modi�caci�on

� Si k � � Ci � �z�� z�� � � � � zn� creamos una cadena de la forma

�v�� z�� v���v�� z���v���v�� z���v��� � � � �v�� zn� ���v����v�� zn��v��

De esta forma si todas las variables son falsas no hay forma de que laexpresi�on de verdadero� pero si una sola de ellas es verdadero entonces esposible asegurar que todas las demas sean verdadero� Esto puede resultardif�icil de ver en forma inmediata pero vale la pena dedicar un tiempito aobservarlo�

Una vez aplicada esta transformaci�on si podemos resolver el problema � SATentonces tambi�en resolvimos el problema SAT ya que ambos problemas sonequivalentes� como SAT es un problema NP Completo conocido resulta que � SAT debe ser entonces NP Completo�

����� Programaci�on Lineal Entera �SAT � PLE

Un problema de programaci�on lineal entera esta dado por un conjunto de vari ables que deben ser enteras y no negativas �condicion de no negatividad�� unconjunto de inecuaciones lineales que involucran a dichas variables y una funci�ontambi�en lineal que se debe maximizar o minimizar�

Ejemplo

x� � x� �

x�� x� � x�

f�x� � x� � �x�� �x��Max�

La conversi�on a un problema de decisi�on se hace �jando una constante parala funci�on a optimizar� Por ejemplo

x� � �x�� �x� � ���

Teorema� Un problema de programaci�on lineal entera es NP�CompletoEn primer lugar observemos que PLE pertenece a NP ya que dado un conjuntode valores para las variables veri�car que estas satisfacen las inecuaciones resultasimple� Para demostrar que PLE es NP Completo vamos a aplicar una reducci�onusando como base el problema SAT que como sabemos es NP Completo�

���

Page 200: PPP - Algoritmos

Suponemos que existe una soluci�on polinomica a PLE� entonces dada unaexpresi�on de SAT de la forma

C � �v��� v��� � � � v�a��v��� v��� � � � � v�b� � � � �vn�� vn�� � � � � vnz�

Podemos escribir a partir de la expresi�on un problema de programaci�on linealde la forma

vij � �

v�� � v�� � � � �� v�a � �

v�� � v�� � � � �� v�b � �

etc

La funci�on a maximizar o minimizar no tiene importancia� vale por ejemplomaximizar o minimizar cualquiera de las variables� Observemos que si resolve mos el problema de PLE los valores que quedan asignados a las variables satis facen la expresion SAT� ya que cada inecuaci�on se cumple si y solo si al menosuna de las variables de PLE es mayor que cero lo cual implica que al menosuna de las variables de la cl�ausula de SAT es verdadera� Como deben cumplirsetodas las inecuaciones tenemos que deben cumplirse todas las cl�ausulas de SAT�Por lo tanto todo problema de PLE es NP Completo�

Precauci�on Aquellos que esten familiarizados con la programaci�on lineal en tera podr�ian deducir en este momento que aquellos problemas que se puedenexpresar como un problema de PLE son NP Completos� esto no es cierto y es unmal uso del mecanismo de reducciones� el uso de PLE para probar que un prob lema es NP Completo implicar�ia demostrar que solucionando un determinadoproblema �X� en tiempo polin�omico podemos resolver �Cualquier� problema dePLE� por lo tanto �X� debe ser NP Completo� Hay problemas �much�isimos�que se pueden resolver en tiempo polin�omico y tambi�en pueden escribirse comoun problema de PLE �obviamente usar PLE para estos problemas es ine�cientepero no imposible��

����� Vertex Cover ���SAT � VC

Dado un grafo no dirigido G � �V�E� indicar si existe un conjunto de a lo sumok v�ertices de forma tal que cada arista del grafo parte o va hacia uno de losv�ertices del conjunto� En la �gura podemos ver un ejemplo�

���

Page 201: PPP - Algoritmos

Teorema� VC es NP�Completo En primer lugar VC es NP ya que dadauna posible soluci�on podemos veri�car que toda arista del grafo involucre aalgun v�ertice del conjunto en forma sencilla en tiempo polin�omico� Para de mostrar que es NP Completo vamos a aplicar una reducci�on a partir de � SATque ya demostramos es NP Completo� Suponemos pues que existe una soluci�onpolinomica para VC�

Para convertir una instancia de � SAT en un problema de VC partimos deun problema � SAT con N variables y C cl�ausulas y construimos un grafo con�N ��C v�ertices�Para cada variable creamos dos v�ertices unidos por una arista�

Para cubrir las aristas por lo menos n v�ertices deben pertenecer al conjunto�uno por cada par� Para cada cl�ausula creamos tres nuevos v�ertices� uno porcada literal en cada cl�ausula y los conectamos en un tri�angulo�

Por lo menos dos v�ertices por tri�angulo deben pertenecer al conjunto paracubrir las aristas que son lados del tri�angulo lo cual implica �C v�ertices�

���

Page 202: PPP - Algoritmos

Finalmente conectamos cada literal en la estructura plana a los v�ertices de lostri�angulos que tienen el mismo literal�

Aseguramos que el grafo resultante tiene una soluci�on a VC de tamanio N��Csi y solo si la expresion � SAT puede evaluarse como verdadera� De nuestroan�alisis anterior al construir el grafo toda soluci�on a VC debe tener al menosN��C v�ertices�

Requerir�ia un an�alisis mas riguroso pero si nos tomamos algunos minutosanalizando la transformaci�on que hicimos de � SAT se nos permite asegurar quesi encontramos una soluci�on para VC en el grafo construido a partir de dichasoluci�on encontramos una soluci�on a � SAT� Por lo tanto VC es NP Completo�

Esta reducci�on fue bastante ingeniosa� como podemos ver hay que tener uncriterio muy amplio y gran imaginaci�on para encontrar la reducci�on apropiadapara demostrar que un problema es NP Completo�

���

Page 203: PPP - Algoritmos

���� Conjunto Independiante �VC � IS

El problema del conjunto independiente consiste en encontrar un conjunto dev�ertices �de tamanio k� de un grafo de forma tal que ninguna arista del grafoconecte dos v�ertices de dicho conjunto�

La reducci�on es muy sencilla ya que si calculamos el VC de un grafo losv�ertices restantes �los que no pertenecen a VC� forman un conjunto independi ente ya que si existiera una arista entre dos de estos v�ertices los restantes nopodr�ian cubrir todas las aristas y no ser�ian un VC�

Por lo tanto VC e IS son problemas equivalentes y como VC es NP CompletoIS tambien debe serlo�

����� Clique �IS � Clique

El problema del Clique consiste en encontra un subconjunto de K v�ertices deun grafo de forma tal que dicho subconjunto de v�ertices posee todas las aristasposibles �es fuertemente conexo��

���

Page 204: PPP - Algoritmos

La ilustraci�on muestra un grafo con un clique de tamanio � Probar que elproblema del clique es Np Completo es sencillo ya que si calculamos el con junto independiente de tamanio x en un grafo de v v�ertices resulta que el grafocomplemento del anterior tiene un clique de tamanio v�x� Por lo tanto el prob lema del clique es equivalente al problema del conjunto independientey debe serNP Completo�

����� Partici�on Entera �VC � IP

Dado un conjunto de enteros S y un entero T determinar si existe un subconjuntode S cuya suma es exactamente igual a T �

Ejemplo S � f�� �� ��� ��� ��� ���������� ��������������g y T � ����

���

Page 205: PPP - Algoritmos

Respuesta � � �� � �� � �� � ���� � ���� � ���� � T �

Teorema� IP es Np�Completo Esta reducci�on a partir de VC es bastanteextensa y por eso no la incluimos en el apunte� si alguien la necesita esta dispon ible �

��� T�ecnicas pa�era demostrar que un problemaes NP�Completo

������ Restricci�on

Mostrar que un caso en particular del problema en cuesti�on es NP Completo�Por ejemplo encontrar un camino de longitud k en un grafo es Np Completo yaque el problema del camino Hamiltoniano es un caso particular �k�cantidad dev�ertices�� por lo tanto el problema es Np Completo�

������ Reemplazo local

Realizar cambios locales a la estructura del problema� Un ejemplo de esta tecnicaes la que utilizamos en �SAT � � SAT��

������ Recomendaciones

� Al realizar una reducci�on X � Y buscar que X sea tan simple �restringido�como sea posible�

Nunca usar el problema del viajante gen�erico como problema fuente� ensu lugar usar el problema del ciclo hamiltoniano donde todos los pesosson � o o mejor aun usar el problema del camino hamiltoniano� o aunmejor todav�ia usar el problema del camino hamiltoniano en grafos planaresdirigidos donde cada v�ertice tiene grado �� etc� Todos estos problemas sonNP Completos y pueden usarse para hacer una reducci�on� entre problemasequivalentes elegir siempre al mas restringido� de esta forma la reducci�onser�a menos trabajosa�

� Hacer que el problema destino Y en X � Y sea lo mas gen�erico posible�cuanto mas dif�icil mas f�acil probar que es NP Completo��

� Seleccionar el problema fuente correcto� Elegir el problema NP Completoconocido para hacer la reducci�on es sumamente importante y es la causafundamental de problemas en demostrar que un problema es NP Completo�en general lo mas recomendable es contar con una base de problemas NP Completos quese conocen en gran profundidad �se conocen los problemasy sus variantes y el grado de di�cultad de las mismas�� Una buena basepodria formarse con los siguientes problemas

���

Page 206: PPP - Algoritmos

� � SAT� Cuando no parece encontarse ning�un problema apropiadopara aplicar una reducci�on es recomendable volver al problema origen�

� Partici�on Entera� La unica opci�on para problemas cuya di�cultadparece residir en la necesidad de usar n�umeros grandes�

� VC� Para problemas sobre grafos cuya di�cultad reside en la selec�cion de un conjunto de v�ertices o aristas�

� Camino Hamiltoniano�Para problemas de grafos cuya di�cultad resideen establecer un ordenamiento de v�ertices o aristas� Si se trata deproblemas de ruteo o scheduling este suele ser el mejor problemafuente�

��� Teor�ia formal del los problemas NP�Completos

La teor�ia de los problemas Np Completos esta basada en los lenguajes formalesy las m�aquinas de Turing� por lo que debemos trabajar en un nivel mas abstractodel habitual�

Para un alfabeto de simbolos �� ��� podemos formar un conjunto in�nitode strings o palabras ������� ���������� ��� etc�� Un subconjunto de todos losstrings posibles de un alfabeto es un lenguaje formal�

La teor�ia de los lenguajes formales se encarga de estudiar cuan poderosadebe ser una maquina para reconocer si un string pertenece a un lenguaje enparticular�

Por ejemplo podemos testear si un string es la representaci�on binaria de unn�umero par� esto se puede hacer con un aut�omata simple�

Observemos que los problemas de decisi�on pueden ser pensado como un prob lema de reconocimiento de un lenguaje formal� Las instancias de los problemasson codi�cadas como strings y los strings son incluidos en el lenguaje solamentesi la respuesta al problema es �Si��

��

Page 207: PPP - Algoritmos

Para reconocer estos lenguajes es necesaria una m�aquina de Turing� Cualquieralgoritmo que resuelva el problema es quivalente a la maquina de turing quereconoce si un determinado string pertenece a un lenguaje� Esto nos va a servirpara establecer un marco formal que nos permita precisar que queremos decircuando a�rmamos que un problema no puede o si puede ser resuelto en tiempopolin�omico�

������ M�aquinas de Turing No�Determin�isticas

Supongamos que extendemos la maquina de Turing agreg�andole un �m�oduloadivinador� que en tiempo polin�omico construye una posible soluci�on a un de terminado problema� Para convencernos de que realmente es una soluci�on po demos correr otro programa que lo veri�que� A esta m�aquina extendida lallamamos m�aquina de Turing No Determin�istica�

Por ejemplo para el problema del viajante el m�odulo adivinador genera unapermutaci�on de los v�ertices y luego podemos veri�car que formen un camino yque la suma de los pesos sea menor que k�

La clase de lenguajes que podemos reconocer en tiempo polin�omico en funci�ondel tamanio del string en una m�aquina de turing determin�istica �sin moduloadivinador� se denomina �P��

La clase de lenguajes que podemos reconocer en tiempo polin�omico en funci�onde la longitud del string en una maquina de Turing no determin�istica se denomina�NP��

Es claro que P NP ya que cualquier programa que corra en una m�aquinade Turing determin�istica puede correr en una m�aquina no determin�istica sim plemente ignorando al modulo adivinador�

Un problema que pertenece a NP para el cual un algoritmo polin�omico im plicar�ia que todos los lenguajes de NP pertenecen a P se denomina NP �Completo�

������ El teorema de Cook

Teorema� SAT es NP Completo� Esta demostraci�on que afortunadamenteno vamos a incluir fue realizada por Cook en la d�ecada del !�� bas�andose enreducir a todas las m�aquinas de Turing a SAT� sabiendo la de�nici�on de unlenguaje NPC� Cook demostr�o que si existiera una soluci�on polin�omica paraSAT entonces ser�ia posible veri�car en una ma�aquina de Turing determin�isticaun lenguaje NPC� como sabemos que tal cosa no es cierta se demuestra que SATes NP Completo� La demostraci�on es de suma importancia ya que a partir de

���

Page 208: PPP - Algoritmos

SAT y aplicando reducciones se ha demostrado que cientos de problemas sonNP Completos�

���� Resumen y puntos clave

Hemos introducido la noci�on de complejidad de un problema de�niendo las clasesP � NP y NPC de problemas� Observamos que para algunos problemas queparecen demasiado dif�iciles a veces lo �unico que podemos hacer es demostrar queson NP Completos� Una reducci�on es una herramienta que permite demostrarque un problema es NP Completo� Por �ultimo se vio en forma muy elementalla base de la teor�ia de complejidad que se basa en la teor�ia de los lenguajesformales y la m�aquina de Turing�

���� Ejercicios

�� Dado un vector de � elementos escribir un problema de PLE que ordene elvector �que devuelva en variables enteras I�� I�� I� la posici�on del elementode cada vector� Por ejemplo si V � ��� �� � deber�ia obtenerse I� � �� I� ��� I� � �

�� Realizar las siguientes reducciones�

�a� HC � TSP �HC�Ciclo hamiltoniano� TSP�Problema del viajante��

�b� TSP � PLE

Aquellos que est�en interesados en este tema deben leer este libro

Computers and Intractibility�

A guide to the theory of NP�completeness

Michael R� Garey and David S� Johnson

W� H� Freeman ����

���

Page 209: PPP - Algoritmos

Chapter ��

��� Sorting Networks

���� Sort utilizando varios procesadores

Los m�etodos de sort han sido estudiados con mucho detenimiento por aquellosque se dedican al an�alisis y disenio de algoritmos� los m�etodos de sort masestudiados entre los cuales incluimos al burbujeo� selecci�on� inserci�on� quicksort�heapsort y mergesort entre otros se basan en la suposici�on de que se trabajacon un solo procesador y realizando comparaciones para ordenar� Como fuedemostrado oportunamente este tipo de algoritmos tiene una cota inferior dadapor ��n logn� que se deriva de la necesidad de realizar una cierta cantidad decomparaciones para poder determinar el ordenamiento de cualquier secuencia�

Otros m�etodos de sort que se estudiaron no funcionan en base a compara ciones y permiten realizar el proceso de sort en tiempo lineal� estos m�etodos sinembargo no pueden aplicarse al ordenamiento de cualquier tipo de datos y estanrestringidos a ordenar enteros chicos� fechas� etc� Counting sort� Radix Sort yBucket Sort son los algoritmos mas conocidos de este tipo�

El avance de la tecnolog�ia en los ultimos anios ha causado que las m�aquinasque solo disponen de un procesador estan lentamente desapareciendo dejandosu lugar a arquitecturas mas modernas basadas en al menos dos procesadoresy en muchos casos una cantidad mucho mayor �computadoras con mas de milprocesadores han sido ya construidas en estos d�ias��

Al disponer de mas de un procesador es posible para un m�etodo de sortrealizar mas de una comparaci�on a la vez� de hecho se pueden realizar tantascomparaciones paralelas como procesadores est�en disponibles� Para aprovecharesta caracter�istica se deben diseniar nuevos algoritmos de sort que permitanrealizando una cierta cantidad de comparaciones paralelas ordenar una secuenciaen forma e�ciente� El algoritmoque permite esto se basa en una Sorting Network

���

Page 210: PPP - Algoritmos

o Red de Ordenamiento y permite ordenar cualquier conjunto de datos en tiemposub lineal�

���� Sorting Networks

Una Red de Ordenamiento es una red que se construye a partir de un dispositivob�asico denominado comparador �comparator�� Un comparador es un dispositivoque tiene dos entradas e�� e� y dos salidas s�� s� y que al ingresarse dos n�umeroscualesquiera en las entradas genera una salida en la cual s� es el menor de losdos n�umeros ingresados y s� es el mayor de los n�umeros ingresados�

La �gura muestra un comparador� una red de ordenamiento para un secuenciade longitud n esta formada por n conectores o cables sobre los cuales se disponenlos comparadores�

La �gura muestra una red de ordenamiento que permite ordenar una secuenciade cuatro elementos utilizando comparadores�Por ejemplo si la secuencia aordenar fuera h�� �� �� �i la red realizar�ia lo siguiente�

�� ������ �inicial�

�� ������ �primer comparador�

� ������ �segundo comparador�

�� ������ �tercer comparador�

�� ������ �cuarto comparador�

�� ������ �quinto comparador�

� ������ �final�

���

Page 211: PPP - Algoritmos

Paralelismo Si estuvi�eramos trabajando en una m�aquina de un solo pro cesador el procedimiento realizaba comparaciones �una por comparador�� sinembargo usando varios procesadores podemos realizar mas de una comparaci�onal mismo tiempo� a los efectos te�oricos vamos a suponer que podemos realizarun n�umero ilimitado de comparaciones al mismo tiempo�

Si observamos la red de ordenamiento vamos a ver que los comparadores �y � se pueden activar al mismo tiempo� luego los comparadores � y � se activana la vez y por ultimo el comparador � por lo que la secuencia con paralelismoes

�� ������ �inicial�

�� ������ �primer y segundo comparadores�

� ������ �tercer y cuarto comparadores�

�� ������ �quinto comparador�

�� ������ �resultado final�

Debemos de�nir cuando dos comparadores se pueden activar en paralelo

N comparadores pueden activarse en paralelo si y solo si no tienen conectoresen com�un y ademas los �N conectores involucrados no tienen comparadoresprevios sin activarse�

De acuerdo a esto los comparadores � y � de nuestro ejemplo no puedenactivarse a la vez pues tienen al conector � en comun�

������ Principio de paralelismo

En cada instante se activa la cantidad m�axima de comparadores que puedenactivarse

������ An�alisis de redes de ordenamiento

La e�ciencia de una red de ordenamiento se mide de acuerdo a su profundidad�La profundidad de un conector esta dada por la cantidad de comparadores queinciden sobre el� La profundidad de la red es el m�aximo entre las profundidadesde sus conectores�

En nuestro ejemplo tenemos

Conector � � Profundidad �

Conector � � Profundidad

Conector � Profundidad

Conector � � Profundidad �

Profundidad de la red �

���

Page 212: PPP - Algoritmos

La e�ciencia de la red es inversamente proporcional a su profundidad�

������ Ejemplo I

La siguiente red que ordena una secuencia de ocho elementos esta basada en elm�etodo insert sort�

Como puede verse la profundidad de la red es ��

������ Ejemplo II

Esta es otra red para ordenar cuatro elementos en la cual todos los conectorestienen profundidad ��

���

Page 213: PPP - Algoritmos

���� El principio del ���

Teorema� Si una red de ordenamiento ordena una secuencia hs�� s�� � � � snientonces dada una funci�on mon�otona y creciente f la red tambien ordena

hf�s��� f�s��� � � � � f�sn�i

Esto puede demostrarse en forma bastante simple aplicando inducci�on aquino lo hacemos para economizar tiempo y espacio�

Teorema del ���� Si una red de ordenamiento ordena todas las secuenciasposibles de n elementos donde cada elemento de la secuencia es � o �� entoncesla red ordena cualquier conjunto de elementos�

Demostraci�on� Supongamos que la red ordena a cualquier secuencia bin aria de n elementos pero que sin embargo no es capaz de ordenar la secuenciaha�� a�� � � � � ani� Entonces podemos decir que para un cierto i y un cierto j coni � j la red ubica a aj antes que a ai en el resultado �nal� De�namos la siguientefunci�on

f�x� � f � si x � ai� si x � ai

Como la red ubica a aj antes que a ai al recibir ha�� a�� � � � � ani entonces por elteorema anterior como f�x� es mon�otona y creciente ubica a f�aj� antes que af�ai�� Como f�aj� � � y f�ai� � � resulta que la red ubica un � antes que un� lo cual es una contradicci�on porque supusimos que la red ordenaba cualquiersecuencia binaria� Lo cual demuestra el teorema�

Este teorema es �util pues permite construir una red de ordenamiento bas�andoseen secuencias binarias conociendo que si se ordenan todas las posibles secuenciasbinarias se puede ordenar cualquier secuencia gen�erica�

���� Construcci�on de una red de ordenamiento

En esta secci�on vamos a mostrar como construir una red de ordenamiento de or den sub lineal que sirve para ordenar cualquier conjunto de elementos� Las redesde ordenamiento fueron introducidas por primera vez en ��� por Armstrong�Nelson y O"Connor� El m�etodo que aqui describimos que es el mas e�ciente fueintroducido por Batcher en �����

������ Secuencias Bit�onicas

Una secuencia es bit�onica si y solo si cumple alguno de estos requisitos

���

Page 214: PPP - Algoritmos

�� Puede generarse concatenando dos secuencias s� y s� siendo s� monotonay creciente y s� monotona y decreciente�

�� Puede generarse concatenando dos secuencias s� y s� siendo s� monotonay decreciente y s� monotona y creciente�

�� La secuencia esta formada por n elementos iguales� en cuyo caso se ladenomina secuencia bit�onica pura�

Ejemplos

h�� � �� ��������i

h��� ��� ��� �������ih�� �� �� �� �� �����i

Secuencias bit�onicas binarias Las secuencias bit�onicas binarias pueden re sponder a las siguientes formas

h�� �� �� �� ���� �i

h�� �� �� �� �� �����ih�� �� �� �� �� �����i

������ Bitonic�Sorter

El primer paso para construir la red de ordenamiento es construir una red quepermita ordenar una secuencia bit�onica� para ello utilizamos un dispositivo quese denomina Bitonic Sorter� Un Bitonic Sorter de � elementos es un comparadorsimple� para mas de dos elementos se recurre a la ayuda de un dispositivo de nominado Half Cleaner�

Half�Cleaner

���

Page 215: PPP - Algoritmos

Un Half Cleaner recibe una secuencia bit�onica de longitud N y genera dossecuencias bit�onicas de longitud n��� en donde una es una secuencia bit�onica yla otra es una secuencia bit�onica pura �de aqui el nombre de Half Cleaner�� LosHalf Cleaner tienen profundidad ��

Un Bitonic Sorter se construye en forma recursiva utilizando un Half Cleaner yluego aplicando Bitonic Sort a las dos secuencias generadas por el Half Cleaner�

La �gura muestra un Bitonic Sorter para ocho elementos� esta compuestopor un Half Cleaner de � elementos y luego � Bitonic Sorters de � elementos�uno arriba y otro abajo�� cada uno de estos tiene a su vez un Half Cleaner de �elementos y Bitonic Sorters de � elementos los cuales son comparadores simples�

An�alisis

La profundidad de un Bitonic Sorter esta dado por la clasica recurrencia T �n� ��T �N��� � � �porque un Half Cleaner tiene profundidad �� y por lo tanto esO�logn��

������ Merger

Otro dispositivo necesario para construir la red de ordenamiento es la con struccion de un Merger� observemos que dadas dos secuencias ordenadas si ala primera le concatenamos la reversa de la segunda obtenemos una secuenciabit�onica� por ejemplo

s� � h�� � ��� ��� ��is� � h�� �� �� �����is��� � h��� ��� �� ���i

s��s��� � h�� � ��� ��������� ��� �����i

���

Page 216: PPP - Algoritmos

Para proceder al merge utilizamos un dispositivo que dadas dos secuencias ya or denadas construye dos secuencias bit�onicas� El dispositivo tiene como propiedadque la primera secuencia tiene siempre elementos menores a la segunda y es

Como puede verse este dispositivo tiene profundidad ��

Por lo anto si tomamos dos secuencias ordenadas y les aplicamos este dispos itivo y a los resultados les aplicamos Bitonic Sorter lo que obtenemos es unasola secuencia ordenada� es decir el merge de ambas�

An�alisis

El analisis del Merger es id�entico al del Bitonic Sorter por lo que su profundidades O�logn�

��

Page 217: PPP - Algoritmos

������ Sorting Network

Una vez construido un merger es sencillo construir un sort utilizando una suertede merge sort invertido� empezamos por hacer un N�� merges de � elementoscada uno� luego hacemos N�� merges de � elementos cada uno y asi sucesiva mente hasta obtener la secuencia ordenada� el dispositivo es de la forma

Por ejemplo para � elementos la red de ordenamiento que se construye es

An�alisis

La profundidad de la red de ordenamiento esta dada por la recurrencia�

T �n� � T �n��� � logn

Y su solucion es O�log� n�� siendo esta una funci�on de orden sub lineal�

���

Page 218: PPP - Algoritmos

���� Resumen y puntos clave

Como vemos la construcci�on de una red de ordenamiento es sencilla e intuitiva apartir de un conjunto de dispositivos muy simples� las redes de ordenamiento sonsumamente e�cientes cuando se dispone de varios procesadores ya que permitenaprovechar el paralelismo de los mismos para construir un algoritmo de sortgen�erico de tiempo sub lineal�

��� Ejercicios

�� Indicar cuantos comparadores son necesarios para una Sorting Network den elementos

�� Probar que la profundiad de una red de ordenamiento es exactamente�logn��logn� ����

���

Page 219: PPP - Algoritmos

Chapter ��

Aproximaci�on y Heur�isticas

���� Introducci�on

Como se vio en el cap�itulo sobre complejidad existen numerosos problemas deoptimizaci�on que no pueden resolverse en tiempo polin�omico� Como varios deestos son problemas realmente importantes no es posible ignorarlos debido a queciertas aplicaciones necesitan que se resuelvan estos problemas� Las opcionespara enfrentar este tipo de problemas son

� Usar un algoritmo de orden exponencial Incluso en las computadorasparalelas mas avanzadas esta opci�on solo es aplicable para instancias suma mente reducidas de estos problemas� hay pocas esperanzas de que el avancede la tecnolog�ia permita resolver problemas para mas de ��� elementos me diante un algoritmo exponencial�

� Heuristicas Frecuentemente no es necesario encontrar una respuesta �optimaa un problema sino que alcanza con descartar las soluciones que son real mente muy malas� En estos casos existen algoritmos heur�isticos basadosen estrategias muy f�aciles de computar pero que no necesariamente llevana una solucion �optima�

Una regla heur�istica es una regla que establece como tomar una de cisi�on a partir de un conocimiento intuitivo del problema a resolver�

� Inteligencia Arti�cial Hay varias t�ecnicas poderosas para resolver prob lemas de optimizaci�on combinatorios desarrollados en el campo de la inteli gencia arti�cial� Algunas de las t�ecnicas mas populares involucran algorit mos gen�eeticos� redes neuronales� b�usquedas de tipo A� y variaciones delaprogramaci�on lineal� El rendimiento de estos m�etodos depende sensible mente del problema al cual se apliquen� A menudo estos m�etodos obtienensoluciones muy buenas�

���

Page 220: PPP - Algoritmos

� Algoritmos de aproximaci�on Son algoritmos de orden estrictamente polin�omicoque calculan una soluci�on con un cierto margen de tolerancia con respectode la soluci�on �optima� son muy necesarios cuando es necesario garantizarla calidad de la soluci�on� Pueden ser vistos como heur�isticas que tienenuna cierta performance calculable�

���� Algoritmos de aproximaci�on

Un algoritmo de aproximaci�on es aquel que permite obtener una soluci�on paraun problema que puede no ser �optima pero que no se aleja del �optimo mas allade un cierto factor conocido�

������ Tasa de aproximaci�on

Sea C�I� el costo de la soluci�on producida por un algoritmo de aproximaci�on�y sea C��I� el costo de la soluci�on �optima� Asumimos que los costos sonvalores estrictamente positivos� Para un problema de minimizaci�on queremosque C�I��C � �I� sea lo mas chico posible mientras que para un problema demaximizaci�on queremos que C��I��C�I� sea lo mas chico posible� Para un prob lema de longitud n decimos que el algoritmo alcanza una tasa de aproximaci�on�

��n� si para todo I se veri�ca que

max

�C�I�

C��I��C��I�C�I�

� ��n�

Observemos que ��n� siempre es mayor o igual que � y es igual a uno si y solosi la soluci�on aproximada es igual a la soluci�on �optima� De esta forma podemosclasi�car los algoritmos de aproximaci�on de acuerdo al valor de ��n�� muchasveces ��n� es un valor �jo que no depende de n� por ejemplo ��n� � � implica queel algoritmo siempre produce soluciones que son a lo sumo el doble de la soluci�on�optima� cuanto mas chico sea ��n� mejor ser�a la aproximaci�on� En otros casossin embargo ��n� var�ia seg�un el tamanio de n� el objetivo es entonces que ��n�crezca poco en funci�on de n� ��n� � logn podr�ia no ser malo� pero ��n� � n esdemasiado impreciso�

Adem�as de la tasa de aproximaci�on ��n� puede ser interesante calcular la tasade error del algoritmo que se calcula como

������ Tasa de error

� �jC�I� �C��I�j

C��I�

�aproximation ratio

���

Page 221: PPP - Algoritmos

������ Aproximando problemas de optimizaci�on

Los problemas de optimizaci�on presentan comportamientos diversos al intentarseuna aproximaci�on� algunos problemas pueden ser aproximados al �optimo tantocomo se desee en tiempo polin�omico �obviamente cuando la soluci�on tiendeal �optimo el tiempo tiende a in�nito�� Estos algoritmos se denominan es�quema de aproximaci�on polin�omica y presentan un tiempo de ejecuci�on del estiloO����en�� de forma tal que cuando e� el error que se comete es mas chico eltiempo se vuelve mayor� Si el tiempo solo depende de una funci�on polin�omica de��e el algoritmo se clasi�ca como esquema de aproximaci�on polin�omica completoO����e��n�� ser�ia un ejemplo de esta clase�

Otros problemas no pueden aproximarse mas alla de un cierto l�imite� porejemplo hay problemas para los cuales no hay algoritmo que supere ��n� � ���independientemente del tiempo que se disponga� En otros casos ni siquierapodemos garantizar un factor constante y en los casos mas extremos se llega ademostrar que encontrar un algoritmo de aproximaci�on con tasa de aproximaci�onconstante es en si mismo un problema NP Completo�

���� Vertex Cover �VC�

El problema �VC� es un problema NP Completo conocido que� recordemos� con site en encontrar un conjunto m�inimo de v�ertices de un grafo de forma tal quecualquier arista del grafo parte o llega a alguno de los v�ertices en el conjunto�

������ La heur�istica del dos por uno

Existe una heur�istica muy sencilla para Vertex Cover que garantiza ��n� � ��Consideremos una arista cualquiera del grafo �u� v�� uno de sus dos v�ertices debepertenecer al conjunto pero no sabemos cual de los dos� La idea de la heur�isticaes simplemente poner ambos v�ertices en el conjunto�� Luego quitamos todaslas aristas que sean incidentes a u y v �ya que ya est�an cubiertas�� Para cadav�ertice que debe estar en el conjunto ponemos dos por lo que es sencillo ver queesta estrategia genera a los sumo un conjunto del doble de tamanio del conjuntom�inimo ��optimo��

�No se puede ser mas tonto

���

Page 222: PPP - Algoritmos

Algorithm � Aprox Vertex Cover��G��V�E�� Calcula el VC usando �x�

C � vaciowhile E no es vacio do

�u� v� � elegir una arista cualquieraadd u� v to Cremove from E incident edges to v o u

end whilereturn C

������ La heur�istica golosa

Aparentemente existe una forma simple de mejorar la heur�istica del �x�� Elalgoritmo �x� selecciona cualquier arista y agrega ambos v�ertices al conjunto�en lugar de esto podemos elegir v�ertices de grado alto ya que un v�ertice de gradoalto cubre mayor cantidad de aristas� Esta es la heur�istica golosa�

Aproximaci�on con la heur�istica golosa Seleccionamos el v�ertice de mayorgrado y se lo agrega al conjunto� Luego eliminamos todas las aristas que sonincidentes sobre este v�ertice� Se repite el algortimo en el grafo resultante hastaque no quedan mas aristas�

���

Page 223: PPP - Algoritmos

Algorithm Aprox Vertex Cover��G��V�E�� Calcula el VC usando la heur istica golosa

C � vaciowhile E no es vacio dou� v�ertice de grado maximoadd u to Cremove from E incident edges to u

end whilereturn C

Para implementar este algoritmo en forma e�ciente puede que sea necesarioutilizar un Heap en donde se almacenen los v�ertices ordenados de acuerdo a sugrado�

Es interesante notar que en nuestro ejemplo �ver ilustraci�on� la heur�isticagolosa calcula la soluci�on �optima real� esto no ocurre en todos los casos� Lapregunta es si es posible demostrar que la heur�istica golosa siempre es superior ala heur�istica del �x�� la respuesta es un no de�nitivo� de hecho la heuristica golosano tiene una tasa de aproximaci�on constante� Puede resultar arbitrariamenteine�ciente o puede llegar a la soluci�on �optima� Aunque no puede demostrarsees aceptable decir que la heur�istica golosa es superior a la del �x� para grafosaceptados como normales�

���� Aproximaciones y reducciones

Una vez que se consigue un algoritmo de tipo ��n� � � para un problemaNP Completo podr�ia suponerse que cualquier problema NP Completo puedeaproximarse usando ��n� � � ya que aplicando reducciones se puede probar quelos problemas son equivalentes� Esto no es cierto ya que la tasa de aproximaci�onno necesariamente se preserva al aplicar una reducci�on�

Por ejemplo recordemos que si V � es el conjunto �VC� de G entonces V � V �

es un conjunto independiente de G� Supongamos que G tiene n v�ertices y que el�VC� de G tiene k v�ertices� Entonces nuestra heur�istica garantiza un �VC� V ��

que tiene a lo sumo �k v�ertices� Si consideramos el complemento V �V � sabemosque G tiene un conjunto independiente de tamanio n � k� Complementandola aproximaci�on� V � V �� tenemos un conjunto independiente aproximado de

���

Page 224: PPP - Algoritmos

tamanio n� �k� calculemos a partir de esto la tasa de aproximaci�on�

��n� �n� k

n� �k

El problema de esta tasa de aproximaci�on es que podr�ia resultar arbitrariamentegrande� Por ejemplo si n � ���� y k � �� ��n� � �� lo cual es terrible�

Como vemos la teor�ia de las reducciones no es aplicable a las aproximaciones�

���� El problema del centro equidistante

Supongamos que una importante cadena de video clubes desea abrir una seriede locales �k locales en total� en una ciudad y necesita encontrar la ubicaci�onideal para los negocios de forma tal de minimizar la distancia m�axima hastaalguno de los negocios desde cualquier punto de la ciudad� Si modelamos lared de caminos de la ciudad como un grafo no dirigido donde los pesos de lasaristas representan las distancias entre las intersecciones entonces tenemos unainstancia del problema del centro equidistante�

El problema del centro equidistante Dado un grafo no�dirigido G ��E� V � con pesos no�negativos en las aristas y dado un entero k calcular unsubconjunto de k v�ertices C � V denominados centros de forma tal que la dis�tancia m�axima entre cualquier v�ertice de V y su centro mas cercano es m�inima�Este problema es NP�Completo�

Sea G � �V�E� el grafo y sea w�u� v� el peso de la arista �u� v�� w�u� v� �w�v� u� ya que G es no dirigido� Suponemos que todos los pesos son no negativos�Para cada par de v�ertices u� v V sea d�u� v� � d�v� u� la distancia de u hastav es decir el costo del camino m�inimo desde u hasta v�

Consideremos el subconjunto C � V de v�ertices centros� Para cada v�erticev V podemos asociarlo con su v�ertice mas cercano denotado C�v�� Po demos tambien� asociar cada centro con el conjunto de v�ertices denominadosu vecindario para el cual el centro es su centro mas cercano� Para simpli�carlas de�niciones supongamos que la distancia al centro mas cercano es unica�Para cada v V y ci Ci de�nimos�

C�v� � ci tal que d�v� ci� � d�v� cj� para i � j

V �ci� � fv tal queC�v� � cigSi rompemos los empates para los v�ertices que son equidistantes desde dos omas centros podemos pensar en V �c��� V �c��� � � � formando una partici�on de losv�ertices de G� La distancia asociada con cada centro es la distancia al v�erticemas lejano de V�ci�

D�ci� � maxv�V cid�v� ci�

���

Page 225: PPP - Algoritmos

Esta es la distancia maxima oara cualquier v�ertice asociado con ci con respectoal centro� Finalmente de�nimos�

D�C� � maxci�CD�ci�

Que es la distancia m�axima desde cualquier v�ertice hasta su centro mas cercano�esta es la distancia cr�itica para la soluci�on y por eso se la denomina cuello debotella� todo v�ertice que est�e a esta distancia de su centro mas cercano en lasoluci�on se denominar�a v�ertice cuello de botella�

Dada la nomenclatura podemos de�nir el problema del centro equidistante dels siguiente manera dado un grafo no dirigido G � �V�E� y un entero k � jV jencontrar un subconjunto C V de tamanio k de forma tal que D�C� seam�inimo�

Una solucion por fuerza bruta implicar�ia enumerar todos los subconjuntosde k elementos de V y calcular D�C� para cada uno� esto es O�nk�� Dadoque el problema es NP Completo es altamente improbable que un algoritmosigni�cativamente mas e�ciente exista�

����� Aproximaci�on golosa

Nuestro algoritmo de aproximaci�on se basa en un algoritmo goloso simple queproduce una distancia cuello de botella D�C� que no es mas del doble de ladistancia �optima�

Comenzamos permitiendo que el primer v�ertice c� sea cualquier v�ertice delgrafo� Calculamos las distancias entre este v�ertice y los demas v�etices del grafo�tomamos el v�ertice mas lejano de este vrtice al cual consideramos el v�erticecuello de botella de c�� A este v�etice lo elegimos como pr�oximo centro c�� Acontinuacion computamos las distancias de todos los v�etices del grafo al centromas cercano �c� o c��� Nuevamente tomamos el v�ertice cuello de botella como elpr�oximo centro y continuamos� El proceso se repite hasta seleccionar k centros�

���

Page 226: PPP - Algoritmos

Algorithm KCenter Aprox�G�k� usando la heur�istica golosa

for each u in v dod�u� �

end forfor i � � to k doc�i� � u tal que d�u� es maximo �cuello de botella�for each v in V dod�v� �distancia minima desde v hasta cualquier centro c�� c�� � � � � ect

end forend forreturn c����k�

Mediante el algoritmo de Dijkstra podemos calcular los caminos minimosdesde un v�ertice hasta todos los dem�as� Sin embargo cada paso de este algoritmopide solucionar m�ultiples problemas de este tipo� esto puede hacerse con unamodi�caci�on del algoritmo original de Dijkstra� El tiempo del algoritmo es kveces el tiempo del algoritmo de Dijkstra O�k�n� e� logn�

����� Tasa de aproximaci�on

Queremos mostrar que este algoritmo siempre produce una distancia �nal D�C�que es a lo sumo el doble de la distancia de la soluci�on �optima es decir que��n� � ��

Sea C� � fc��� c��� � � � � c�kglos centros de la solucion �optima y sea D� �D�C�� la distancia cuello de botella �optima�

Sea CG � fc�� c�� � � � � ckg los centros del algoritmo goloso� Ademas sea ck��el pr�oximo centro que ser�ia agregado� es decir el v�ertice cuello de botella paraCG� Sea DG � D�CG� la distancia cuello de botella de CG notemos que ladistancia desde ck�� a su centro mas cercano es DG

Teorema� DG � �D�

Demostraci�on� Sea C � fc�� c�� � � �� ck� ck��g el �k��� elemento consistentede centros golosos y el pr�oximo centro goloso� Observemos que d�ci� cj� � DG�Este es el resultado de nuestra estrategia golosa de selecci�on� A medida quelos centros son seleccionados cada uno de ellos es la distancia cuello de botellapara los centros anteriores� A medida que agregamos mas centros la distanciacuello de botella solamente puede decrementarse� Dado que la distancia cuello debotella �nal es DG todos los centros estan por lo menos alejados esta distanciaentre si�

��

Page 227: PPP - Algoritmos

Cada ci C � esta asociado con su centro mas cercano en la soluci�on �optima�es decir que corresponde a V �c�k� para un cierto k� Debido a que hay k centrosen C� y k � � elementos en C� se deduce que por lo menos dos centros de Cestan en el mismo conjunto V �c�k� para algun k� Sean estos centros ci y cj�

Dado que D� es la distancia cuello de botella para C� sabeos que hay uncamino de distancia D� desde ci hasta c�k y un camino de distancia D� desdec�k hasta cj implicando que existe un camino de longitud �d� desde ci hasta cj�Por lo tanto d�ci� cj� � �D�� Pero de los comentarios anteriores tenemos qued�ci� cj� � DG� Por lo tanto

DG � d�ci� cj� � �D�

Que es lo que se quer�ia demostrar�

��� El problema del viajante

Durante el estudio de los problemas NP Completos enunciamos este problemaque es muy importante� dado un grafo dirigido y pesado donde los pesos rep resentan distancias entre los v�ertices encontrar un ciclo de longitud m�inima quepermita recorrer todos los v�ertices sin repetir v�ertices ni aristas�

������ Aproximaci�on para el problemaEuclideano del viajante

Un grafo cumple la desigualdad triangular cuando para toda arista �u� v� noexiste un v�ertice w tal que d�u�w� � d�w� v� � d�u� v�� Es decir que si existeuna arista entre dos v�ertices entonces la distancia m�inima entre estos v�erticesest�a dada por la arista� Cuando un grafo cumple con la desigualdad triangulardecimos que es Euclideano�

d�u� v� � d�u�w� � d�w� v� desigualdadtriangular

Cuando el problema del viajante se plantea sobre un grafo euclideano se diceque se trata del problema del viajante euclideano�

Algoritmo de aproximaci�on Cuando el problema es Euclideano existe unalgoritmo que permite solucionar el problema del viajante con ��n� � �� Elalgoritmo es el siguiente

�� Convertir el problema del viajante a un grafo completo y pesado G ��V�E� no dirigido� asignar distancia a los caminos que no existen�

�� Calcular el �arbol generador minimo �AGM� para G� usando por ejemploel algoritmo de Kruskal o el de Prim�

�� Recorrer el AGM por ambos lados para obtener un ciclo �ver �gura�

�� Ajustar el camino de forma tal de no visitar cada ciudad mas de una vez�

���

Page 228: PPP - Algoritmos

An�alisis En primer lugar el paso � garantiza que el costo del �arbol por se el�arbol generador m�inimo es menor o igual que el costo de la soluci�on �optima delviajante� �En caso contrario quitando una arista cualquiera a la soluci�on delproblema del viajante tendr�iamos un AGM menor��

Luego al recorrerlo dos veces en el paso � garantizamos que la longitud denuestro tour es menor o igual al doble de la longitud de la soluci�on �optima yaque recorrermos el AGM dos veces�

Por �ultimo el paso � no puede empeorar la soluci�on ya que de acuerdo a ladesigualdad triangular si reemplazamos �u�w�� �w� v� por �u� v� la distancia nopuede aumentar�

Por lo tanto ��n� � � que es la tasa de aproximaci�on de este algoritmo�

Si el grafo no es euclideano no existe algoritmo de aproximaci�on que permitaresolver el problema del viajante con una cierta tasa de aproximaci�on menor a � Esto puede demostarse ya que si dicha aproximaci�on existiese el problemadel ciclo Hamiltoniano no ser�ia NP Completo �

Para el problema Euclideano existen otros algoritmos de aproximacion� laHeur�istica de Christo�des obtiene ��n� � �� pero insume mucho mas tiempo�Si los pesos de las aristas son las distancias Euclideanas entre puntos en el planoexiste una aproximaci�on �� � �� �fue descubierta recientemente��

��� Otros problemas

������ K�Coloring

Dado un grafo G indicar cual es la cantidad m�inima de colores con las quepueden pintarse los v�ertices del grafo de forma tal que no existan dos v�eticesadyacentes pintados del mismo color� Este problema no se puede aproximar enmenos de O�n�� a menos que P � NP �

������ Arboles de decision

Calcular cual es el �arbol de decisi�on mas chico para un conjunto de datos dado�Este problema es an�alogo al de los colores� no se puede aproximar en formaacotada�

������ Clique

Encontrar el clique de tamanio m�aximo dado un grafo G� Tampoco puedeaproximarse�

������ Set�Cover

Dado un conjunto X � fx�� x�� � � � � xmg y F � fS�� S�� � � � � Sng una familia desubconjuntos de X de forma tal que cada elemento de X pertenece al menos a un

���

Page 229: PPP - Algoritmos

conjunto de F � Encontrar un conjunto C � F de forma tal que cada elementode X este en algun elemento de C es decir

X ��Si�C

Si

El problema de optimizaci�on consiste en encontrar la familia C de tamaniom�inimo�

Ejemplo

X � f�� �� �� �� � �������� ��� ��� ��g

S� � f�� �� �� �� ��gS� � f� �� �� �gS� � f�� �� �� ��gS� � f�� � �� ��gS � f�� �� �� ��gC � fS�� S�� Sg

Este problema es sumamente amplio y cubre por ejemplo al problema de Vertex Cover �VC�� entre otros� Las mejores aproximaciones a este problema son de tipo��n� � lnn� Una aproximaci�on golosa aplicable es elegir cada vez el conjuntoSi que cubra mayor cantidad de elementos de X� esto permite ��n� � n lo cualno es muy �optimo�

���

Page 230: PPP - Algoritmos

���� Resumen y puntos clave

Los algoritmos de aproximaci�on y los algoritmos heur�isticos permiten obtenersoluciones satisfactorias a problemas que no se pueden resolver en tiempo polin�omico�Una regla heur�istica permite decidir en base a un conocimiento intuitivo del prob lema� la mayor�ia de las heur�isticas est�an basadas en tcnicas golosas� es decir queson localmente favorables pero no garantizan una soluci�on globalmente �optima�

Un algoritmo de aproximaci�on puede evaluarse seg�un una tasa de aproxim aci�on que indica que tanto puede alejarse la soluci�on encontrada por el algoritmode la �optima� esto se expresa mediante ��n�� Que un problema NP Completosea aproximable con ��n� � c no implica que los dem�as lo sean pues la tasa deaproximaci�on no se preserva al realizar una reducci�on�

Algunos problemas pueden aproximarse mediante ��n� � c� otros puedenaproximarse tanto como se desee en detrimento del tiempo en lo que se denominaesquema de aproximaci�on� Otros problemas no son f�aciles de aproximar entiempo polin�omico y algunos no son aproximables en absoluto�

���

Page 231: PPP - Algoritmos

Chapter ��

Indices

���

Page 232: PPP - Algoritmos

���� Indice de algoritmos

Algoritmo PaginaAlgoritmo ejemplo I� ��Algoritmo ejemplo III� �Algoritmo ejemplo II� ��Algoritmo potencia recursivo ��Algoritmo potencia simple ��Aproximacion VC I� ���BFS con caminos minimos ���BFS ���Binomial Link ���Buildheap �Burbujeo ��Calculo de caminos minimos para FW ���Compoentes Conexos ���Counting Sort ��Create Heap ���DFS ���Dijkstra ���Distancia minima iterativa ��Distancias minimas I ���Factorial ��Fibonacci iterativo ��Fibonacci por potencia de matrices ��Fibonacci recursivo ��Find Set ���Floyd Warshall ���Greedy Selector ���Heapify ��Heapsort �Identi�cacion de CFCs ���Increment ��Insert Sort �

���

Page 233: PPP - Algoritmos

Algoritmo PaginaKruskal ���LCS �Subsecuencia comun maxima ���Link ���Make Set ���Matrix Chain Multiply ���Matrix Chain Order ���Matrix Multipli ���Merge Sort ��Merge ��Multipop �Ordenamiento topologico ���Particion ��Primalidad aleatorizado ��Primalidad por fuerza bruta ��Quicksort ��Radix Sort ��Relaxation ���Seleccion �ShortestPath ���Sort CX ���Union �Union Find� ���

���

Page 234: PPP - Algoritmos

���� Indice Tematico

Tema Pagina� SAT ���AGM ���ALgoritmos golosos ���Ackermann funcion ���Agregacion metodo �Algoritmo de Dijkstra ���Algoritmo de Floyd Pratt Rivest Tarjan �Algoritmo de Floyd Warshall ���Algoritmo de Kruskal ���Algoritmo de seleccion �Algoritmo de�nicion �Algoritmo deterministico �Algoritmo factorial ��Algoritmo particion ��Algoritmo validacion �Algoritmos aleatorizados �Algoritmos de aproximacion y heuristicas ���Algoritmos de sort ��Algoritmos disenio �Algoritmos iterativos ��Algoritmos recursivos ��Algoritmos tipo Montecarlo �Analisis amortizado agregacion �Analisis amortizado metodo contable ��Analisis amortizado metodo de los potenciales ��Analisis amortizado ��Aprox VC� ���Aproximacion a Vertex Cover ���Aproximacion al centro equidistante ���Aproximacion al problema del viajante ���Aproximaciones y reducciones ���

���

Page 235: PPP - Algoritmos

Tema PaginaArbol generador minimo ���Arboles AVL ��Arboles binarios ��Arboles binomiales implementacion ���Arboles binomiales ���Arboles de decision ���Arboles ��Aristas de avance ���Aristas de cruce ���Aristas de retroceso ���BFS analisis ���BFS caminos minimos ���BFS ��Bitonic Sorter ���Bosques ��Buildheap �Burbujeo analisis ��Burbujeo ��CFC algoritmo ���CFCs identi�cacion ��Cambio de variables ��Caminos minimos Dijkstra ���Caminos minimos Floyd Warshall ���Caminos minimos por BFS ���Caminos minimos uno con todos ���Caminos y ciclos ��Caras ���Carmiqueleanos numeros ��Centro equidistante aproximacion ���Centro equidistante ���Ciclo euleriano ��

���

Page 236: PPP - Algoritmos

Tema PaginaCiclo hamiltoniano ��Ciclos anidados independientes ��Ciclos simples ��Clase NP de problemas ���Clase No Np de problemas ���Clase P de problemas ���Clasi�cacion de aristas por DFS ���Clique problema ���Cliques ���Clique ���Colas dobles ��Colas ��Complejidad introduccion ��Complejidad ���Componentes conexos ��Componentes fuertemente conexos ��Conjunto independiente ���Contable metodo ��Convex Hull ���Costos en la maquina de Turing ��Counting sort algoritmo ��Counting sort ��Create Heap ���Crecimiento de funciones ��Cribas �DFS analisis ���DFS aristas de avance ���DFS aristas de cruce ���DFS aristas de retroceso ���DFS clasi�cacion de aristas ���DFS deteccion de ciclos ���

��

Page 237: PPP - Algoritmos

Tema PaginaDFS ���Decrease Key Heaps binomiales ��Deteccion de ciclos ���Dijkstra algoritmo ���Direccionamiento abierto con doble hashing ���Direccionamiento abierto cuadratico ���Direccionamiento abierto lineal ���Direccionamiento abierto ���Disenio de algoritmos �Disenio paradigmas ��Distancia minima algoritmo aleatorizado ��Distancia minima solucion DC �Distancia minima v�iterativa ��Dividir para conquistar ��Doble hashing ���Elevando un numero a una potencia ��Estabilidad sort ��Estructuras de datos simples ��Extract Min Heaps binomiales ��Fermat little theorem ��Fibonacci Heaps ��Fibonacci algoritmo iterativo ��Fibonacci algoritmo recursivo ��Fibonacci numeros ��Fibonacci usando potencia de matrices ��Floyd Pratt Rivest Tarjan seleccion �Floyd Warshall algoritmo ���Formas planares ���Formula de Euler ���Funcion de Ackermann ���Funciones crecimiento ��Funciones de hashing ���

���

Page 238: PPP - Algoritmos

Tema PaginaGauss metodo para multiplicar �Golsoso algoritmos ���Grado de un vertice ��Grafo aciclico ��Grafo bipartito ���Grafo complemento ���Grafo completo ���Grafo conexo ��Grafo dirigido aciclico ��Grafo inducido ���Grafo transpuesto ���Grafos BFS analisis ���Grafos BFS ��Grafos DFS analisis ���Grafos DFS clasisi�cacion de aristas ���Grafos DFS ���Grafos TimeStamps ���Grafos arboles ��Grafos bosques ��Grafos caminos minimos por BFS ���Grafos caminos y ciclos ��Grafos caras ���Grafos ciclo euleriano ��Grafos ciclo hamiltoniano ��Grafos cliques ���Grafos componentes conexos ��Grafos componentes fuertemente conexos ��Grafos conjunto independiente ���Grafos deteccion de ciclos ���Grafos dirigidos �Grafos dispersos ���

���

Page 239: PPP - Algoritmos

Tema PaginaGrafos formas planares ���Grafos formula de Euler ���Grafos fuertemente conexos ��Grafos grado de un vertice ��Grafos identi�cacion de CFCs ��Grafos isomorfos ��Grafos lista de adyacencias ���Grafos matriz de adyacencias ���Grafos ordenamiento topologico ���Grafos planares ���Grafos representacion ���Grafos subgrafos ���Grafos tamanios ���Grafos teorema de los intervalos ���Grafos vertices adyacentes ��Grafos �Half Cleaner ���Hash Tables encadenamiento ���Hash Tables resolucion de colisiones ���Hash Tables ��Hashing por division ���Hashing por multiplicacion ���Hashing ���Heapify ��Heaps almacenamiento ��Heaps binomiales Create Heap ���Heaps binomiales Decrease Key ��Heaps binomiales Extract Min ��Heaps binomiales Insert ��Heaps binomiales Union ���Heaps binomiales ��Heaps de Fibonacci ��Heaps resumen comparativo ��

���

Page 240: PPP - Algoritmos

Tema PaginaHeapsort Buildheap �Heapsort algoritmo �Heapsort heapify ��Heapsort ��Heaps ��Heuristica �x� para VC ���Heuristica golosa para VC ���Heuristicas ���Insert heaps binomiales ��Insert sort ��Insertsort� ��Instancia de un problema ���Isomor�smo de grafos ��K Coloring ���KCenter Aprox ���Konigsberg problema de los puentes ��Kruskal algoritmo ���La clase de problemas NP Completos ���Lista de adyacencias ���Listas ��Lomuto algoritmo de particion ��Maquina RAM de costo �jo ��Maquina RAM de costo variable �Maquina de Turing Costos ��Maquina de Turing e�ciencia ��Maquina de Turing no deterministica ���Maquina de Turing ��Matriz de adyacencias ���Mecanismo de relajacion ���

���

Page 241: PPP - Algoritmos

Tema Pagina

Mediana problema �Merge Sort analisis ��Merge Sort optimizaciones �Merge Sort propiedades ��Merge Sort ��Merger ���Mergesort� ��Metodo contable ��Metodo de agregacion �Metodo de division ���Metodo de la multiplicacion ���Metodo de los multiplicadores ��Metodo de los potenciales ��Metodo de sustitucion ��Metodo iterativo �Modelos computacionales ��Multiplicacion de numeros �Multiplicacion por Gauss �Notacion O ��Numeros carmiqueleanos ��Numeros de Fibonacci ��Ordenamiento topologico algoritmo ���Ordenamiento topologico ���Paradigmas de disenio ��Particion algoritmo de Lomuto ��Particion analisis ��Particion entera ���Path Compression ���Pilas ��Potencia algoritmo recursivo ��Potencia algoritmo simple ��

���

Page 242: PPP - Algoritmos

Tema PaginaPotencia de un numero ��Potenciales metodo ��Primalidad algoritmo aleatorizado ��Primalidad algoritmo fuerza bruta ��Primalidad testeo ��Principio de uniformidad simple ���Principio del � � ���Problema � SAT ���Problema K Coloring ���Problema SAT ���Problema Vertex Cover ���Problema de la �esta carismatica ���Problema de la maquina expendedora ��Problema de la particion entera ���Problema de la seleccion de actividades ���Problema de la seleccion �Problema de la subsecuencia comun maxima ���Problema de los arboles de decision ���Problema de los pozos petroleros ��Problema de los puentes de Konigsberg ��Problema de todas las distancias minimas ���Problema de�nicion ���Problema del arbol generador minimo ���Problema del centro equidistante ���Problema del clique ���Problema del conjunto independiente ���Problema del viajante aproximacion ���Problema del viajante ���Problema euclideano del viajante ���Problema mediana �

���

Page 243: PPP - Algoritmos

Tema PaginaProblemas NP Completos teoria ��Problemas NP Completos ���Problemas NP ���Problemas P ���Problemas de decision ���Problemas no NP ���Profundidad de sorting networks ���Programacion dinamica ���Programacion lineal entera ���Quicksort analisis ��Quicksort� ��Quicksort �Radix sort ��Radix Sort algoritmo ��Recurrencias cambio de variables ��Recurrencias metodo de los multiplicadores ��Recurrencias metodo de sustitucion ��Recurrencias metodo iterativo �Recurrencias teorema maestro ��Reduccion �COL Clique ���Reduccion �SAT VC ���Reduccion HC HP ���Reduccion IS Clique ���Reduccion SAT �SAT ���Reduccion SAT PLE ���Reduccion VC IP ���Reduccion VC IS ���Reducciones complejidad ���Reducciones notacion ���Reducciones pasos a seguir ���Reducciones tecnicas ���Reducciones ���

���

Page 244: PPP - Algoritmos

Tema PaginaRelajacion ���Representacion de grafos ���Resolucion de colisiones por encadenamiento ���Resolucion de colisiones ���Resolucion de colsiones por dir abierto ���SAT ���Secuencia de prueba ���Secuencias bitonicas binarias ���Secuencias bitonicas ���Seleccion Floyd Pratt Rivest Tarjan �Seleccion de actividades goloso ���Seleccion de actividades ���Seleccion problema �Seleccion sort ��Sort Mergesort ��Sort Quicksort �Sort Stooge sort ��Sort algoritmos lineales ��Sort algoritmos no recursivos ��Sort algoritmos recursivos ��Sort algoritmos ��Sort burbujeo analisis ��Sort burbujeo� ��Sort counting sort ��Sort en paralelo ���Sort estabilidad ��Sort heapsort ��Sort in situ ��Sort insercion� ��Sort insercion ��Sort limite inferior ��

���

Page 245: PPP - Algoritmos

Tema Pagina

Sort mergesort� ��Sort por burbujeo ��Sort quicksort� ��Sort radix sort ��Sort seleccion ��Sort tabla comparativa ��Sorting Networks ���Sorting Network ���Sorting networks analisis ���Sorting networks profundidad ���Stooge sort ��Subgrafos ���Subsecuencia comun maxima ���T�n����n Sum�q����n� T�q ���T�n q��n por sustitucion ��T�n���T�n����n log n por iteracion ��T�n���T�n����n por iteracion �T�n���T�n����n por sustitucion ��T�n���T�n����n por teorema maestro ��T�n���T�n����n por metodo iterativo ��T�n���T�n����n por teorema maestro ��T�n���T�n �� �T�n �� por multiplicadores ��T�n��T�n ���T�n �� por arbol ��T�n��T�q ���T�n q��n por iteracion ��T�n��T�sqrt�n���� por cambio de variables ��Tasa de aproximacion ���Tasa de error ���Teorema de Cook ���Teorema de los intervalos ���Teorema del � � ���Teorema maestro ��

���

Page 246: PPP - Algoritmos

Tema Pagina

Teorema pequenio de Fermat ��Teoria formal de los problemas NP Completos ��Testeo de primalidad ��TimeStamps ���Turing maquina de ��Union �Heaps binomiales� ���Union �Heaps Binomiales� ���Union Find analisis ���Union Find path compression ���Union Find usando forests ���Union Find usando listas ���Union Find ��Validacion de un algoritmo �Vertex Cover aproximacion ���Vertex Cover ���Vertices adyacentes ��burbujeo� ��

��