Algoritmos y Estructuras de Datos Bottazzi, Cristian. [email protected], Costarelli, Santiago. [email protected], D’El´ıa, Jorge. [email protected], Dalcin, Lisandro. [email protected], Galizzi, Diego. [email protected], Gime´nez, Juan Marcelo. [email protected], Olivera, Jose´. [email protected], Novara, Pablo. zaskar [email protected], Paz, Rodrigo. [email protected], Prigioni, Juan. [email protected], Pucheta, Mart´ın. [email protected], Rojas Fredini, Pablo Sebastia´n. [email protected], Romeo, Lautaro. [email protected] , Storti, Mario. [email protected], http://www.cimec.org.ar/aed www: Facultad de Ingenier´ıa y Ciencias H´ıdricas http://fich.unl.edu.ar Universidad Nacional del Litoral Centro de Investigacio´n de Me´todos Computacionales http://www.cimec.org.ar Indice 1. Disen˜oyana´lisisdealgoritmos 13 1.1. Conceptosba´sicosdealgoritmos . . . . . . . . . . . . . . . . 13 1.1.1. Ejemplo:Sincronizacio´ndeaccesoaobjetosenca´lculo distribuido . . . . . . . . . . . . . . . . . . . . . . . . 14 1.1.2. Introduccio´nba´sicaagrafos . . . . . . . . . . . . . . . 16 1.1.3. Planteodelproblemamediantegrafos . . . . . . . . . 17 1.1.4. Algoritmodebu´squedaexhaustiva . . . . . . . . . . . 18 1.1.5. Generacio´ndelascoloraciones . . . . . . . . . . . . . 19 1.1.6. Crecimientodeltiempodeejecucio´n . . . . . . . . . . 22 1.1.7. Bu´squedaexhaustivamejorada . . . . . . . . . . . . . 23 1.1.8. Algoritmoheur´ısticoa´vido . . . . . . . . . . . . . . . . 26 1.1.9. Descripcio´ndelalgoritmoheur´ısticoenseudo-co´digo . 29 1.1.10.Crecimiento del tiempo de ejecucio´n para el algoritmo a´vido . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1.1.11.Conclusio´ndelejemplo . . . . . . . . . . . . . . . . . 36 1.2. Tiposabstractosdedatos . . . . . . . . . . . . . . . . . . . . 37 1.2.1. Operaciones abstractas y caracter´ısticas del TAD CONJUNTO . . . . . . . . . . . . . . . . . . . . . . . 38 1.2.2. InterfazdelTADCONJUNTO . . . . . . . . . . . . . . 38 1.2.3. Implementacio´ndelTADCONJUNTO . . . . . . . . . . 40 1.3. Tiempodeejecucio´ndeunprograma . . . . . . . . . . . . . . 41 1.3.1. Notacio´nasinto´tica . . . . . . . . . . . . . . . . . . . . 43 1.3.2. Invarianciaanteconstantesmultiplicativas . . . . . . . 45 1.3.3. Invariancia de la tasa de crecimiento ante valores en unconjuntofinitodepuntos . . . . . . . . . . . . . . . 45 1.3.4. Transitividad . . . . . . . . . . . . . . . . . . . . . . . 45 1.3.5. Regladelasuma. . . . . . . . . . . . . . . . . . . . . 46 1.3.6. Regladelproducto . . . . . . . . . . . . . . . . . . . . 46 3 1.3.7. Funcionest´ıpicasutilizadasenlanotacio´nasinto´tica . . 46 1.3.8. Equivalencia . . . . . . . . . . . . . . . . . . . . . . . 48 1.3.9. Lafuncio´nfactorial . . . . . . . . . . . . . . . . . . . . 48 1.3.10.Determinacio´nexperimentaldelatasadecrecimiento . 50 1.3.11.Otrosrecursoscomputacionales. . . . . . . . . . . . . 51 1.3.12.Tiemposdeejecucio´nno-polinomiales . . . . . . . . . 52 1.3.13.ProblemasPyNP . . . . . . . . . . . . . . . . . . . . 52 1.3.14.Variospara´metrosenelproblema . . . . . . . . . . . . 53 1.4. Conteodeoperacionesparaelca´lculodeltiempodeejecucio´n 54 1.4.1. Bloquesif . . . . . . . . . . . . . . . . . . . . . . . . . 54 1.4.2. Lazos . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 1.4.3. Sumadepotencias . . . . . . . . . . . . . . . . . . . . 60 1.4.4. Llamadasarutinas . . . . . . . . . . . . . . . . . . . . 60 1.4.5. Llamadasrecursivas . . . . . . . . . . . . . . . . . . . 60 2. Tiposdedatosabstractosfundamentales 65 2.1. ElTADLista . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 2.1.1. Descripcio´nmatema´ticadelaslistas . . . . . . . . . . 66 2.1.2. Operacionesabstractassobrelistas . . . . . . . . . . . 67 2.1.3. Unainterfazsimpleparalistas . . . . . . . . . . . . . . 68 2.1.4. Funcionesqueretornanreferencias . . . . . . . . . . . 71 2.1.5. Ejemplosdeusodelainterfazba´sica . . . . . . . . . . 73 2.1.6. Implementacio´ndelistasporarreglos . . . . . . . . . . 78 2.1.6.1. Eficienciadelaimplementacio´nporarreglos . 84 2.1.7. Implementacio´nmedianteceldasenlazadasporpunteros 85 2.1.7.1. Eltipoposicio´n . . . . . . . . . . . . . . . . . 87 2.1.7.2. Celdadeencabezamiento . . . . . . . . . . . 88 begin() end() 2.1.7.3. Lasposiciones y . . . . . . . 91 2.1.7.4. Detallesdeimplementacio´n . . . . . . . . . . 91 2.1.8. Implementacio´nmedianteceldasenlazadasporcursores 93 2.1.8.1. Co´mo conviven varias celdas en un mismo espacio . . . . . . . . . . . . . . . . . . . . . 95 2.1.8.2. Gestio´ndeceldas . . . . . . . . . . . . . . . 96 2.1.8.3. Analog´ıaentrepunterosycursores . . . . . . 97 2.1.9. Tiemposdeejecucio´ndelosme´todosenlasdiferentes implementaciones. . . . . . . . . . . . . . . . . . . . . 100 2.1.10.InterfazSTL . . . . . . . . . . . . . . . . . . . . . . . 102 2.1.10.1.VentajasdelainterfazSTL. . . . . . . . . . . 102 2.1.10.2.Ejemplodeuso . . . . . . . . . . . . . . . . . 103 2.1.10.2.1.Usodetemplatesyclasesanidadas . 104 2.1.10.2.2.Operadores de incremento prefijo y postfijo: . . . . . . . . . . . . . . . . 104 2.1.10.3.Detallesdeimplementacio´n . . . . . . . . . . 105 2.1.10.4.Listasdoblementeenlazadas . . . . . . . . . 108 2.2. ElTADpila . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 2.2.1. UnacalculadoraRPNconunapila . . . . . . . . . . . 110 2.2.2. Operacionesabstractassobrepilas . . . . . . . . . . . 111 2.2.3. Interfazparapila . . . . . . . . . . . . . . . . . . . . . 111 2.2.4. Implementacio´ndeunacalculadoraRPN . . . . . . . . 112 2.2.5. Implementacio´ndepilasmediantelistas . . . . . . . . 116 2.2.6. Lapilacomounadaptador . . . . . . . . . . . . . . . . 118 2.2.7. InterfazSTL . . . . . . . . . . . . . . . . . . . . . . . 118 2.3. ElTADcola . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 2.3.1. Intercalacio´ndevectoresordenados . . . . . . . . . . 120 2.3.1.1. Ordenamientoporinsercio´n . . . . . . . . . . 120 2.3.1.2. Tiempodeejecucio´n . . . . . . . . . . . . . . 123 2.3.1.3. Particularidadesalestarlassecuenciaspares eimparesordenadas . . . . . . . . . . . . . . 123 2.3.1.4. Algoritmodeintercalacio´nconunacolaauxiliar124 2.3.2. Operacionesabstractassobrecolas . . . . . . . . . . . 126 2.3.3. Interfazparacola . . . . . . . . . . . . . . . . . . . . . 126 2.3.4. Implementacio´n del algoritmo de intercalacio´n de vec- tores . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 2.3.4.1. Tiempodeejecucio´n . . . . . . . . . . . . . . 128 2.4. ElTADcorrespondencia . . . . . . . . . . . . . . . . . . . . . 129 2.4.1. Interfazsimpleparacorrespondencias . . . . . . . . . 131 2.4.2. Implementacio´n de correspondencias mediante conte- nedoreslineales . . . . . . . . . . . . . . . . . . . . . 134 2.4.3. Implementacio´n mediante contenedores lineales orde- nados . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 2.4.3.1. Implementacio´nmediantelistasordenadas . . 138 2.4.3.2. InterfazcompatibleconSTL . . . . . . . . . . 140 2.4.3.3. Tiemposdeejecucio´nparalistasordenadas . 144 2.4.3.4. Implementacio´nmediantevectoresordenados 144 2.4.3.5. Tiemposdeejecucio´nparavectoresordenados148 2.4.4. Definicio´ndeunarelacio´ndeorden . . . . . . . . . . . 148 3. Arboles 151 3.1. Nomenclaturaba´sicadea´rboles . . . . . . . . . . . . . . . . 151 3.1.0.0.1. Alturadeunnodo. . . . . . . . . . . 154 3.1.0.0.2. Profundidaddeunnodo.Nivel. . . . . 154 3.1.0.0.3. Nodoshermanos . . . . . . . . . . . 154 3.2. Ordendelosnodos . . . . . . . . . . . . . . . . . . . . . . . 154 3.2.1. Particionamientodelconjuntodenodos . . . . . . . . . 156 3.2.2. Listadodelosnodosdeuna´rbol . . . . . . . . . . . . 157 3.2.2.1. Ordenprevio . . . . . . . . . . . . . . . . . . 157 3.2.2.2. Ordenposterior. . . . . . . . . . . . . . . . . 158 3.2.2.3. Ordenposteriorylanotacio´npolacainvertida 159 3.2.3. Notacio´nLispparaa´rboles. . . . . . . . . . . . . . . . 160 3.2.4. Reconstruccio´ndela´rbolapartirdesuso´rdenes . . . . 161 3.3. Operacionescona´rboles . . . . . . . . . . . . . . . . . . . . 164 3.3.1. Algoritmosparalistarnodos . . . . . . . . . . . . . . . 164 3.3.2. Insercio´nena´rboles . . . . . . . . . . . . . . . . . . . 165 3.3.2.1. Algoritmoparacopiara´rboles . . . . . . . . . 166 3.3.3. Supresio´nena´rboles . . . . . . . . . . . . . . . . . . 169 3.3.4. Operacionesba´sicassobreeltipoa´rbol . . . . . . . . . 170 3.4. Interfazba´sicaparaa´rboles . . . . . . . . . . . . . . . . . . . 170 3.4.1. Listadosenordenprevioyposteriorynotacio´nLisp . . 174 3.4.2. Funciones auxiliares para recursio´n y sobrecarga de funciones . . . . . . . . . . . . . . . . . . . . . . . . . 175 3.4.3. Algoritmosdecopia . . . . . . . . . . . . . . . . . . . 176 3.4.4. Algoritmodepoda . . . . . . . . . . . . . . . . . . . . 176 3.5. Implementacio´ndelainterfazba´sicaporpunteros . . . . . . . 176 3.5.1. Eltipoiterator . . . . . . . . . . . . . . . . . . . . . . 177 3.5.2. Lasclasescelleiterator t . . . . . . . . . . . . . . . . 179 3.5.3. Laclasetree . . . . . . . . . . . . . . . . . . . . . . . 183 3.6. Interfazavanzada . . . . . . . . . . . . . . . . . . . . . . . . 186 3.6.1. Ejemplodeusodelainterfazavanzada . . . . . . . . . 191 3.7. Tiemposdeejecucio´n . . . . . . . . . . . . . . . . . . . . . . 194 3.8. Arbolesbinarios . . . . . . . . . . . . . . . . . . . . . . . . . 194 3.8.1. Listadosenordensime´trico . . . . . . . . . . . . . . . 195 3.8.2. Notacio´nLisp . . . . . . . . . . . . . . . . . . . . . . . 195 3.8.3. A´rbolbinariolleno . . . . . . . . . . . . . . . . . . . . 196 3.8.4. Operacionesba´sicassobrea´rbolesbinarios . . . . . . 197 3.8.5. Interfaceseimplementaciones. . . . . . . . . . . . . . 198 3.8.5.1. Interfazba´sica . . . . . . . . . . . . . . . . . 198 3.8.5.2. Ejemplodeuso.Predicadosdeigualdadyes- pejo . . . . . . . . . . . . . . . . . . . . . . . 199 3.8.5.3. Ejemplodeuso.Hacerespejo“inplace” . . . 201 3.8.5.4. Implementacio´n con celdas enlazadas por punteros . . . . . . . . . . . . . . . . . . . . 202 3.8.5.5. Interfazavanzada . . . . . . . . . . . . . . . 208 3.8.5.6. Ejemplo de uso. El algoritmo apply y princi- piosdeprogramacio´nfuncional. . . . . . . . 210 3.8.5.7. Implementacio´ndelainterfazavanzada . . . . 211 3.8.6. ArbolesdeHuffman . . . . . . . . . . . . . . . . . . . 215 3.8.6.1. Condicio´ndeprefijos . . . . . . . . . . . . . . 217 3.8.6.2. Representacio´n de co´digos como a´rboles de Huffman . . . . . . . . . . . . . . . . . . . . 217 3.8.6.3. Co´digosredundantes . . . . . . . . . . . . . 219 3.8.6.4. Tabla de co´digos o´ptima. Algoritmo de bu´squedaexhaustiva . . . . . . . . . . . . . . 220 3.8.6.4.1. Generacio´ndelosa´rboles . . . . . . 222 3.8.6.4.2. Agregando un condimento de pro- gramacio´nfuncional . . . . . . . . . 223 3.8.6.4.3. Elalgoritmodecombinacio´n . . . . . 226 3.8.6.4.4. Funcio´nauxiliarquecalculalalongi- tudmedia . . . . . . . . . . . . . . . 227 3.8.6.4.5. Usodecombycodelen. . . . . . . . 228 3.8.6.5. ElalgoritmodeHuffman . . . . . . . . . . . . 230 3.8.6.6. Implementacio´ndelalgoritmo . . . . . . . . . 233 3.8.6.7. Unprogramadecompresio´ndearchivos . . . 236 4. Conjuntos 249 4.1. Introduccio´nalosconjuntos . . . . . . . . . . . . . . . . . . . 249 4.1.1. Notacio´ndeconjuntos . . . . . . . . . . . . . . . . . . 249 4.1.2. Interfazba´sicaparaconjuntos . . . . . . . . . . . . . . 250 4.1.3. Ana´lisisdeflujodedatos. . . . . . . . . . . . . . . . . 252 4.2. Implementacio´nporvectoresdebits . . . . . . . . . . . . . . 259 4.2.1. Conjuntosuniversalesquenosonrangoscontiguosde enteros . . . . . . . . . . . . . . . . . . . . . . . . . . 260 4.2.2. Descripcio´ndelco´digo . . . . . . . . . . . . . . . . . . 261 4.3. Implementacio´nconlistas . . . . . . . . . . . . . . . . . . . . 263 4.3.0.1. Similaridad entre los TAD conjunto y corres- pondencia . . . . . . . . . . . . . . . . . . . 263 4.3.0.2. Algoritmolinealparalasoperacionesbinarias 265 4.3.0.3. Descripcio´ndelaimplementacio´n . . . . . . . 267 4.3.0.4. Tiemposdeejecucio´n . . . . . . . . . . . . . 270 4.4. Interfazavanzadaparaconjuntos . . . . . . . . . . . . . . . . 270 4.5. Eldiccionario . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 4.5.1. Laestructuratabladedispersio´n . . . . . . . . . . . . 274 4.5.2. Tablasdedispersio´nabiertas . . . . . . . . . . . . . . 276 4.5.2.1. Detallesdeimplementacio´n . . . . . . . . . . 276 4.5.2.2. Tiemposdeejecucio´n . . . . . . . . . . . . . 280 4.5.3. Funcionesdedispersio´n . . . . . . . . . . . . . . . . . 281 4.5.4. Tablasdedispersio´ncerradas . . . . . . . . . . . . . . 282 4.5.4.1. Costodelainsercio´nexitosa . . . . . . . . . 284 4.5.4.2. Costodelainsercio´nnoexitosa . . . . . . . . 286 4.5.4.3. Costodelabu´squeda . . . . . . . . . . . . . 288 4.5.4.4. Supresio´ndeelementos . . . . . . . . . . . . 288 4.5.4.5. Costodelasfuncionescuandohaysupresio´n 288 4.5.4.6. Reinsercio´ndelatabla . . . . . . . . . . . . . 289 4.5.4.7. Costodelasoperacionesconsupresio´n . . . 291 4.5.4.8. Estrategiasderedispersio´n . . . . . . . . . . 291 4.5.4.9. Detallesdeimplementacio´n . . . . . . . . . . 293 4.6. Conjuntoscona´rbolesbinariosdebu´squeda . . . . . . . . . . 297 4.6.1. Representacio´ncomolistaordenadadelosvalores . . 297 4.6.2. Verificarlacondicio´ndeABB . . . . . . . . . . . . . . 298 4.6.3. M´ınimoyma´ximo . . . . . . . . . . . . . . . . . . . . 299 4.6.4. Buscarunelemento . . . . . . . . . . . . . . . . . . . 300 4.6.5. Costodem´ınimoyma´ximo . . . . . . . . . . . . . . . 300 4.6.6. Operacio´ndeinsercio´n . . . . . . . . . . . . . . . . . 303 4.6.7. Operacio´ndeborrado . . . . . . . . . . . . . . . . . . 303 4.6.8. Recorridoenela´rbol . . . . . . . . . . . . . . . . . . . 305 4.6.9. Operacionesbinarias . . . . . . . . . . . . . . . . . . 306 4.6.10.Detallesdeimplementacio´n . . . . . . . . . . . . . . . 307 4.6.11.Tiemposdeejecucio´n . . . . . . . . . . . . . . . . . . 312 4.6.12.Balanceodela´rbol . . . . . . . . . . . . . . . . . . . . 312 5. Ordenamiento 315 5.1. Introduccio´n . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 5.1.1. Relacionesdeordende´biles . . . . . . . . . . . . . . . 315 5.1.2. Signaturadelasrelacionesdeorden.Predicadosbina- rios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 5.1.3. Relacionesdeordeninducidasporcomposicio´n . . . . 321 5.1.4. Estabilidad . . . . . . . . . . . . . . . . . . . . . . . . 321 5.1.5. Primerasestimacionesdeeficiencia . . . . . . . . . . . 322 5.1.6. AlgoritmosdeordenamientoenlasSTL . . . . . . . . . 322 5.2. Me´todosdeordenamientolentos . . . . . . . . . . . . . . . . 323 5.2.1. Elme´tododelaburbuja . . . . . . . . . . . . . . . . . 323 5.2.2. Elme´tododeinsercio´n . . . . . . . . . . . . . . . . . . 325 5.2.3. Elme´tododeseleccio´n . . . . . . . . . . . . . . . . . 326 5.2.4. Comparacio´ndelosme´todoslentos . . . . . . . . . . . 326 5.2.5. Estabilidad . . . . . . . . . . . . . . . . . . . . . . . . 328 5.3. Ordenamientoindirecto . . . . . . . . . . . . . . . . . . . . . 328 5.3.1. Minimizarlallamadaafunciones . . . . . . . . . . . . 330 5.4. Elme´tododeordenamientora´pido,quick-sort . . . . . . . . . 331 5.4.1. Tiempodeejecucio´n.Casosextremos . . . . . . . . . 333 5.4.2. Eleccio´ndelpivote . . . . . . . . . . . . . . . . . . . . 335 5.4.3. Tiempodeejecucio´n.Casopromedio.. . . . . . . . . . 338 5.4.4. Dispersio´ndelostiemposdeejecucio´n . . . . . . . . . 339 5.4.5. Eleccio´naleatoriadelpivote . . . . . . . . . . . . . . . 341 5.4.6. Elalgoritmodeparticio´n . . . . . . . . . . . . . . . . . 342 5.4.7. Tiempodeejecucio´ndelalgoritmodeparticionamiento 343 5.4.8. Bu´squedadelpivoteporlamediana . . . . . . . . . . . 344 5.4.9. Implementacio´ndequick-sort . . . . . . . . . . . . . . 345 5.4.10.Estabilidad . . . . . . . . . . . . . . . . . . . . . . . . 346 5.4.11.Elalgoritmodeintercambio(swap) . . . . . . . . . . . 348 5.4.12.Tiempodeejecucio´ndelquick-sortestable . . . . . . . 351 5.5. Ordenamientopormont´ıculos . . . . . . . . . . . . . . . . . . 353 5.5.1. Elmont´ıculo . . . . . . . . . . . . . . . . . . . . . . . 354 5.5.2. Propiedades . . . . . . . . . . . . . . . . . . . . . . . 355 5.5.3. Insercio´n . . . . . . . . . . . . . . . . . . . . . . . . . 356 5.5.4. Costodelainsercio´n . . . . . . . . . . . . . . . . . . . 358 5.5.5. Eliminarelm´ınimo.Re-heap. . . . . . . . . . . . . . . 358 5.5.6. Costodere-heap . . . . . . . . . . . . . . . . . . . . . 360 5.5.7. Implementacio´nin-place . . . . . . . . . . . . . . . . . 360 5.5.8. Elprocedimientomake-heap. . . . . . . . . . . . . . . 361 5.5.9. Implementacio´n . . . . . . . . . . . . . . . . . . . . . 364 5.5.10.Propiedadesdelordenamientopormont´ıculo . . . . . . 366 5.6. Ordenamientoporfusio´n . . . . . . . . . . . . . . . . . . . . 366 5.6.1. Implementacio´n . . . . . . . . . . . . . . . . . . . . . 368 5.6.2. Estabilidad . . . . . . . . . . . . . . . . . . . . . . . . 369 5.6.3. Versio´nestabledesplit. . . . . . . . . . . . . . . . . . 370 5.6.4. Merge-sortparavectores . . . . . . . . . . . . . . . . 371 5.6.5. Ordenamientoexterno . . . . . . . . . . . . . . . . . . 373 5.7. Comparacio´n de algunas implementaciones de algoritmos de ordenamiento . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Description: