Está en la página 1de 23

TutorialdeEstructurasdeDatosBsicas PorLuisE.

VargasAzcona

EstructurasdeDatosBsicas
Introduccin
Escrib estetutorialconelobjetivodeensearestructurasdedatosaparticipantesdelaOMIenlas ocacionesenquenopuedohacerlopersonalmente,yaquehastalafechanoheencontradoningn tutorialdeestructurasdedatosquehableconprofundidaddelostemasyalavezesteorientadoa resolverproblemas. Lamayoradetutorialesdeestructurasdedatosqueseencuentranestanorientadosaldesarrollode aplicaciones, y los pocos que he encontrado orientados a resolver problemas de concursos de programacin,nohabladelostemasconlasuficienteprofundidad. Otrabuenaraznparaescribirestetutorial,esquelasimplementacionesqueheencontradoenotros tutoriales(yenloslibrostambien)delasestructurasdedatos,sonmuypocoprcticasparaconcursos (aunquesonlomejoreneldesarrollodeaplicaciones). Estetutorialpretendeensearamanejareficazmentelasestructurasdedatosbsicas,delascualesse derivanmuchasotrasestructurasdedatosmasavanzadas. Ademsdequeelparticipantelasconozcaylassepaimplementar,tambienesnecesarioquesepahacer unusointeligentedeellas,esporesoqueestetutorialincluyeunagrancantidaddeproblemasque involucranlasestructurasdedatos. Comotodobuenprogramadordebedesabercomprobarrigursamentesusideasodarsecuentaqueest equivocado,estetutorialtambienincluyeproblemasdecomprobacinydeanlisismatemtico.

Requisitosparaentenderestetutorial
Paracomprenderestetutorialserequieremasquenada: ConocerellenguajedeprogramacinC/C++. Conocimientosbsicosdelgebrayteoradeconjuntos. Estarfamiliarizadocondefinicionesrecursivas. Entenderelanlisisdecomplejidaddefuncionesydeltiempodeejecucindeunprograma. Conocerydominarlascomprobacionespormediodeinduccinmatemtica.

mododeusodeltutorial
Losproblemasdeestetutorial,comotedarscuenta,notienenlmitesespecificados,niformatode entradaysalida;ynotodosrequierendeescribirunprograma. Elhechodequenotenganrangosespecificadoslosproblemas,nosignificaquesetengaqueusar memoriadinmica,esdecir,alresolverproblemasdeestetutorial,tuponloslmitesdeltamaoque creasconveniente,utilizaelformatodeentradaquecreasconveniente,yprocurausarmemoriaesttica. Perosidebestomarencuentalacomplejidadqueespecificaladescripcindelproblema. 1

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona Elobjetivodetodoestoesnoperdertiempocondescripcioneslargassinoirdirectoalproblema. Siencuentrasunerror,ohayalgoquenoseentiendeycumplesconlosrequisitosparaentenderel tutorial,mandameunmensajealuison.cpp@gmail.com

Qusonyparaqusirvenlasestructurasdedatos?
Enloqueserefierealaresolucindeproblemas,muchasvecesparaplantearelproblemaimaginamos objetosyaccionesqueserelacionanentresi. Porejemplo,unmeserotieneplatosdecoloresapilados;devezencuandoelquelavalosplatoscoloca unplatorecinlavadosobrelapiladeplatos;yenotrasocacioneselmeserotomaelplatoqueesta hastaarribaysirveahlacomidaquehasidopreparadaporelcocineroparaposteriormentellevarlaa sudestino. Sisabemosdequ coloreslapilainicialdeplatos,yenqu momentoselquelavalosplatoscoloc platossobrelapila(yclaro,tambiensabemoselcolordeestos),yenqumomentoselmeseroretirel platoqueseencontrabahastaarriba;podemossaberdequcolorserelplatoqueletocaacadacliente. Unamaneradesaberlopodraser,hacerunarepresentacindramaticadeloshechos;peroestonoes necesario,yaquetambienpodramostomarunlapizyunpapel,yescribirunalistadeloscoloresdelos platos,posteriormente,irescribiendoloscoloresdelosplatosquesepusieronenlapilaalfinaldela lista,yborrarelultimocolordelalistacadaqueunplatoseretire. Nosenecesitaserungranmatemticoparapensarenhacereso,sinembargo,enelmomentodequerer implementarunprogramaenCqueloreprodusca,nosencontramosconquenotenemosningunalista donde se coloquen y se quiten cosas del final, tenemos solamente arreglos, variables, estructuras, apuntadores,etc.ClaroquepodemossimularestalistaconlasherramientasquenosproporcionaC,asi pues,losobjetos(comolapiladeplatos)ligadosaoperaciones(comoponerunnuevoplatooquitarun plato)quemodificanalobjetosonllamadosestructurasdedatos. Una definicin sencilla de estructura de datos: unin de un conjunto de datos y funciones que modificandichoconjunto. Esmuyimportanteconocerlasestructurasdedatosmascomunesqueseutilizanenlaprogramacin, yaquelaestructuradedatosesvitalparaplantearelproblemayalresolverlo,poderimplementarsu solucineficazmente.

Pilas
Unapila,eslaestructuradedatosmencionadaenelejemploanterior,esdecir,unalterodeobjetos.O masformalmente,unaestructuradedatosenlacualsolosepuedenhacer2operaciones:colocarun elementoalfinal,oquitarunelementodelfinal. Lounicoquesepuedehacerenunapilaescolocarunobjetohastaarriba,oquitarelobjetoqueesta arriba,yaquesisequitaunobjetodeabajoodelcentro(lomismoquesiseintentaaadiruno),lapila colapsara. Siqueremosprogramaralgosimilar,lomasobvioesguardarlainformacindelapilaenunarreglo. 2

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona Imaginemosqueelrestauranttieneentotal10platos(unrestaurantbastantepobre),ellonosindicara queunarreglodetamao10podraguardartodoslosplatossintemoraqueeltamaodelarreglono alcance. Suponiendoqueinicialmentehay2platos,unodecolor1,yotrodecolor2,elarreglodeberalucir algoasi: 2100000000 Sirepentinamenteelquelavalosplatosponeunplatohastaarribadecolor2,luegodeelloelarreglo deberadelucirasi: 2120000000 Siluegoponehastaarribaunplatodecolor3,entonceselarreglodeberadequedarasi: 2123000000 Perosielmeserotomaunplatodearriba,elarregloestardenuevodeestamanera: 2120000000 Sielmeserovuelveatomarunplatodearriba,elarregloquedardeestamanera: 2100000000 Paralograresto,bastacondeclararunarregloyunavariable. Talqueelarreglodigaespecificamentequplatoshayenlapila,ylavariablecuntosplatoshay. Entonces,podemosdeclararunapiladelasiguientemanera(suponiendoquelapilaesdenmeros enteros): intpila[tamaomaximo]; intp=0; Cadaquequeramosaadirunelementoenlapartesuperiordelapila,essuficienteconestalneade cdigo: pila[p++]=objeto; Ycuandoqueramosretirarelelementoqueesteenlapartesuperior. pila[p]=0; Por ltimo,comoculturageneral,eninglesalapilaselellamastack,alaoperacindeponerun elementoenlapartesuperiorselellamapush,yladequitarunelementoselellamapop. Asi mismo, si la pila sobrepasa su tamao mximo, el error devuelto es stack overflow o desbordamientodepila(ahorayasabemosqu quierendeciralgunoserrorescomunesquesaturanel monitorenpantallasazules). Problema1.Compruebaqueessuficienteutilizarpenlugardepila[p]=0pararetirarunelemento delapila. Problema2.Enellgebra,comunmenteseutilizansignosdeagrupacintalescomo(),[]o{},yse puedenutilizarparaindicarelordenenqueserealizarnlasoperacionesaritmeticas.Ej.[a(x+y)+c]d+ (b(c+d)),sinembargo,existenciertasformasinvalidasdeutilizardichossignosdeagrupacinEj. [a+b) (a (b))otambien([a+b)c].Esdecir,cadasignoqueabredebetenerunsigno 3

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona correspondientequelocierre,cadasignoquecierradebedetenerunsignocorrespondientequ cerrar,ylossignosnosepuedentraslapar. Escribeunprograma,quedadaunaexpresinalgebrarica,determinesitieneonoerrorenlossignosde agrupacinentiempolineal. Problema 3. Una manera de encriptar mensajes(no muy segura), es colocar parentesis de manera arbitraria,ytodoloqueestadentrodeunparentesis,ponerloalreves,porejemploOlimpiadade InformaticasepuedeencriptarcomoOlimpia(ad)deI(rofn)matica,losparentesistambiensepueden anidar,esdecir,otraformadeencriptarelmismomensajepodraserOlimpia(am(nfor)Ied(da))tica. Escribeunprograma,quedadounmensajeencriptado,determineelmensajeoriginalentiempolineal. (9OlimpiadaMexicanadeInformtica) Problema4.Hay n farosacomodadosenlnearecta,cadafaropuedetenerunaalturaarbitraria,y adems,cadafarobrillaconciertaintensidad. Laluzdecadafaroiluminaunicamentealosprimerosfarosencadadireccincuyasalturassean estrictamentemayoresaladelfaroqueemitelaluz. Lailuminacintotaldeunfaro,eslasumadelaslucesquelleganalfaro(sinincluirlapropia). Escribeunprograma,quedadaslasalturasdelosnfarosylasintensidadesdecadauno,determinecual eselfaromasiluminadoentiempolineal. (USACO2006) Problema5.Unacuadriculabicolorada,esaquellaenlacualcadacuadropuedeestarpintadodecolor negroodecolorblanco(todosloscuadrosestanpintadosdealgunodeestos2colores).Puedesasumir quecadacasilladelacuadriculatienearea1. Escribeun programa,quedadaunacuadriculabicolorada,determineel readelmayor rectangulo (dentrodelacuadricula)pintadodeunsolocolor.Tuprogramadeber funcionarentiempolineal (linealenfuncindelnmerodecasillasdelacuadricula,NOenfuncindelabaseodelaaltura). (CroatianOlympiadinInformatics) Problema6.Consideraelsiguientealgoritmorecursivoparagenerarpermutacionesdearreglo[]desde iniciohastafin: 1 funcionpermuta(arreglo[],inicio,fin) 2 siinicio=finentonces 3 imprimearreglo[]; 4 fin_de_funcion; 5 parai=iniciohastafin 6 intercambia(arreglo[inicio],arreglo[i]); 7 pemuta(arreglo[],inicio+1,fin); 8 intercambia(arreglo[inicio],arreglo[i]); 9 fin_de_funcion; Escribeunafuncinnorecursivaquegeneretodaslaspermutacionesdearreglo[]desdeiniciohasta 4

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona fin,conlamismacomplejidadquelafuncinquesemuestra.

Colas
Imaginaunaconversacindechatentre2personas,aunquelosconversantesnosedencuenta,existe algollamadolag,esdecir,eltiempoquetardanlas2computadorasenmandarseyrecibirlosmensajes. Dependiendodelaconexin,el lag puedevariarentremenosdeunsegundooinclusomasdeun minuto. Siporunmomento,porfalladelservidor,unadelas2computadoraspierdelaconexin,yenese momento un usuario est intentando mandar varios mensajes, el programa de chat guardar los mensajesqueelusuarioesttratandodemandar,ycuandoserecuperelaconexin,elprogramadechat mandarlosmensajesenelmismoordenqueelusuariolosescribi. Obviamente,elprogramadechatnousaunapilaparaeso,yaquesiusaraunapila,elreceptorleeralos mensajesenelordeninversoqueelemisorlosescribi. Esdecir,enunapilaelultimoqueentraeselprimeroquesale.Deah quealaspilasselesconozca comoestructurasLIFO(LastIn,FirstOut). Existenotrasestructurasllamadascolas,enunacolaelprimeroqueentraeselprimeroquesale.Su nombrederivadelasfilasquesehacenenlossupermercados,cines,bancos,etc.Dondeelprimeroque llega,eselprimeroenseratendido,yelltimoquellegaeselltimoenseratendido(suponiendoque nohayapreferenciasburocrticasendichoestablecimiento). Lascolas,sonconocidascomoestructurasFIFO(FirstIn,FirstOut). Unacolaesunaestructuradedatos,enlacualslosepuedenaplicarestasdosoperaciones:colocarun elementoalfinal,oquitarunelementodelprincipio. Pararepresentarunacola,obviamentenecesitamostambienunarreglo;supongamosquehayvarios participantesenlacolaparaelregistrodelaOMI.Cadaparticipantetieneunnombrequeconsistede unnmeroenteromayoroigualque1.(Sonbastantepopularesesosnombresennuestrosdas) YcomofaltanmuchosestadosalaOMI,solohabr10participantes. Entonceselarreglopodraluciralgoasi... 0000000000 Enesemomentollega3yseforma 3000000000 Luegollega5yseforma 3500000000 Despuesllega4yseforma 3450000000 Luegollega9,ydespuesdeesollega2 3459200000 Entoncesalencargadodelregistroseleocurrecomenzaraatender,yatiendea3. Enlavidareal,losparticipantesdaranunpasohaciadelante,peroenunacomputadora,parasimular eso,seranecesariorecorrertodoelarreglo,locualesmuylento;porello,esmaspracticodejarel 5

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona primerespaciodelacolaenblanco. 0459200000 Luegoseatiendea4 0059200000 Enesemomentollega1corriendoyseforma 0059210000 etc. Yaparaestemomento,tedebesdeestarimaginandoqueparaimplementarunacola,unicamentese requiereunarregloydosvariables,dondelasvariablesindicandondeiniciaydondeterminalacola. Enunproblemadeolimpiada,siemprepodremossabercuantoselementosseformarnenlacola.Sin embargo,suponiendoqueseforma1einmediatamenteesatendido,sevuelveaformaryvuelveaser atendidoinmediatamente,yasi1000veces,entonces,deesamaneraserequeriraunarreglodetamao 1000,cuandonuncahaymasdeunelementodentrodelacola. Paraevitareso,podemosaadirelementosalprincipiodelacolasiyanohayespacioalfinal. Porejemplo,siluegodequeseatiendiamuchosparticipantes,lacolaestdeestaforma: 0000000073 Ypararectificaralgo5vuelveaformarse,podemoscolocara5alprincipio 5000000073 Luegosi4vuelveaformarse 5400000073 Puedeparecerextraoesto,peroelprogramasabr quelacolaempiezadondeest 7yterminadonde est4. Asiquesielorganizadoratiendealsiguiente,atendera7,ylacolaquedardeestamanera 5400000003 Luegoatendera3 5400000000 Despuesatendera5 0400000000 Yasisucesivamente... Implementarlaoperacindemeterunelementoalacolaesmuysencillo: cola[fin++]=elemento; if(fin>=tamaodelacola) fin=0; Ycaslomismoessacarunelementodelacola inicio++; if(inicio>=tamaodelacola) inicio=0; Problema7.Compruebaqueunacolaestallenaovacasiysolosiinicio=fin Problema8.Entunegociotienesunasecuenciadensillasacomodasenlnearectaynumeradasde1a 6

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona n,porcadapersonaquesesienteenunasillaconelnmerox,deberspagar$xalgobierno,perocomo quieres tener cmodos a los clientes, no tienes otra opcin que pedirles que tomen asiento; sin embargo,elaprecioporelclienteannotehaquitadolacodicia,porloquepuedesindicarleacada clientedondesentarse,peroelclientedesidecuandoirse;desdeelmomentoqueunclientellegahasta elmomentoqueseva,elclientepasar todoeltiemposentadoenunasillaynoestar dispuestoa compartirlaconnadiemas. Escribe un programa que dado el historial de qu clientes llegan y qu clientes se van en orden cronolgico, calcule que asientos asignarles a cada quien para que el dinero que debas pagar al gobiernoseaelmnimoposible.Tuprogramadeberfuncionarentiempolineal.

ListasEnlazadas
Frecuentementenecesitamosteneralmacenadasunas k listasdedatosenmemoria,sabiendoqueel nmerototaldedatosenmemorianosobrepasan. Sidisponemosdesuficientememoria,podemosguardarenmemoria n arreglosdetamao k ouna matrizdetamaonk,peronosiempredispondremosdetantamemoria. Tambienhayvecesqueserequierentenerlistasdenmerosyagregarnmerosadichaslistasperono alfinalnialprincipio,sinoenmedio. Parasolucionarestosyotrosproblemas,existenlaslitasenlazadas. Las listas enlazadas sonestructuras de datos compuestas por unasucesin deelementos llamados nodos;enlaquecadanodocontieneundatoyladireccindelproximonodo,encasodequehaya prximo. Lasiguienteimagenmuestraunarepresentacingrficadeunalistaenlazada.

Unaformadedefinirunnodoes: Unaestructuravaca unelementodeinformacinyunelaceaotronodo. Latareadeimplementarunaenlazadapuedehacerseeficazmentecon2arreglos:unoparaguardarlos datosyotroparaguardarlosenlaces,ademsserequiereunavariablequedigaeltamaodelalistade lasiguientemanera... intdato[tamaomaximodelalista]; intproximo[tamaomaximodelalista]; inttam_lista=1;//Tamaodelalista Lonicoquefaltadefinireselelementovaco,paraello,podemosasumirqueeldato0eselelemento vaco,yenelmomentoquenosencontremosconl,sabemosquelalistayahabrterminado. Insertarunnodoconundato x,justodespuesdeotronodo k,sepuedehacerfacilmenteentiempo 7

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona constante: 1 2 3 4 5 voidinsertar(intx,intk){ dato[tam_lista]=x; proximo[tam_lista]=proximo[k]; proximo[k]=tam_lista++; }

Loquehaceestecdigoescolocar x enelprimerespacioenblancodentrodelarreglo datos,luego colocarunenlacealsucesordekenelprimerespacioenblancodentrodelarreglodeproximo,yhacer quekapuntealnodoqueseacabadecrear. Deesaformakapuntaralnuevonodo,yelnuevonodoapuntaralnodoqueapuntabak. Elsiguientecdigoimprimetodoslosdatoscontenidosenunalista,asumiendoque1eselprimer elementodedichalista. 1 2 for(i=1;i!=0;i=proximo[i]) printf(%d,dato[i]);

Problema9. Implementaunalistadondesepuedanrealizarlassiguientesoperaciones:imprimirlos datosdelalistaenrden,agregarunnodoalalistayeliminarunnodoespecificadodelalista. Problema10.Siborrasunnododelalista,simplementeborrandosuenlace,nopodrasreutilizarese espaciodememoriaparaguardarmasdatos.Implementaunalistaquepermitainsertardespuesdexen ordenconstante,imprimirlalistaenordenlineal,borrarunnodoxenordenconstante,yquereutilize losespaciosdememoriadelosnodosborrados. (*nota:esmuyfacilhacerestoconmemoriadinamica,peroseinsisteenquenoesconvenienteusarla enlaolimpiada,hayunasolucindeesteproblemaquenorequierememoriadinamica,aunquepuede llegaraocupareldobledememoriaqueserequiereparaguardarlosdatosenlalista;encuentrala.) Problema11.Unverdugoesmandadoaexterminaranprisionerosdeguerra.Elexterminioloejecuta delasiguientemanera:losprinsionerosformanuncrculoalrededordelverdugo,elverdugoeligea quienfusilarprimero,unavezmuertoelprimero,elverdugocuenta,apartirdellugardondeestabasu ultimavictima,kprisionerosenordendelasmanesillasdelreloj,yluegofusilaalksimoprisionero despuesdesu ltimavctima(alosmuertosnoloscuenta),yrepiteesteprocesohastaquesoloquede unprisionero. Elltimoprisioneropodrserliberado. Elverdugotieneunamigoentrelosnprisioneros,escribeunprogramaquedado,n,kylaubicacinde suamigo,ledigaaquienfusilarprimero,paraasegurarquesuamigoseaelquequedelibre.

rbolesBinarios
8

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona

Seguramentedespuesdehabervistolaslistasenlazadas,telleg alamentelaideadecolocarmasde unenlaceencadanodo. Puesnofuisteelprimeroenteneresaidea,pueslosrbolesbinariossonestructurasdedatosparecidas alaslistasenlazadas,conladiferenciadequecadanodopuedetenerhasta2enlaces(deahelnombre debinario). Porahoranosreservaremosladefinicinrigurosade rbolbinario,puesrequieredeteoradegrafos paracomprenderla. Lasiguientefiguramuestraunejemploderbolbinario:

Antesdeseguirentrandoenmateria,serconvenientedarunascuantasdefiniciones: Elprimernododelrbolrecibeelnombrederaz,losenlacesrecibenelnombredearistas.

SedicequeunnodoBeshijodeunnodoA,siexistealgunaaristaquevadesdeAhastaB.Por ejemplo,enlafigura,7eshijode2,4eshijode9,11eshijode6,etc. AlmismotiemposedicequeunnodoAespadredeunnodoBsiexisteunaaristaquevadesdeA hastaB.Ej.9espadrede4,6espadrede5yde11,etc. Sedicequeunnodoeshoja,sinotienehijos.Ej.11y4sonhojas,pero6,7,y9noloson. Laramaizquierdadeunnodoesel rbolquetienecomorazelhijoizquierdodetalnodo,por ejemplo{7,2,6,5,11}sonlosnodosdelaramaizquierdade2. Laramaderechadeunnodoeselrbolquetienecomorazelhijoderechodetalnodo. Losnodostambienpuedenserllamadosvertices.

Losrbolesbinariostienenmuchasformasdeimplementarse,cadaunaconsusventajasydesventajas, porahorasolotrataremosuna. Los rbolesbinariospuedenserimplementadosutilizando3arreglos:clave(losdatosqueguardacada nodo),hijoizquierdoehijoderecho. Yporsupuestootravariableentera:elnmerodenodosenelrbol. intclave[maximodenodos];//Datoqueguardaelnodo 9

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona intizq[maximodenodos];//Hijoizquierdo intder[maximodenodos];//Hijoderecho intnodos=0; Enseguidasemuestranlosdatosquepodrancontenerlosarreglosparaobtenerelrbolquesemuestra ellafigura: nodo Clave Izq Der 0 2 1 4 1 7 2 3 2 2 1 1 3 6 6 5 4 5 1 7 5 11 1 1 6 5 1 1 7 9 8 1 8 4 1 1

Comoseobservaenlatabla,seesttomandoel0comoraz,yel1comovaco. Losrbolesbinariostienendiversasaplicaciones,lasmasfrecuentesimplicanordenamiento. Existen,adems,3formasrecursivasdistintasdevisitarlosnodosdeunrbolbinario:

RecorridoenPreorden.TambienllamadoBsquedaenProfundidadenlateoradegrafos,consiste en visitar primero elnodoactual,luegoel hijoizquierdoydespues el hijo derecho.Puede ser implementadodelasiguientemanera: 1 voidpreorden(intnodo){ 2 if(nodo==1) 3 return; 4 visita(nodo); 5 preorden(izq[nodo]); 6 preorden(der[nodo]); 7 } Silodeseas,puedesvisualizargraficamenteelrecorridoenpreordenenlasiguientedireccin:
http://www.olimpiadadeinformatica.org.mx/material%20de%20estudio/Presentaciones/Arboles_Preorden.swf

RecorridoenOrden.Enalgunoslugaresselemencionacomoinorden,consisteenvisitarprimeroel hijoizquierdo,luegoelnodoactual,yfinalmenteelhijoderecho.Elsiguientecdigoloilustra: 1 voidorden(intnodo){ 2 if(nodo==1) 3 return;; 4 orden(izq[nodo]); 5 visita(nodo) 6 orden(der[nodo]); 7 } Silodeseas,puedesvisualizargraficamenteelrecorridoenordenenlasiguientedireccin:


http://www.olimpiadadeinformatica.org.mx/material%20de%20estudio/Presentaciones/Arboles_Orden.swf

10

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona

Recorrido en Postorden. Como ya te imaginars, consiste en visitar primero los nodos hijos y despuselnodoactual. 1 voidpostorden(intnodo){ 2 if(nodo==1) 3 return;; 4 postorden(izq[nodo]); 5 postorden(der[nodo]); 6 visita(nodo) 7 } Silodeseas,puedesvisualizargraficamenteelrecorridoenpostordenenlasiguientedireccin:
http://www.olimpiadadeinformatica.org.mx/material%20de%20estudio/Presentaciones/Arboles_Postorden.swf

Quiz demomentonolesencuentrasmuchaaplicacinadichosrecorridos,perocadaunotienesu utilidadespecfica. Sepuedecrearunnuevonodofacilmenteconlasiguientefuncin: 1 intcrear_nodo(intdato){ 2 clave[nodos]=dato; 3 izq[nodos]=1; 4 der[nodos]=1; 5 returnnodos++; 6 } Comosepuedever,lafuncinrecibecomoparametroeldatoquevaatenerelnuevonodoyregresael lugarenelarreglodondeest ubicadoelnuevonodo,dependedelprogramadorsaberdndeponerel enlacedelnuevonodo. Problema12.Compruebaquetodorbolbinariotienen1aristas,dondeneselnmerodenodosdel rbol. Problema13.Lasucesindelosnmeroscatalnsedefinedelasiguientemanera: c(0)=1 c(x)=c(x1)*c(0)+c(x2)*c(1)+c(x3)*c(2)+...+c(x1)*c(0) Compruebaquec(n)eselnmeroderbolesbinariosquesepuedenformarconnnodos(sintomaren cuentalasclaves). Problema 14. Existe una manera de dibujar rboles binarios que requiere una cuadricula con n columnasnumeradasde1an(suponiendoqueneselnmerodenodosyhayunnmeroilimitadode filas).Elnodorazsedibujaenlafila1,sushijosenlafila2,loshijosdeestosultimosenlafila3,etc. Adems,paratodonodoA,todoslosnodosdelaramaizquierdadeAdebendedibujarseencolumnas menoresalacolumnadondesedibujaA,ytodoslosnodosdelaramaderechadeA,debendibujarse encolumnasmayoresalacolumnadondesedibujaA.Escribeunprogramaque,dadounarbolbinario, determineenqucolumnadibujarcadanodo.(CroatianOlympiadinInformatics) 11

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona Comosedijoanteriormente,los rbolesbinarioscomunmenteseutilizanenalgoritmosquerequieren deunauotramaneraordenamiento. Paraello,esmuyfrecuenteutilizarrbolesbinariosdebsqueda. Unrbolbinariodebsquedaesunrbolbinariocondatosguardadosensusnodos,quecumpleconlas siguientespropiedades:


Elvalordecadanodoesmayoroigualquelosvaloresdelosnodosdesuramaizquierda. Elvalordecadanodoesmayoroigualquelosvaloresdelosnodosdesuramaderecha.

Paracrearun rbolbinariodebusqueda,bastaconcolocarcualquiernodocomoraz,yluegoinsertar nodosdelasiguientemanera: 1 voidinsertar(intnodo,intdato){ 2 if(clave[nodo]>dato){ 3 if(izq[nodo]==1){ 4 izq[nodo]=crear_nodo(dato); 5 }else{ 6 insertar(izq[nodo],dato); 7 } 8 }else{ 9 if(der[nodo]==1){ 10 der[nodo]=crear_nodo(dato); 11 }else{ 12 insertar(der[nodo],dato); 13 } 14 } 15 } Lafuncinanterior,creaunnuevonodoconclavedatoyloinsertaenun rbol(osubrbol)quetiene raizennodo. Asiquesiqueremosgenerarunrboldebsquedaconlasclaves5,4,8,2,1,lounicoquetenemosque haceres: raiz=crear_nodo(5); insertar(raiz,4); insertar(raiz,8); insertar(raiz,2); insertar(raiz,1); Problema15.Demuestraquelafuncin insertar queseacabademostrarrealmenteinsertaunnodo conclavedatoenunrbolbinarioconrazennodo,demaneraquesielrbolbinarioesdebsqueda, seguirsiendolo. 12

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona Problema16.Cualeslacomplejidaddeinsertarunnuevonodoenunrbolbinariodebsquedaenel casopromedio?,yenelpeordeloscasos? Problema17.Muestraquesiunarbolbinariodebsquedaserecorreeninordenlosnodossevisitarn enordennodescendente.Unavezdemostradoesto,Cualeslacomplejidaddeordenarunasecuencia dennmeroscreandounrbolbinariodebsqueda? Problema18.Escribeunprogramaquedadounenterokyunrbolbinariodebusqueda,determinesi existeunnodoconclavekendicho rbol,tuprogramadeber realizarestaoperacinenO(logn)en casopromedioyO(n)enelpeorcaso. Programa 19. Escribe un programa que dados los recorridos en postorden y orden, determine el recorridoenpreordenenO(nlogn).

Grafos
Muchosproblemas,nospresentanalgunconjunto,enelcualalgunosparesdeelementosdedicho conjuntoserelacionanentres. Ejemplo:Enunareuninhay n invitados,seasumequesiuninvitado a conoceauninvitado b, b tambienconocea a, compruebaqueenlareuninhayalmenos2invitadosqueconocenalmismo nmerodeinvitados.Asmasetambienquetodosconocenporlomenosaalguiendelareunin. Enelejemploanterior,tenemosunconjuntodenpersonas,ycomovemos,algunosparesdepersonas seconocenentres. Pararesolverestetipodeproblemasesmuytilusargrafos,tambienllamadosgraficasporalgunos, sinembargo,aqu seutilizar eltrminografo,paraevitarqueseconfundaconelconceptodela graficadeunafuncin. Unaformauntantopobrededefinirungrafo(pocodespustrataremosladefinicinformal)es: conjuntodepuntosllamadosvrtices,enelcualalgunosverticespuedenestarunidosporlneas llamadasaristas. Volviendoalejemploanterior,esposibledibujarunpuntoporcadapersonadelareunin,yentrecada pardepersonasqueseconozcaentres,colocarunalnea. Porejemplosi6conocea4,4conocea5,5conocea1,5conocea2,2conocea1,3conocea2y4 conocea3,sepodradibujarungrafosimilaraeste:

13

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona

FiguraG1

Ahora,unavezquetenemosvisualizadadeciertamaneralasolucin,podemosverquecadanodo puedeestarconectadoconalomenosunnodo(cadainvitadoconoceporlomenosaotroinvitado)ya lomasn1nodos. Esdecir,elnmerodeconocidosdecadapersonavadesde1hastan1.Comocadapersonapuedetener n1 nmeros distintos de conocidos y hay n personas, por principio de las casillas al menos dos personasdeberntenerelmismonmerodeconocidos. Losgrafossonmuy tilesenproblemasqueinvolucranestructurastalescomocarreteras,circuitos electricos,tuberasdeaguayredesentreotrascosas,ycomoloacabamosdever,conlosgrafosincluso sepuedenrepresentarlasrelacionessocialesenunasociedad. Sieresobservador,talvezyatedistecuentaquetantolaslistasenlazadascomolosrbolessongrafos. Hayquehacernotarquenoimportacmosedibujenlosgrafos,silasaristasestancurvasorectas,osi losverticesestanendiferenteposicinnoesrelevante,lounicoqueimportaquparesdeverticesestan unidos. Porejemplo:

FiguraG2

Esdecir,ungrafo,masqueunconjuntodepuntosunidosporlneas,esunconjuntodeobjetosenel cualalgunosparesdeestosserelacionanentres,masformalmente: UngrafoesunconjuntoG={V,A},dondeloselementosdeVsonllamadosvertices,yAesun conjuntodeparesdevrticesllamadasaristas. Deesaforma,elgrafoquesedibujaarribasepuedeexpresarcomo: G={{A,B,C,D},{AB,AD,DB,DC,BC,AC}} 14

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona Estonoquieredecirqueparamanejargrafoshayqueolvidarsecompletamentededibujarloscomo puntosunidosporlneas,yaqueenundibujoasimplevistasepuedendistinguirdetallesdelgrafoque noserantanfacildistinguirlossineldibujo. Antesdeproseguiresconvenienteverunpocodelanotacinbasicaenlosgrafos:

Elgradodeunverticeeselnmerodearistasconectadascon l.Porejemplo,enlafiguraG1el nodoetiquetadocomo1tienegrado2,yelnodoetiquetadocomo4tienegrado3,mientrasqueenla figuraG2todoslosnodostienengrado3. ElnmerodearistasenungrafoG={V,A}sedenotacomo|A|. ElnmerodeverticesenungrafoG={V,A}sedenotacomo|V|. UncaminoCesunasucesindeverticesC={v1,v2,v3,...,vn},talqueparatoda0 i<nexisteuna aristaqueconectaviconvi+1. UncicloesuncaminoC={v1,v2,v3,...,vn}dondev1=vn. UngrafoconexoesungrafoG={V,A}dondeparatodovi,vjquepertenezcanaV,existeuncamino C={v'1,v'2,v'3,...,v'n}dondev'1=viyv'n=vj.Otraformadedecirloes,esposibleirdecualquier verticeacualquierotro. Ungrafodirigidoesaquelenelcuallasaristastienendireccin,esdecirunaaristaentreviyvjno implicaunaaristaentrevjyvi(FiguraG3).

FiguraG3Ungrafodirigido

Ungrafonodirigidoesaquelenelcuallasaristasnotienendireccin,esdecirunaaristaentreviyvj implicaunaaristaentrevjyvi(FiguraG4).

FiguraG4Ungrafonodirigido

Unrbolesungrafoconexosinciclos. Unbosqueesungrafosinciclos.

Problema20.Compruebaqueentodografonodirigido G={V,A},elnmerodevrticescongrado imparsiempreespar. Problema21.Compruebaquelasumadetodoslosgradosdetodoslosverticesenungrafonodirigido 15

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona G={V,A}es2|A|. Problema22.Compruebaquetodorboltienealmenos2verticesdegrado1. Problema23.Sea G ungrafoconexocon2n vertices,demuestraqueborrandounsubconjuntode aristas,esposibleobtenerungrafoconexotalquetodossusverticestengangradoimpar. (Amir2,Mathlinksforums) Problema24.Compruebaqueparatodorboldennodosenelquetodossusnodos,aexcepcindelas hojas,tienenexactamentekhijos,entoncesnmodk=1. (IanPARBERRY,ProblemsonAlgorithms) Problema 25. Un rbol de expansin de un grafo G={V, A} es un rbol T={V, B} donde B es subconjuntodeA.Pruebaqueungrafodennodosnopuedetenermasde(n1)!rbolesdeexpansin. Problema26.npueblosestanconectadospor2n1senderosdeunasoladireccin.Esposibleirdesde cualquierpuebloatodoslosdemas.Muestraquepodemosborrarunsenderodetalmaneraquela condicinanteriorsesigacumpliendo. (Labiliau,Mathlinksforums) Problema27.Pruebaqueesposiblecolorearlosnverticesdeungrafo(cadaunotieneungradoalo masde5)con2colores,talquealmenos3/5desusaristastenganextremosdediferentecolor. (Ukraina2004) Problema28.Algunosparesdepueblosenunpasestanunidosporsenderos,hayunaunicarutapara irdecualquierpuebloacualquierotrosinpasar2vecesporelmismopueblo.Exactamente100pueblos tienenunsolosendero.Muestraqueesposibleconstruir50nuevossenderos,detalmaneraquesialgun sendero(nuevooviejo)escerradopormantenimiento,anhabr algunarutaentrecualquierparde pueblosdelpas. (Russian2001) Luegodehabervistolanaturalezadelosgrafos,seguramenteestaspensandoencmoimplementaruna estructuradedatossimilaraungrafo. Hay muchas maneras de implementar grafos, pero solo se tratarn las 2 mas usadas: matriz de adyacenciaylistasdeadyacencia.

Estaesquizlaformamascomnderepresentarungrafoenunlenguajedeprogramacindebidoa susencilles,sinembargo,requiere|V|dememoria,yenlamayoradeloscasosesunpocolenta. UngrafoG={V,A}puedeserrepresentadocomounamatrizMde|V|x|V|,dondeMi,j0siexiste una arista enAque unealos nodos vi yvj.Por ejemplo,elgrafo delaFigura G1puede ser 16

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona representadocomo: M={ 010010 101000 010100 001010 110100 000100 } Laslistasdeadyacenciaconsistenen|V|listasenlazadas,esdecir,unalistaenlazadaparacada verticevquepertenzcaaV,dichalistaconstadelosnodosqueestanunidosavpormediodeuna arista.Laventajafundamentaldelaslistasdeadyacenciasobrelamatrizdeadyacenciaesquelas listasdeadyacenciasolorequieren|A|+|V|dememoria. Laimplementaciondeungrafopormatrizdeadyacenciaesbastantesimple: intm[nmero_de_vertices][nmero_de_vertices]; Sinembargo,larepresentacindeungrafoporlistasdeadyacenciaesunpocomascomplejaymuchos sevententadosausarmemoriadinamicaparaestoscasos;nuevamentesehaceincapiequelamemoria dinamicanoesparausarseenlaolimpiada. Sitenemosungrafode100000nodos,yalomasunmillndearistas,esobvioquenopodemos100 millistasreservandoespaciopara100milnodosencadauna,yaquerequeriraunagrancantidadde memoria que es muy probable que carezca de ella la computadora donde se vaya a ejecutar el programa. Lasolucinparaesto,esguardarlosdatosdetodaslaslistasenunsoloarreglo,yguardarcualesel primerelementodecadalistaenotroarreglo. Adems,sernecesariotenerunavariablequeindiqueelnmerodearistasdelalista. Enelsiguientecdigoilustracmoimplementarungrafoconalomas100000nodosyalomasun millndearistas: intdato[1000001];//Elnodohaciaelcualapuntalaarista intproximo[1000001];//Elsiguienteelementodelalista intprimero[100001];//Elprimerelementodelalistadecadanodo intaristas=1;//Elnmerodearistas Aqusedeclarcomounaaristainicialmenteparadejarlibreel0paraexpresarelelementovacoque indicaelfinaldetodalista. Elprocedimientodeinsertarunaaristaentre2nodostambinesalgotediosoconlistasdeadyacencia comparandoloalosimplequeesconmatrizdeadyacencia,lasiguientefuncininsertaunaaristaentre losnodosvywenungrafodirigido.

17

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona 1 2 3 4 5 voidinsertar_arista(intv,intw){ dato[aristas]=w; proximo[aristas]=primero[v]; primero[v]=aristas++; }

Comoseveenelcdigo,laaristasiempreseinsertaalprincipiodelalistadeadyacencia,paraquede esaforma,elconjuntodetodaslasaristasseinserteentiempolineal;yaquesiserecorrieralalistade adyacencia cada que se quisiera insertar una nueva arista, insertar todo el conjunto de aristas se realizaraentiempocuadratico,quedacomotareaparaellectordemostrarporqu. Problema29.Qu sucedesiseelevaalcuadradounamatrizdeadyacenciaqueconstasolode1sy 0s?,siseelevaalcubo?,siseelevaalan? Problema 30. Multiplicar una matriz tamao n x n por otra matriz de n x n requiere de n multiplicaciones.EncuentraunalgoritmodetiempoO(nlogk)paraelevarunamatrizMdenxnalak.

RecorridosenGrafos
Ahoraqueyaconocemoslosgrafosycmorepresentarlosenunacomputadracomenzaremosconuna desusaplicacionesmasbsicas:losrecorridosengrafosobsquedas. Bsicamentelasbsquedassirvenparavisitartodoslosverticesdeungrafoconexo,obiendeun subgrafoconexodemanerasistemtica. Esdecir,iniciamosenelverticeA,yqueremossaberdesdeah,aculesverticessepuedellegar,yla maneradehacerloes...Buscando!:D. Elprimerrecorridoqueveremosserlabusquedaenprofundidad. La busqueda en profundidad es un recorrido de grafos de naturaleza recursiva(aunque se puede implementardemaneranorecursiva). Recuerdaslaantigualeyendadelminotauro?Encasodequenolarecuerdesaqu valaparteque interesa: Habaunminotauro(unhombreconcabezadetoro)dentrodeunlaberinto,unvalientejoven,llamado Teseo se dispuso a matar al minotauro(el minotauro mataba gente, asi que no tengas lastima del minotauro;)),peroparanoperderseenellaberinto,tom unacuerdaparairmarcandopordondeya habapasado,ysaberqu recorridohabaseguido,paraas poderregresar.Luegocuandomat al minotauroregres siguiendosurastro,comolohabaplaneado,yelrestoyanotienequeverconel tema. Qumoralejanosdejaestahistoria? Basicamentequesinosencontramosenunlaberinto(oenungrafo),esnecesarioirmarcandoelcamino porelqueyapasamosysaberpordndevenamos. Laideadelabsquedaenprofundidadesdejarunamarcaenelnodoqueseestavisitando;ydespues 18

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona visitarrecursivamentelosvecinosdedichonodoquenohayansidovisitados. ElsiguientecodigoesunaimplementaciondelabsquedaenprofundidadenungrafoconNnodosy conmatrzdeadyacenciag: 1 2 3 4 5 6 7 voidvisitar(intnodo){ visitado[nodo]=1; for(i=1;i<=N;i++) if(g[nodo][i]!=0&&visitado[i]==0){ visitar(i); } }

Hayquemencionarqueenungrafo G={V, A},labsquedaenprofundidadfuncionaconmatrizde adyacenciaenO(|V|)mientrasqueconlistasdeadyacenciafuncionaenO(|V|+|A|). Elotrorecorridoquesevaatrataraqu eslabsquedaenamplitud(algunoslollamanbsquedaalo ancho).LamentablementelabsquedaenamplitudnofueideadeTeseo,ycomoteimaginars,esun pocomasdifcilqueaalguienseleocurracmohacelasinolaconoce. Paracomenzaraadentrarnosenlabsquedaenamplitudesconvenientequeimagineslasiguiente situacin: Eresmiembrodeunabandadebndalos(valgalaredundancia),ylabandatienecomocentrodereunin unaesquinadelaciudad.Losmiembrosdelabandaquierenquetodalaciudadsepaacuntascuadras se encuentran encadamomento desu terrirtorio,asi quedecidendejarpintados mensajes enla paredes de cada esquina de la ciudad diciendo a cuntas cuadras de encuentran del territorio prohibido. Ahora,eljefedelabandatehaencargadoatideterminarqunmeroqunmerosedebedepintaren cadaesquinadelaciudad. Latarea no esfacil,yaquesihaces rodeos,podras llegar acreerqueestasmaslejosdelo que realmenteteencuentras,ylaciudadnoesmuyrectangularquedigamos. Piensaunpococmoresolvereseproblemayluegocontinualeyendo. ....... Bueno,sinoseteocurri lasolucin(ojal silahayaspensadounpoco),loquedeberashacerenese caso,espintaralgoasicomoAlejate,esteesnuestroterritorioenlaesquinadondelabandatienesu centrodereunin,luegocaminarunacuadraencualquierdireccinypintarunalgoasicomoestasa unacuadradeterritorioprohibido,despusregresaralpuntodeencuentroycaminarunacuadraen otradireccinyotravezpintarlomismo,repitiendoesaoperacinhastaqueyasehayacaminadoen todaslasdirecciones. Despus,paracadaesquinadondehayasescritoestasaunacuadradeterrirtorioprohibido,caminas unacuadraentodaslasdireccionesyescribesestasadoscuadrasdeterritorioprohibido(claro,sino habaspintadonadaahanteriormente). Ycontinasashastahaberpintadotodalaciudadohastaqueteagarrelapolica. Nota: la solucinanterior nopretendefomentar el hbito del grafiti, sinoensear la bsqueda en 19

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona amplitud. La ideade la bsquedaenamplitudesvisitarunnodoinicial v,yluegovisitarlosnodosque se encuentrenaunaaristadev,despuslosqueseencuentrena2aristasdevyasisucesivamente. Deesaforma,labsquedaenamplitudvisitatodoslosnodosquepuedenseralcanzadosdesdev,ypara cadaunodeellos,computasudistancia(mnimonmerodearistas)conv. Enlasituacinqueimaginamosdelbndalopintandoparedes,elbndalotenaquecaminarmucho despuesdepintarcadaesquina,sinembargo,comonosotrosusaremosunacomputadorapararealizar unprocesosimilar,nonecesitamosestarcaminando,orecorriendotodoelgrafoenbuscadelsiguiente verticequehayquemarcar. Unaformamasrpidadeobtenerlosmismosresultadosesteniendounacola,ymetiendoavenlacola, luego.mientraslacolanoestevaca,sacarunverticedelacola,visitarlo,ymeteralosvecinosno visitadosalacola. Unamaneradehacerlo(asumiendoquelacolanuncasellenar)eslasiguiente: 1 2 3 4 5 6 7 8 9 10 11 12 cola[fin++]=v;//Metervalacola visitado[v]=1;//Inicializar distancia[v]=0; while(inicio!=fin){//Mientraslacolanoestevaca a=cola[inicio++];//Sacardelacola for(i=1;i<=N;i++)//Metervecinosalacola if(g[a][i]&&visitado[i]==0){ visitado[i]=1; distancia[i]=distancia[a]+1; cola[fin++]=i; } }

