apuntes teoria eda

Download Apuntes Teoria EDA

Post on 31-Jul-2015

62 views

Category:

Documents

7 download

Embed Size (px)

TRANSCRIPT

Escuela Polit cnica Superior de Alcoy e

Ingeniera T cnica en Inform tica de e a Gesti n o

Estructuras de Datos y Algoritmos

Apuntes Teora Francisco Nevado, Jordi Linares

Indice general1. Tipos Abstractos de Datos 1.1. Introducci n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 1.2. Ejemplo: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Gesti n Din mica de Memoria. Punteros o a 2.1. Gesti n din mica de memoria. . . . . o a 2.1.1. Variables est ticas . . . . . . a 2.2. Punteros . . . . . . . . . . . . . . . . 2.2.1. Punteros y vectores . . . . . . 2.3. Variables din micas . . . . . . . . . . a 2.4. Ejercicios . . . . . . . . . . . . . . . 5 5 6 8 8 8 9 11 13 19 20 20 20 21 22 24 26 27 28 32 34 34 35 38 42 46

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

3. Estructuras de Datos Lineales 3.1. Introducci n . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 3.2. Pilas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1. Operaciones sobre pilas . . . . . . . . . . . . . . . . . 3.2.2. Representaci n vectorial de pilas . . . . . . . . . . . . . o 3.2.3. Representaci n enlazada de pilas con variable din mica o a 3.3. Colas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1. Operaciones sobre colas . . . . . . . . . . . . . . . . . 3.3.2. Representaci n vectorial de colas . . . . . . . . . . . . o 3.3.3. Representaci n enlazada de colas con variable din mica o a 3.4. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1. Operaciones sobre listas . . . . . . . . . . . . . . . . . 3.4.2. Representaci n vectorial de listas . . . . . . . . . . . . o 3.4.3. Representaci n enlazada de listas con variable din mica o a 3.4.4. Representaci n enlazada de listas con variable est tica . o a 3.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

1

4. Divide y vencer s a 4.1. Esquema general de Divide y Vencer s . . . . . a 4.2. Algoritmos de ordenaci n . . . . . . . . . . . . . . o 4.2.1. Inserci n directa . . . . . . . . . . . . . . o 4.2.2. Selecci n directa . . . . . . . . . . . . . . o 4.2.3. Ordenaci n por mezcla o fusi n: Mergesort o o 4.2.4. Algoritmo por partici n: Quicksort . . . . o 4.2.5. Comparaci n emprica de los algoritmos . o 4.3. B squeda del k- simo menor elemento . . . . . . . u e 4.3.1. An lisis de la eciencia . . . . . . . . . . a 4.4. B squeda binaria . . . . . . . . . . . . . . . . . . u 4.4.1. Eciencia del algoritmo . . . . . . . . . . 4.5. C lculo de la potencia de un n mero . . . . . . . . a u 4.5.1. Algoritmo trivial . . . . . . . . . . . . . . 4.5.2. Algoritmo divide y vencer s . . . . . . . a 4.6. Otros problemas . . . . . . . . . . . . . . . . . . . 4.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

67 67 68 68 72 74 82 93 94 95 98 99 101 101 102 103 104 114 114 116 117 117 119 122 122 125 128 129 131 140 140 140 140 141 141 143 143 144

5. Arboles 5.1. Deniciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Recorrido de arboles . . . . . . . . . . . . . . . . . . . . . . . . 5.3. Representaci n de arboles . . . . . . . . . . . . . . . . . . . . . o 5.3.1. Representaci n mediante listas de hijos . . . . . . . . . . o 5.3.2. Representaci n hijo m s a la izquierda hermano dereo a cho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4. Arboles binarios . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1. Representaci n de arboles binarios . . . . . . . . . . . . . o 5.4.2. Recorrido de arboles binarios . . . . . . . . . . . . . . . 5.4.3. Arbol binario completo. Representaci n. . . . . . . . . . o 5.4.4. Propiedades de los arboles binarios . . . . . . . . . . . . 5.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. Representaci n de Conjuntos o 6.1. Conceptos generales . . . . . . . . . . . . . . . 6.1.1. Representaci n de conjuntos . . . . . . . o 6.1.2. Notaci n . . . . . . . . . . . . . . . . . o 6.1.3. Operaciones elementales sobre conjuntos 6.1.4. Conjuntos din micos . . . . . . . . . . . a 6.2. Tablas de dispersi n o tablas Hash . . . . . . . . o 6.2.1. Tablas de direccionamiento directo . . . 6.2.2. Tablas de dispersi n o tablas Hash . . . . o 2

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

6.3. Arboles binarios de b squeda . . . . . . . . . . . . . . . . . . . . u 6.3.1. Representaci n de arboles binarios de b squeda . . . . . . o u 6.3.2. Altura m xima y mnima de un arbol binario de b squeda a u 6.3.3. Recorrido de arboles binarios de b squeda . . . . . . . . u 6.3.4. B squeda de un elemento en un arbol binario de b squeda u u 6.3.5. B squeda del elemento mnimo y del elemento m ximo . u a 6.3.6. Inserci n de un elemento en un arbol binario de b squeda o u 6.3.7. Borrado de un elemento en un arbol binario de b squeda . u 6.4. Montculos (Heaps). Colas de prioridad. . . . . . . . . . . . . . . 6.4.1. Manteniendo la propiedad de montculo . . . . . . . . . . 6.4.2. Construir un montculo . . . . . . . . . . . . . . . . . . . 6.4.3. Algoritmo de ordenaci n Heapsort . . . . . . . . . . . . o 6.4.4. Colas de prioridad . . . . . . . . . . . . . . . . . . . . . 6.5. Estructura de datos para conjuntos disjuntos: MF-set . . . . . . . 6.5.1. Representaci n de MF-sets . . . . . . . . . . . . . . . . . o 6.5.2. Operaciones sobre MF-sets . . . . . . . . . . . . . . . . . 6.6. Otras Estructuras de Datos para Conjuntos . . . . . . . . . . . . . 6.6.1. Tries . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6.2. Arboles Balanceados . . . . . . . . . . . . . . . . . . . . 6.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.7.1. Tablas de dispersi n . . . . . . . . . . . . . . . . . . . . o 6.7.2. Arboles binarios de b squeda . . . . . . . . . . . . . . . u 6.7.3. Montculos (Heaps) . . . . . . . . . . . . . . . . . . . . . 6.7.4. MF-sets . . . . . . . . . . . . . . . . . . . . . . . . . . . 7. Grafos 7.1. Deniciones . . . . . . . . . . . . . . . . 7.2. Introducci n a la teora de grafos . . . . . o 7.3. Representaci n de grafos . . . . . . . . . o 7.3.1. Listas de adyacencia . . . . . . . 7.3.2. Matriz de adyacencia . . . . . . . 7.4. Recorrido de grafos . . . . . . . . . . . . 7.4.1. Recorrido primero en profundidad 7.4.2. Recorrido primero en anchura . . 7.4.3. Ordenaci n topol gica . . . . . . o o 7.5. Caminos de mnimo peso: algoritmo de Dijkstra . . . . . . . . . . . . . . . . . . 7.5.1. Caminos de mnimo peso . . . . . 7.5.2. Algoritmo de Dijkstra . . . . . . 7.6. Arbol de expansi n de coste mnimo . . . o o 7.6.1. Arbol de expansi n . . . . . . . . 3

158 159 161 161 162 165 167 170 180 181 186 192 198 203 204 204 209 209 211 216 216 221 227 232 234 234 238 241 241 243 245 245 249 250 253 253 254 260 260

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

7.6.2. Algoritmo de Kruskal . . . . . . . . . . . . . . . . . . . 261 7.6.3. Algoritmo de Prim . . . . . . . . . . . . . . . . . . . . . 266 7.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 8. Algoritmos Voraces 8.1. Introducci n . . . . . . . . . . . . . . . . . . . o 8.1.1. Ejemplo: Cajero autom tico . . . . . . a 8.2. Esquema general Voraz . . . . . . . . . . . . . 8.3. El problema de la compresi n de cheros . . . o 8.4. El problema de la mochila con fraccionamiento 8.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . Ex menes de la asignatura a 279 279 280 280 282 287 291 294

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

4

Tema 1 Tipos Abstractos de Datos1.1. Introducci n o

Entendemos como Tipo de Datos (TD) el conjunto de valores que una variable puede tomar. En otras palabras podramos decir que un TD es la clase a la que pertenece una variable (p.e. un n mero que pertenezca a los enteros es de tipo u entero). Aunque a nivel l gico los TDs se representen de diferentes maneras (n meros o u enteros, caracteres, etc) a nivel interno el computador los tratar como agrupaa ciones de bits. La necesidad de utilizar TDs viene fundamentada por dos razones: Que el compilador pueda elegir la representaci n interna optima para una o variable. Poder aprovechar las caractersticas de un TD, por ejemplo, las operaciones aritm ticas de los n meros enteros. e u Los lenguajes de programaci n suelen admitir cuatro tipos distintos de TD: eno teros, reales, booleanos y caracteres. A estos TDs se les conoce como TD simples, elementales o primitivos. Cada uno de estos tipos tiene asociadas operaciones simples, como puede ser la multiplicaci n de enteros,