Elcdigoanteriorusaunamatrizdeadyacenciag,conNnodos. Comonodosevisitaunavezycadaaristasevisita1o2vecesdependiendodesielgrafoesdirigidoo no dirigido, este algoritmo funciona en tiempo O(|V|) con matriz de adyacencia y con listas de adyacenciafuncionaentiempoO(|V|+|A|). Problema31.DadoungrafoG={V,A}ydosverticessytenV,escribeunprogramaqueencuentreel caminomascorto(eldemenosaristas)entresytenO(|V|+|A|). Problema32.Esposiblegeneralizarlasolucindelproblemaanteriorparaencontrarelcaminomas largoenO(|V|+|A|)?,compruebaturespuesta. Problema33.Enunaextensareddecarreteras,cadacarreteraadmiteelpasedeautomovilesdeun pesomximo,tienesuncarrodepesow,yquieressabersipuedesirdelaciudadialaciudadf.Escribe unprogramaquedadoungrafo G={V, A}(losverticescomociudadesylasaristascomocarreteras) 20

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona representandolareddecarreteras,elpesomximoquesoportacadacarretera, w, i y f, determinesi puedesviajardesdeihastafcontucarrodepesowentiempoO(|A|+|V|). Problema34.Consideralamismasituacindelproblemaanterior,escribeunprogramaquefuncione entiempoO((|A|+|V|)logA)yquedadoslosmismosdatos,determinecualeselcarromaspesadocon elquesepuedeviajardesdeihastaf.(ProgramingChallengues,UVa) UngrafotorneoesungrafodirigidoG={V,A},enelcualparatodopardeverticesv,wpertenecientes aV,existeunaarista,yaseaquevayadesdevhaciawodesdewhaciav. Problema35.Compruebaqueentodografotorneo G={V, A}existeunvertice v en V,alcuales posiblellegardesdecualquierotrovrtice. (ARTHURENGEL,ProblemSolvingStrategies) Uncaminohamiltonianoesuncaminoquepasaportodoslosvrtices. Problema36.Compruebaqueentodografotorneoexistealomenosuncaminohamiltoniano.(IAN PARBERRY,ProblemsonAlgorithms) Problema37.Escribeunprogramaquedadoungrafotorneo,encuentreuncaminohamiltonianoen dichografoentiempoO(|V|log|V|). UngrafobipartitoescualquiergrafoG={V,A},enelcualVestacompuestopornodosblancosy negrosV={B,N},ynoexistearistaalgunaconextremosayb,talqueaybpertenezcanaB,ayb pertenezcanaN,esdecir,ungarfobipartitoesaquelenelquesusverticessepuedencoloreardeblanco odenegrodetalformaquelosnodosnegrossolamenteestenunidosconnodosblancosylosnodos blancossolamenteestenunicamenteconectadosconnodosnegros. Problema38.EscribeunprogramaquedeterminesiungrafoG={V,A}esbipartitoenO(|V|+|A|).

OtrasEstructurasdeDatos
Enestetutorialsetrataronlasestructurasdedatosbsicasmasusadas,perohayotrasestructurasde datosquesederivandestas,sloalgunasdeestassemencionanacontinuacin:

Colasdobles.Estructurasdedatosqueconstandeunasucesindeelementosypermiteninsertarun elementoalprincipio,quitarunelementodelprincipio,insertarunelementodelfinal,yquitarun elementodelfinal.TodasestasoperacionesenO(1). Colasdeprioridad.Estructurasdedatosqueconstandelassiguientsoperaciones:sabercualesel elementomasgrande,quitarelelementomasgrandeeinsertarunnuevoelemento. 21

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona

Listascirculares.Laslistascircularessonlistasdeadyacenciaenlascualeselultimonodotieneun enlacealprimero. Listasdoblementeenlazadas.Practicamenteigualesalaslistasenlazadas,peroademsdequecada elementoapuntealsiguiente,cadaelementoapuntaalsiguienteyalanterior. rbolesAVL.Un rbolAVLesun rbolbinariodebsquedaenelcual,paracadavrtice,la diferencia entrelasalturasdesuramaizquierdaysuramaderechaesmenoroiguala1. Hay algoritmosquepermiteninsercinyeliminacindenodosenunrbolAVLenO(logn). Montculos. rbolesbinarios,enloscualescadanodoesmayorquesushijos;ademsparacada nodoladiferenciadealturasentrelaramaizquierdaylaramaderechaesmenoroigualque1,yla ramaizquierdasiempretieneigualomasnodosoqueladerecha,omejordicho,todoslosnodosdel ltimonivelestantanalaizquierdacomopuedanenel rbol.Generalmenteseutilizaparacolas deprioridadoparaordenamientoyaquepermiteinsercinentiempologartmico,sabercualesel mayorentiempoconstante,yeliminacindelmayorentiempologartmico. Paramasinformacinsobremontculosvisitar: http://ce.azc.uam.mx/profesores/franz/omi/monticulo.html Enestapresentacinseilustraelfuncionamientodeunmontculo: http://www.olimpiadadeinformatica.org.mx/material%20de%20estudio/Presentaciones/Heap.swf Bosquedeconjuntos.Unbsquedeconjuntosesunbosqueenelquecada rbolrepresentaun conjunto,cadanodoapuntaunicamenteasupadre,ysinotienepadreapuntaas mismo.Permite sabersidoselementossondelmismoconjuntoyunirparesdeconjuntosentiempoO(logn)

EquivalenteenInglsdelaTerminologa
TrminoenEspa ol EstructuradeDatos Pila Cola Listaenlazadaolistaligada Nodovrtice rbol rbolbinario Hoja Raz Prerden Inrden Posorden rbolbinariodebsqueda Grafogrfica Grado Camino Ciclo 22 TrminoenIngls DataStucture Strack Queue LinkedList Vertex Tree BinaryTree Leaf Root Preorder Inorder Postorder BinarySearchTree Graph Degree Path Cycle

TutorialdeEstructurasdeDatosBsicas PorLuisE.VargasAzcona Grafodirigido Grafonodirigido Grafoconexo Bosque Matrzdeadyacencia Listasdeadyacencia Bsquedaenprofundidad Bsquedaenamplitudobsquedaaloancho Torneo Caminohamiltoniano Coladoble Coladeprioridad Listacircular Listadoblementeenlazada rbolAVL Montculo Conjunto Directedgraph Undirectedgraph Connectedgraph Forest Adjacencymatrix Adjacencylists Dephfirstsearch Breathfirstsearch Tournament Hamiltonianpath Deque Priorityqueue Circularlylinkedlist Doublylinkedlist AVLtree Heap Set

Fuentes
Cada problema que fue extraido de alguna fuente en especfico, tiene la fuente anexada en la descripcin. Algunasimgenesfueronextraidasdewww.algoritmia.net,ylamayoradewww.wikipedia.org. AlgunasdefinicionesfueronextraidasdeIANPARBERRY,ProblemsonAlgorithms.

23

También podría gustarte