You are on page 1of 154

ILI-134 Estructuras de Datos

2013-1

rboles
Prof. Diego Arroyuelo
darroyue@inf.utfsm.cl diego.arroyuelo@usm.cl

Universidad Tcnica Federico Santa Mara Campus Santiago, San Joaqun

rboles
Laslistasestudiadasenlaunidadanteriordelcursoson estructurasdedatoslineales:
Existeexactamenteunelementoprevioyotrosiguiente

Laslistastienenunalimitacinfundamental:
Olainsercin/borradooelaccesoaelementosarbitrarios sepuedehacerdeformaeficiente,peronoambos
Listasenlazadas:insercinyborradoentiempoO(1), accesoanodosarbitrariosentiempoO(n) Listassobrearreglos:insercinyborradoentiempoO(n), accesoanodosarbitrariosentiempoO(1)

rboles
rboles Listas

rboles
Lasestructurasderbolespermitentantoaccesoeficientealos elementosdelaestructuracomoactualizacindelamisma Enestetipodeestructurasnoexistesecuencialidadentrelos elementos,aunqueenlosarbolesexisteunaestructura jerarquica,demaneraqueunelementotieneunsolo predecesor,peropuedetenervariossucesores Dedicaremosestaunidadaestudiarestructurasdetiporbol

rboles
AlfinalizarlaUnidadelalumno: Conocerunafamiliacompletadeestructurasde tiporbol Sercapazdeimplementarestructurasdedatosde tiporbol Sercapazdereconoceraplicacionesquenecesiten elusoderbolesparasubuendesempeo

rboles
TemariodelaUnidad
Conceptoderbol,terminologabsica rbolesgenerales rbolesBinarios(AB) rbolesBinariosdeBsqueda(ABB) AVL rboles23 rbolesB,B+yB* Heapsycolasdeprioridad

Conceptos Principales

rboles
Losrbolessonunadelasestructurasmsusadasen informtica:
rbolessintcticosutilizadosporcompiladoresparainterpretar elementossintcticosdeunlenguaje,orepresentarexpresiones aritmticas(parachequeodetiposygeneracindecdigo) Representardatosparapermitirbsquedasyaccesoaellos relativamenterpido Sistemasdearchivos: Estructuradedirectoriosysubdirectoriosenformaderbolpara organizarlainformacin Diagramasdeclasesenprogramacinorientadaaobjetos Algoritmosdecompresindedatos Algoritmosdeordenamientodedatos

rboles: definicin
Unrbolestformadoporun conjuntofinitodeelementos, llamadosnodos Unodeesoselementoses identificadodemaneraespecial comolarazdelrbol Existeunarelacinpadrehijoque colocaalosnodosdelrbolenuna estructurajerrquica
Laestructuradedatosresultanteesnolineal: Cadanodopuedetenervariossucesoresenlaestructura Cadanodotieneunnicoantecesor

rboles: definicin formal


Definicinrecursivaderbol:
esunrbol(rbolvaco,tiene0 nodos)
[puntodeparadadeladefinicin recursiva]

SeanT1,T2,...,Tkrboles disjuntos,conracesr1,r2,...,rk. Searunnodo. Agregarr1,r2,...,rkcomohijosde rformaunrbol

r1, r2, ..., rk son los hijos de r:


r1 es primer hijo, r2 segundo hijo, etc. (hay un orden entre los hijos)

r es el padre de r1, r2, ..., rk

rboles: definicin formal


Ejemplo

rboles: terminologa
Losnodossecalificandeacuerdoalaposicinqueocupen dentrodelrbol:

Siexisteuncaminodesdeelnodoualnodovenelrbol,entoncesvesun descendientedeu(yuesunancestrodev)

rboles: terminologa

rboles: terminologa
Gradodeunnodo:nmerodedescendientesdirectosdelnodo (nmerodesubrbolesonmerodehijosdelnodo) Conestadefinicin,elgradodeunahojaes0 Gradodelrbol:nmeromximodehijosquetienenlosnodos delrbol Unalistaesunrboldegrado1 rbolbinario:rboldegrado2(cadanodotienealoms2 descendientesdirectos) rbolmultiario:rboldegradomayora2(cadanodo puedetenermsde2hijos)

rboles: terminologa

rboles: terminologa

rboles: terminologa

rboles: terminologa

rboles: terminologa

rboles: terminologa

Recorridos en rboles

Recorridos en rboles
Muchasaplicacionesnecesitanprocesarunrbolvisitandosus nodos,yrealizandoaccionessobreellos
Porejemplo,mostrarsucontenido,osumarsuvalor,etc.

Haydosmanerastpicasderecorrerunrbol
Recorridoenprofundidad Recorridoenanchura

Enelcursoestudiaremoslasmanerasderecorrerrboles,as comosusprincipalesaplicaciones

Recorridos en rboles
Recorridoenanchura
Nivel0 Nivel1 Nivel2 Nivel3 4 9 2 5 6 10 11 7 1 3 8

Elrbolsevisitaporniveles:
Primerosevisitalaraz,ysecolocantodossushijosenunaestructuratipoCola Seprocededelamismamanera,tomandosiempreelprimernododelacola

Recorridos en rboles
Recorridoenprofundidad
Consisteenmoverseencadapasodelrecorridohacianodosde mayorprofundidadenelrbol,hastaquenosepuedaavanzaren esesentido(porquesealcanzunahoja) Sepuedenllevaracabodetresmanerasdiferentes: RecorridoPreorden RecorridoInorden RecorridoPosorden

Recorridos en rboles
RecorridoenPreorden
1. Visitarnodoactual 2. VisitarhijoizquierdoenPreorden 3. VisitarhijoderechoenPreorden

1 2 3 5 4 6 8 7 9

Recorridos en rboles
RecorridoenInorden
1. VisitarhijoizquierdoenInorden 2. Visitarnodoactual 3. VisitarhijoderechoenInorden

6 2 1 3 4 5 7 8 9

Recorridos en rboles
RecorridoenPostorden
1. VisitarhijoizquierdoenPostorden 2. VisitarhijoderechoenPostorden 3. Visitarnodoactual

9 5 1 2 4 3 6 8 7

Recorridos en rboles
Recorridosenprofundidad
Suelenimplementarsedemanerarecursiva Sinembargo,tambinpuedenimplementarsedemaneraiterativa usandopilascomoestructurasauxiliares Estudiaremosesasimplementacionesenelcurso

Implementacin de rboles Generales

Implementacin de rboles Generales


Unrbolgeneralestformadoporunconjuntodenodos Adiferenciadelaslistas,cadanododebesercapazdeaccederal conjuntodesussucesores
(enlaslistastenamosunnicosucesorpornodo)

Debemossercapacesdemovernosentrenodos,parapoder recorrerlosrboles Tambin,debemossercapacesdeobtenerelelemento almacenadoenelnodoactual

Implementacin de rboles Generales


Supondremoslasiguientedefinicinparaeltipodedatosde loselementosalmacenadosenunrbol
typedefinttipoElem; //tipodeloselementos
// almacenadosenelrbol

Estetiposerredefinidodeacuerdoaltipodeelementosque sedeseaalmacenarenelrbol Laclaveenlaimplementacindependerdelacorrecta definicindelTDAtreeNodequerepresentalosnodosdel rbol

Implementacin de rboles Generales


Cadanododelrbolpuedetenerunnmeroindeterminadodehijos Debemosmantenerreferenciasaesosnodoshijosdesdeunnodo
Enunalistaestoesmssimpleporquehayunnicosucesorpornodo, yademshayunordenentreloselementosdelalista

Posiblessoluciones:
Porcadanodo,almacenarunarregloconpunterosalosnodoshijo
Requieresaberdeantemanocuntoshijostendrcomomximounnodo. Sedesperdiciaespacioenlosnodosquetienenmenoshijosqueelmximo Accesoahijosarbitrariossepuedehacermuyeficientemente(O(1))

Porcadanodoalmacenarslodospunteros
PunteroalprimerhijoyPunteroalsiguientehermano Nodesperdiciaespacioparahijosquenoexisten,peroaccesoahijos arbitrariosnoeseficiente

Implementacin de rboles Generales


Porejemplo,laimplementacinusandopunterosescomoa continuacin:

Implementacin de rboles Generales


A B E J F K L P C G M Q D H N I O A

hermano

hij
B E J F K

C G L P M Q

D H N I O

Implementacin de rboles Generales


LassiguientessernlasoperacionessoportadasporelTDA treeNode
//obtieneelvaloralmacenadoenunnodoN

tipoElemgetValue(treeNode*N);
//almacenaunvalordentrodeunnodoN

voidsetValue(treeNode*N,tipoElemitem);
//obtieneelprimerhijodeunnodoN

treeNode*firstChild(treeNode*N);
//obtieneelsiguientehermanodeunnodo

treeNode*nextSibling(treeNode*N);

Implementacin de rboles Generales


UnaposibledefinicindeltipotreeNodeenC:
typedefstructnodoArbol{ tipoEleminfo; structnodoArbol*hijoIzq; structnodoArbol*hermDer; }tNodoArbol;

ApartirdeesteTDAunopuededefinirunrbolgeneral (Ejercicio!)

rboles Binarios

rboles Binarios

rboles Binarios
Laimplementacindeunrbolbinarioesmssimplequelade losrbolesgenerales
Cadanodoslodebemantener2punteros:
Punteroalhijoizquierdo Punteroalhijoderecho

PodemosimplementareltipoenC:
typedefstructnodoArbolBin{ tipoEleminfo; structnodoArbolBin*izq; structnodoArbolBin*der; }tNodoArbolBin;

rboles Binarios
ImplementacindeunrbolbinarioenC
Unrbolbinarioseidentificaconunpunteroasunodoraz,el cualdaaccesoatodalaestructura
typedefstruct{ tNodoArbolBin*raiz; intnElems; }arbolBin;

rboles Binarios: propiedades

rboles Binarios: aplicaciones

Aplicacin 1: rboles de Expresin

Distintos recorridos sobre el rbol permiten obtener la expresin aritmtica en diferentes notaciones

Aplicacin 2: rboles de Decisin

Aplicacin 2: rboles de Decisin


Otroejemplodeusoderbolesdedecisinesalordenarun conjuntodenmeros Supongamosquequeremosordenarunconjuntode3 elementos:A,ByC Elprocesosepuedemodelarconunrboldedecisin

Aplicacin 3: rboles de Bsqueda


Unadelasaplicacionesmsimportantesdelosrbolesesenla bsquedadeelementosdentrodeunconjuntodedatos Dedicaremoselrestodeestaunidadaestudiarrbolesde bsqueda

rboles Binarios de Bsqueda (ABB)

rboles Binarios de Bsqueda


Unrbolbinariodebsqueda(ABB)esunrbolbinarioquealmacena elementosdeunconjuntoypermitebuscarporellos Parapermitirlabsquedaeficiente,loselementosdelrboltienenque estarordenadosdelasiguientemanera:

y
Elementos x < y

Elementos x > y

Al buscar por un elemento x': Si x' < y Buscarlo en el subrbol izquierdo Si x' > y Buscarlo en el subrbol derecho

rboles Binarios de Bsqueda


Ejemplo
28

16

30

19

29

32

12

17

21

Elementos entre 16 y 28

rboles Binarios de Bsqueda


ImplementacindelTDAABB
ElTDAABBseimplementausandocomobaselosnodosdelos rbolesbinariosyadefinidosanteriormente LaprincipalcomplicacinqueencontraremosalimplementarlosABB esmantenerlacondicindeABBdespusdeinsertaryborrar elementos

Implementacin de ABB
LassiguientessernlasoperacionessoportadasporelTDA tABB
//inicializaunABBcomovaco

voidinitTree(tABB*T)
//eliminatodosloselementosdeunABBT,dejndolovaco

voidclear(tABB*T);
//insertaunelementoitemenelABB

voidinsert(tABB*T,tipoElemitem);
//eliminaunelementoitemdeunABB

voidremove(tABB*T,tipoElemitem);

Implementacin de ABB
LassiguientessernlasoperacionessoportadasporelTDA tABB
//buscaunitemenunABBT,retorna0encasodenoencontrarlo

intfind(tABB*T,tipoElemitem);
//cantidaddeelementosenelrbol

intsize(tABB*T)
//recorridoinordendeunABBT

voidinOrden(tABB*T);
//recorridopreordendeunABBT

voidpreOrden(tABB*T);
//recorridopostordendeunABBT

voidpostOrden(tABB*T);

Implementacin de ABB
ImplementacindeltipotABBenC
typedefstruct{ tNodoArbolBin*raiz; //punteroalnodoraizdelABB intnElems; }tABB;
//cantidaddeelementosenelABB

ImplementacindelasoperacionesdelTDAtABB
//inicializaunABBcomovaco

voidinitTree(tABB*T){ T>raiz=NULL; nElems=0; }

Implementacin de ABB
ImplementacindelasoperacionesdelTDAtABB
//eliminatodosloselementosdeunABBT,dejndolovaco

voidclear(tABB*T){ clearHelp(T>raiz);//funcinauxiliarparaeliminarlosnodos T>raiz=NULL; T>nElems=0; }


//funcinauxiliarrecursivaparaeliminarlosnodosdelrbol

voidclearHelp(tNodoArbolBin*nodo){ if(nodo=NULL)return; clearHelp(nodo>der); }


//rbolvaco,sedetiene

clearHelp(nodo>izq); //visitasubrbolizquierdorecursivamente
//visitasubrbolderechorecursivamente

free((void*)nodo);//despusdeborrarsubrboles,seborraasmismo

Implementacin de ABB
ImplementacindelasoperacionesdelTDAtABB
//recorridoinordendeunABBT

voidinOrden(tABB*T){ inOrdenHelp(T>raiz); } voidinOrdenHelp(tNodoArbolBin*nodo){ if(nodo==NULL)return; inOrdenHelp(nodo>izq); procesar(getValue(nodo)); inOrdenHelp(nodo>der); } Ejercicio:implementarlosbarridospreordenypostordensobreelTDAABB


//visitahijoizquierdoeninorden //procesanodoactual //visitahijoderechoeninorden

Implementacin de ABB
ImplementacindelalgoritmodebsquedasobreunABB
Laideaesusarelordendeloselementosenelrbolparaguiarla bsquedaenelABB Seaxelelementobuscado Comenzandodesdeelnodorazdelrbol,serepitenlossig.pasos:
1. Sielnodoactualesrbolvaco(NULL)elementonoestenABB 2. Sixesigualalvaloralmacenadoenelnodoactualelemento encontrado,sedetienelabsqueda 3. Sixesmenoralvaloralmacenadoenelnodoactualcontinuarla bsquedaenelhijoizquierdodelnodoactual 4. Sixesmayoralvaloralmacenadoenelnodoactualcontinuarla bsquedaenelhijoderechodelnodoactual

Implementacin de ABB
ImplementacindelalgoritmodebsquedasobreunABB
//buscaunitemenunABBT,retorna0encasodenoencontrarlo

intfind(tABB*T,tipoElemitem){ returnfindHelp(T>raiz,item); } intfindHelp(tNodoArbolBin*nodo,tipoElemitem){ if(nodo==NULL)return0;//itemnoestenelABB if(getValue(nodo)==item)return1;//itemencontrado if(item<getValue(nodo)) returnfindHelp(nodo>izq,item); else returnfindHelp(nodo>der,item); }

Implementacin de ABB
ImplementacindelalgoritmodeinsercinenunABB
Antesdeinsertarunnuevoelementox,debemosbuscarporlenelrbol Estotienedospropsitos
AsegurarsequexyanoseaunelementodelABB(asumimosquelos elementosnopuedenrepetirse) Encontrarelpuntodeinsercindex:elnuevoelementodeberaser insertadoenellugarendondelabsquedafall,porquedeesamanera podrserencontradocuandosebusqueporl.

Importante
LainsercindeunnuevoelementoenunABBdebepreservarlacondicin deordendelABB Lainsercindenuevoselementossiempreocurreaniveldelashojasdel rbol(nuncaentredosnodosyaexistentes,comoenlaslistas)

Implementacin de ABB
Ejemplo:supongamosquevamosainsertarelvalor20enesterbol
28

16 5 12 17 19 21

30 29 32

20 debe insertarse como hijo izq. de este nodo

Implementacin de ABB
ImplementacindelalgoritmodeinsercinenunABB
Ejemplo:Paracadaunadelassiguientessecuencias,construirelABB correspondiente

10 5 7 14 12 18 15 15 18 14 5 10 12 7

Implementacin de ABB
ImplementacindelalgoritmodeinsercinenunABB
Para : 10 5 7 14 12 18 15

Arbol vaco NULL

Implementacin de ABB
ImplementacindelalgoritmodeinsercinenunABB
Para : 10 5 7 14 12 18 15

Arbol vaco NULL

Insertar 10: 10

Implementacin de ABB
ImplementacindelalgoritmodeinsercinenunABB
Para : 10 5 7 14 12 18 15

Arbol vaco NULL

Insertar 10 10

Insertar 5: 10 5

Implementacin de ABB
ImplementacindelalgoritmodeinsercinenunABB
Para : 10 5 7 14 12 18 15

Arbol vaco NULL

Insertar 10 10

Insertar 5: 10 5

Insertar 7: 10 5 7

Implementacin de ABB
ImplementacindelalgoritmodeinsercinenunABB
Para : 10 5 7 14 12 18 15

Insertar 14: 10 5 7 14

Implementacin de ABB
ImplementacindelalgoritmodeinsercinenunABB
Para : 10 5 7 14 12 18 15

Insertar 14:| 10 5 7 14 5

Insertar 12: 10 14 7 12

Implementacin de ABB
ImplementacindelalgoritmodeinsercinenunABB
Para : 10 5 7 14 12 18 15

Insertar 14:| 10 5 7 14 5

Insertar 12: 10 14 7 12

Insertar 18: 10 5 7 12 14 18

Implementacin de ABB
ImplementacindelalgoritmodeinsercinenunABB
Para : 10 5 7 14 12 18 15

Insertar 15: 10 5 7
Ejercicio: Mostrar los valores almacenados en los nodos del ABB haciendo un recorrido in-orden del rbol

14 12 18

15

Implementacin de ABB
ImplementacindelalgoritmodeinsercinenunABB
Ejercicio:implementarlaoperacin
//insertaunelementoitemenelABB

voidinsert(tABB*T,tipoElemitem);

siguiendolaideaantesexplicada Ejercicio:Repetirelprocesodeinsercinparalasecuencia

5 7 10 12 14 15 18 Cmoeselrbolresultante? Loselementosainsertarsonlosmismos... GeneranambassecuenciasdeinsercinelmismoABB?

Implementacin de ABB
ImplementacindelalgoritmodeborradoenunABB
AntesdeborrarunelementoxdeunABB,debemosbuscarporlenel rbol Estotienedospropsitos
AsegurarsequexseaunelementodelABB Encontrarelpuntodeborrado

Importante
ElborradodeelementoenunABBdebepreservarlacondicinde ordendelABB Adiferenciadelasinserciones,losborradospuedenocurriren cualquierpartedelrbol,nonecesariamenteenlashojas

Implementacin de ABB
ImplementacindelalgoritmodeborradoenunABB
Dependiendodelnodoaborrar,tenemostrescasos: 1. Borrarunnodohoja 2. Borrarunnodoquetieneunnicohijo 3. Borrarunnodoquetienedoshijos

Implementacin de ABB
ImplementacindelalgoritmodeborradoenunABB
Caso1:borrarunahojaseresuelveeleminandoelnododelrbol
28 28

16 5 12 17 borrar 29 21

30 32 5 12

16

30 29 21 32

19

19

Implementacin de ABB
ImplementacindelalgoritmodeborradoenunABB
Caso2:borrarunnodoquetieneunnicohijoseresuelve reemplazandoelnodoporsuhijo
28 28

16 borrar 19 17 21 29

30 32 17

19

30 29 32

21

Implementacin de ABB
ImplementacindelalgoritmodeborradoenunABB
Caso3:borrarunnodocondoshijosseresuelvereemplazandoel elementodelnodoporsusucesor/predecesor,yluegorecursivamente borrarelsucesor/predecesor(Caso1o2)
28 borrar 16 5 12 18 20 29
Sucesor de 28

25

30 32 5 12

16 29

30 32

25
Predecesor de 28

25 20 18

Ahora debemos borrar este elemento

23

23

Implementacin de ABB
ImplementacindelalgoritmodeborradoenunABB
Caso3:borrarunnodocondoshijosseresuelvereemplazandoel elementodelnodoporsusucesor/predecesor,yluegorecursivamente borrarelsucesor/predecesor(Caso1o2)
25 25

16 5 12 18 20 29

30 32 5 12

16 20 18 23 29

30 32

25

Ahora debemos borrar este elemento

23

Nota: el sucesor/predecesor de un nodo en un ABB tiene a lo ms 1 hijo


(ver la gua de ejercicios)

Implementacin de ABB
ImplementacindelalgoritmodeinsercinenunABB
Ejercicio:implementarlaoperacin
//insertaunelementoitemenelABB

voidremove(tABB*T,tipoElemitem);

siguiendolaideaantesexplicada

Anlisis de Complejidad en ABB


Anlisisdelacomplejidaddelasoperaciones
LacomplejidaddebsquedadeunelementoenunABBdependedela profundidadenlaqueseencuentreelnodocorrespondiente Unnodomuyprofundoesmscostosodeencontrar PeroCunprofundopuedeencontrarseunnodoenunABB? Paraacotarlascomplejidadesasintticamente,convienerecordarlas propiedadesdealturadelosrbolesbinarios AlturamnimadeunrboldennodosesO(logn) AlturamximadeunrboldennodosesO(n)

Anlisis de Complejidad en ABB


Anlisisdelacomplejidaddelasoperaciones
Porlotantotenemosparaunrboldennodos: CostodepeorcasoenlabsquedaenABB:O(n) CostodemejorcasoenlabsquedaenABB:O(logn) Esenestoscasosdondeconvieneestudiarelcostopromediodela operacin Afortunadamente,sepuededemostrarquelaprofundidadpromediode unnodoenunABBesO(logn),porlotantotenemos: CostodecasopromedioenlabsquedaenABB:O(logn)
(noveremoslademostracinenelcurso)

Anlisis de Complejidad en ABB


Anlisisdelacomplejidaddelasoperaciones
Paramantenerbuenostiemposdebsqueda,loidealestenerrboleslo msbalanceadosposibles Esdecir,rbolesqueminimizanlaaltura Dadounconjuntodeelementos,elABBresultantedependedela secuenciadeinsercindeloselementos: Haysecuenciasdeinsercinqueproducenmejoresrbolesque otras
Porejemplo,dadoelconjuntodeelementos {1,24,31,34,45,46,57} Compararlosrbolesobtenidosparalasecuenciadeinserciones 1243134454657versus3424311464557

Anlisis de Complejidad en ABB


Anlisisdelacomplejidaddelasoperaciones
Dadoqueprevioalainsercin/borradohayquehacerunabsqueda,las operacionesinsertyremovetambintienen: Peorcaso:O(n) Casopromedio:O(logn) Enresumen,losABBsonunaestructuradedatosqueproveetiempo eficienteparatodaslasoperaciones,aunquesucostodepeorcasoes malo

rboles AVL

rboles AVL
LosABBbuscantenerbuentiempodebsqueda,yalavezbuen tiempodemodificacindelaestructuradedatos(insercin/borrado) Sinembargo,lacomplejidaddepeorcasodelasoperacionesno esmuybuena:
O(n)parabsquedaeinsercin/borrado

Estudiamosacontinuacinunaestructuraderbolbinario quepermitelograrcomplejidadesdepeorcasoO(logn)para todaslasoperaciones

rboles AVL
Definicin
UnrbolbinariodebsquedaesAVLsi,paratodonododelrbol,la alturadesussubrbolesdifierealomsen1. Estasimplerestriccinhacequeunrboldennodostenga alturamximaO(logn)

NotaHistrica
ElnombreAVLesenhonoradosmatemticosrusos,G.M.Adelson Vel`skiiyE.M.Landis,quienesidearonelmtodoen1962.

rboles AVL
EjemplosderbolesAVL

rboles AVL
EjemplosderbolesnoAVL

Los nodos marcados no cumplen con la propiedad AVL

rboles AVL
Factordeequilibrio
Paracadanododelrbolsedefinesufactordeequilibrio:
fe(x)=alturasubrbolderechodexalturasubrbolizquierdodex

Indicaculeslasituacindeequilibrioenesenodo Completamenteenequilibrio=1 Desequilibradoalaizquierda=1 Desequilibradoaladerecha=1 Sielfactordeequilibrioalcanzavalor2o2,sepierdela propiedadAVL Agregarunnuevocampoenelstructquedefinelosnodos

rboles AVL
Factordeequilibrio
Cuandounnuevoelementoseinserta,elfactordeequilibriode sunodoseinicializaen0 Despusdecadainsercinhabrquerevisarqueelfactorde equilibriodelosnodosinvolucrados(losqueestnenelcaminodesdelaraz hastaelpadredelnodoinsertado,elrestonopuedecambiardealtura)nosehaya daado Encasodedaarseelfactordeequilibriodeunnodo,tendremos quereestructurarelrbol

rboles AVL
f.e.=2 f.e.=1 f.e.=0
desequilibrioaladerecha

f.e.=2 f.e.=1 f.e.=0

desequilibrioalaizquierda

rboles AVL
desequilibrioaladerecha desequilibrioalaizquierda

f.e.=2 f.e.=1

f.e.=2 f.e.=1 f.e.=0

f.e.=0

rboles AVL
RotacionesenunAVL
Despusdeunainsercinoborrado,sielfactordeequilibriode algunodelosnodosinvolucradoses2o2hayquerealizaruna correccindeste Estoselogramedianterotaciones
Unasecuenciadeintercambiodepunterosenelrbolpara recuperarelequilibriodelrbol

Unhechomuyimportantedeestasrotaciones,esquesemantiene elordenamientodelrbol
sielrboloriginaleraABB,elresultadotambinloseguirsiendo

rboles AVL
Rotacionessimples
Sidespusdeunainsercin/borradounnodoestdesequilibradoala izquierda(fe=2),ysuhijoizquierdotieneelmismosigno(),se corrigeconunarotacinsimplealaderecha. f.e.=2 f.e.=1

7 f.e.=0 2 9

rboles AVL
Rotacionessimples
Sidespusdeunainsercin/borradounnodoestdesequilibradoala izquierda(fe=2),ysuhijoderechotieneelmismosigno(+),secorrige conunarotacinsimplealaizquierda.

2 f.e.=2 7
f.e.=1

7 f.e.=0 2 9

rboles AVL
Rotacionesdobles
Sielnodoestdesequilibradoalaizquierda(FE=2),ysuhijo izquierdotienedistintosigno(+)hacerrotacindobleizquierda derecha.

f.e. = -2 f.e. = 1
3

f.e. = -2 f.e. = -1
5

f.e. = 0
5

5 3 8

f.e. = 0

rboles AVL
Rotacionesdobles
Sielnodoestdesequilibradoaladerecha(FE=2),ysuhijoderecho tienedistintosigno()hacerrotacindoblederechaizquierda.

f.e. = 2

f.e. = 2

f.e. = 0
10

f.e. = -1

13

f.e. = 1

10 8 13

10

13

rboles AVL
InsercinenunAVL
Sehaceunainsercinounaeliminacinsegnelmtodo tradicionaldelABB. Posteriormentesedeberanalizarsisehaproducidoun desbalance. Msalldequepuedenservarioslosnodosdesbalanceados,hay quepreocuparsedelltimonodoenelcaminodeinsercinquese encuentredesbalanceado Siesas,aplicarlasrotacionescorrespondientespararestaurarlo.

rboles AVL
InsercinenunAVL
Caso 1:

Resultado :
10

10

Input : 17
5 15 15 17

El rbol permanece AVL

rboles AVL
InsercinenunAVL
Caso 2:

Input : 18
10
5

10

15

15
12 16

12

16
18

Se produce desbalance en el subrbol derecho externo: se debe sigue hacer una rotacin simple a la izquierda.

rboles AVL
InsercinenunAVL
10

Resultado :
15

Rotacin simple a la izquierda


15 5 16

10

16

12

18

12

nodoAVL*rotIzq(nodoAVL*a){ nodoAVL*temp=a>der;
18

a>der=temp>izq; temp>izq=a; returntemp; }

rboles AVL
InsercinenunAVL
a
10 5 12 temp

15 16 18

nodoAVL*rotIzq(nodoAVL*a){ nodoAVL*temp=a>der; a>der=temp>izq; temp>izq=a; returntemp; }

rboles AVL
InsercinenunAVL
a
10 5 12 temp

15 16 18

nodoAVL*rotIzq(nodoAVL*a){ nodoAVL*temp=a>der; a>der=temp>izq; temp>izq=a; returntemp; }

rboles AVL
InsercinenunAVL
a
10 5 12 temp

15 16 18

nodoAVL*rotIzq(nodoAVL*a){ nodoAVL*temp=a>der; a>der=temp>izq; temp>izq=a; returntemp; }

rboles AVL
InsercinenunAVL
temp

15

nodoAVL*rotIzq(nodoAVL*a){ nodoAVL*temp=a>der; a>der=temp>izq; temp>izq=a; returntemp; }


5

10

16

12

18

rboles AVL
InsercinenunAVL
Caso 3: 10

Input : 4
5

10

15

15 2 6

6 4

Se produce desbalance en el subrbol izquierdo externo: se debe hacer una rotacin simple a la derecha. sigue

rboles AVL
InsercinenunAVL
10

Rotacin simple a la derecha


5 15 2 2 6
nodoAVL*rotDer(nodoAVL*a){

10

15

nodoAVLtemp=a>izq; a>izq=temp>der; temp>der=a; returntemp; }

rboles AVL
InsercinenunAVL
Caso 4: 10 5 5 15 2 12 16 4 6 15

Input : 13

10

Se produce desbalance en el subrbol derecho interno: se debe hacer una rotacin doble derecha-izquierda. sigue

rboles AVL
10

InsercinenunAVL
10

12 15

15 13 12 13 16 12 16

NodoAVL*rotDerIzq(nodoAVL*a){ a>der=rotDer(a>der); returnrotIzq(a); }

10

15

13

16

rboles AVL
InsercinenunAVL
Caso 5: 10

Input : 8
10

15

15

Se produce desbalance en el subrbol izquierdo interno: se debe hacer una rotacin doble izquierda-derecha.

sigue

rboles AVL
10

InsercinenunAVL
10 5 2 2 6 6 8
NodoAVL*rotIzqDer(nodoAVL*a){ a>izq=rotIzq(a>izq); returnrotDer(a); }

6 8

15

15

10

15

rboles AVL
InsercinenunAVL
Ejercicio InsertarenunrbolAVL(inicialmentevaco)lasiguiente secuenciadenmerosenteros: S={100,60,40,120,140,110,114,116} Dibujelasecuenciadeinsercindecadaelementoylas respectivasrotacionesqueseanecesariorealizar.

rboles AVL
EliminacinenunAVL
Nosiempreelresultadodeeliminarunnododarcomoresultado unrbolAVL SisepierdelacondicinAVL,sedeberrestaurarelfactorde equilibrio,delamismamaneraqueconlasinserciones

Heaps y Colas de Prioridad

Heaps y Colas de Prioridad


Muchasaplicacionesquemanipulanconjuntosdedatosnonecesitan buscarporelementosarbitrariosdelconjunto
sinoquenecesitanconsultarporelmximoomnimovalor almacenadoenelconjuntoencadamomento
(seguimosasumiendoconjuntosdinmicos)

Porejemplo,Colasdeprioridad:
Elementoslleganalsistemaconciertaprioridad,yencadamomentose atiendealelementodemayorprioridad Llegadasdepacientesenfermosaserviciodeurgencia,ollegadade procesosaserejecutadosporunsistemaoperativo

EstudiaremosacontinuacinelTDAColadePrioridad
Permitebuscarporelelementodemximaprioridad,ascomoinsertar elementosarbitrariosyeliminarelelementodemximaprioridad

Heaps y Colas de Prioridad


LassiguientessernlasoperacionessoportadasporelTDAtColaP
//inicializaunABBcomovaco

voidinitColaP(tColaP*P)
//eliminatodosloselementosdeunacoladeprioridad,dejndolavaca

voidclearColaP(tColaP*P);
//encuentraelmximoelementodelconjunto

tipoElemfindMax(tColaP*P);
//cantidaddeelementosenlacoladeprioridad

intsizeColaP(tColaP*P)
//eliminaelmximoelementodelconjunto

voidremoveMax(tColaP*P);
//insertaunelementoitemenlacoladeprioridad

voidinsertColaP(tCola*P,tipoElemitem);

Heaps y Colas de Prioridad


Delasestructurasdedatosestudiadashastaelmomento, podramosusarlassiguientesparaimplementarelTDA:
Listasenlazadasordenadas:lainsercindebemantenerordenadalalista,
loqueimplicabuscarellugaradecuadodeinsercintiempoO(n).El mximosepuedeencontrarentiempoO(1).BorradotambinentiempoO(1)

Listasordenadasbasadasenarreglos:lainsercinesO(n)porqueel
arreglodebemantenerseordenado.Elmximosepuedeencontrarentiempo O(1).BorradoentiempoO(1)

rbolesAVL:BuscarelmximotomatiempoO(logn),insercinyborrado
tomatiempoO(logn)

Estudiaremosacontinuacinunaestructuradedatosquelogra tiempoO(1)paraencontrarelmximo,ytiempoO(logn)para insertar/borrar

Heaps y Colas de Prioridad


Unheapomontculoesunrbolbinariocasilleno,yadems parcialmenteordenado,enelquetodossusvrticesinternos cumplenlapropiedaddelmontculo
Unrbolcasilleno,estllenohastaelpenltimonivelylashojasque estnenelltimonivelseubicanlomsalaizquierdaposible

Unrbolparcialmenteordenadoesaqulquetienetodasycada unadesusramas,totalmenteordenadas Propiedaddelmontculo Elvalorenunnodoesmayoroigualqueeldesushijos


Existendosvariantesdeheap:maxheapesunheapdemximo,mientrasqueunminheapesun heapdemnimos

Heaps y Colas de Prioridad


Ejemplo de max-heap
80

65

73

53

15

68

49

Notar que no necesariamente hay una relacin de orden entre hermanos

Heaps y Colas de Prioridad


Noesheap (noesparcialmenteordenado):
65

Noesheap (noescasilleno):
80

15

73

65 49

73

53

80

68

53

68

49

15

Heaps y Colas de Prioridad


ImplementacindelasoperacionesdelTDAtColaPusando heaps
//encuentraelmximoelementodelconjunto

tipoElemfindMax(tColaP*P);

Elelementodemayorprioridadseencuentrasiempreenla raz,porendelaoperacindeencontrarelmximosepuede resolverentiempoO(1)

Heaps y Colas de Prioridad


ImplementacindelasoperacionesdelTDAtColaPusando heaps
//insertaunelementoitemenlacoladeprioridad

voidinsertColaP(tCola*P,tipoElemitem);

Parainsertarunnuevoelementoitemenunheapseutilizael siguientealgoritmo: 1. Seinsertaitemcomounanuevahojaenlaprimeraposicin libredelltimonivel(primerhuecolibre) 2. Seflotaelelementoitem:Mientrasitemnoseencuentre enlarazyseamenorquesupadre,seintercambiaitem consupadreenelrbol

Heaps y Colas de Prioridad


15 15
11 flotar

11
12

11
20

11 11 15 20 12 20

15

15

12

11 15 5 12

flotar

11 5 20 15 12

flotar

5 11 12 15

20

16

5 11 12 15 16

5 11 20 15 16 12 8

flotar

5 11 20 15 16 8 12

20

Heaps y Colas de Prioridad


ImplementacindelasoperacionesdelTDAtColaPusando heaps
//eliminaelmximoelementodelconjunto

voidremoveMax(tColaP*P);

Enunheap,elelementoqueseeliminaeslaraz:eldemayorprioridad

Algoritmo
1. Sesustituyeelelementoedelaltimahojaconeldelarazyse eliminalahoja 2. Sehundeelelementoe.Mientraseseamayorquealgunode sushijos,seintercambiaconelmenordesushijos.

Heaps y Colas de Prioridad


5
sti su ir tu

12 8 12 20 11 15 16 8 5

11 20

15

16

12 11 20 15

8 11 20 15 16 12

16

ir nd hu

Heaps y Colas de Prioridad


Implementacindeheaps(yrbolescasillenos)
Losheapssonrbolescasillenos Estosignificaquetodoslosnivelesdelrbolestncompletos,excepto quizselltimonivel Estapropiedadpermiterepresentarunheapdemaneramuyeficiente, sobreunarregloysinutilizarpunterospararepresentarlasrelaciones padre/hijo

Heaps y Colas de Prioridad


Implementacindeheaps(yrbolescasillenos)
Estudiemosunapropiedadimportantecuandoenumeramosporniveles losnodosdeunrbolcasilleno
1 50

47

22

4 8 16

32 9 3

44

6 12 9

12

19

10 11 41 37

Notar lo que ocurre con la enumeracin de un nodo y la enumeracin de sus hijos

Heaps y Colas de Prioridad


Implementacindeheaps(yrbolescasillenos)
Seaielnmeroasignadoaunnodoenunaenumeracinporniveles Suhijoizquierdotienenmero2*i Suhijoderechotienenmero(2*i)+1 Supadretienenmero2/i Sialmacenamoslosnodosdelrbolenunarreglosiguiendounbarrido porniveles,podemosaprovecharestapropiedadpararepresentarlas relacionespadre/hijosinutilizarpunteros
Elementoconenumeracinisealmacenaenposicinidelarreglo

Heaps y Colas de Prioridad


Implementacindeheaps(yrbolescasillenos)
Todoslosnodosexceptolarazdelrboltienenpadre Laposicin0delarreglosedejasinalmacenarnungnelemento
Enesaposicinsecolocaunelementocentinelaquesirvacomopadre delaraz.Esosimplificaalgunasoperaciones.

Senecesitamantenerunnmeroenteroqueindiquecuntos nodoshayactualmenteenelrbol(porcinusadadelarreglo)

Heaps y Colas de Prioridad


Implementacindeheaps(yrbolescasillenos)
50 47 22 32 44 12 19 16
0 1 2 3 4 5 6 1 7 50 8

3
9

37 41
10 11

9
12 13 14

47

22

4 8 16

32 9 3

44

6 12 9

12

19
Esta representacin permite ahorrar el espacio de los punteros, lo que en muchas aplicaciones puede ser relevante

10 11 41 37

rboles 2-3 y rboles B

rboles 2-3
Muchasaplicacionesnecesitanmanipularmuygrandes volmenesdedatos,delordendevariosterabytes Enesoscasos,losdatosdebenseralmacenadosendisco,y recuperadosamemoriaprincipalparabuscar

Ejemplos
Basesdedatosdegrandescompaas(porej.,supermercados) Facebook,twitter,redessocialesengeneral BuscadoresWeb(google,Yahoo!,Bing,etc.) Etc.

rboles 2-3
Parasoportarbsquedaseficientessobreesosconjuntosdedatos, podramosemplearlosABByavistos,oinclusolosAVL Habraquealmacenarlosendisco,ycargarlaspartesdelrbolque sonconsultadasduranteunabsqueda Sinembargo,almacenarunaestructuradedatosendiscorequiere anlisisextra
Elaccesoadiscoesdelordendelos10milisegundos AccederaunaceldadememoriaSDRSDRAMde133MHztoma 10nanosegundos=0.00001milisegundos(1millndevecesmslento) Analoga:necesitaralgoytomarlodesdeelescritorio(2segundos)versus irabuscarloaChinaenbarco(24das)

rboles 2-3
Sisuponemosunabasededatosconn=1.000millonesde elementos,ydadoqueunrbolAVLnecesitaO(logn)accesos,esto significa30accesosadiscoenelpeorcasoparabuscar Estoesporquelosrbolessonbinarios,yporendeloslogaritmos sonenbase2 Esestapartedelcursoestudiaremosrepresentacionesderbolesque sondeordenmayora2,porendepermitenreducirlacantidadde accesosadisco
Porejemplo,sielrbolesdeorden10,lacantidaddeaccesosparael ejemplosereducea9,mientrasquesielordendelrboles100,sebajaa 4.5accesos (Esoesmuchomsabordablerespectodenmerodeaccesosadisco)

rboles 2-3
Unrbol23esunrbolordenadodefinidocomo
Cadanodopuedealmacenar2o3elementos Cadanodointernotiene2hijos(sialmacenaunelemento)o3hijos (sialmacena2elementos) Todaslashojasseencuentraenelmismoniveldelrbol,porendeel rbolesbalanceado

rboles 2-3

Primer subrbol: Elementos menores que 18

Segundo subrbol: Elementos mayores a 18 y menores a 33

Tercer subrbol: Elementos mayores a 33

rboles 2-3
Bsquedaenunrbol23
Desdelarazsebajahastaencontrareldatoollegaraunahoja
Elcaminoaseguirvienedadoporlacomparacinentreeldato buscadoyelcontenidodelnodoinspeccionadoencada momento Sisellegaaunsubrbolvaco,eldatonoestenelrbol Sinoestvaco,primerobuscarenlarazdelsubrbolactual Siesalgunodeloselementosdelarazdelsubrbolactual,se encontr Sino,sielnodoesunahojayelelementonoestenelnodo, finalizar

rboles 2-3
Bsquedaenunrbol23
Sielnodonoesunahoja Sislohayunelementoenelnodo: Siesmayorqueeldatoabuscar,sesigueporelhijo derecho Siesmenor,sesigueporelhijoizquierdo. Sienelnodohaydoselementos,r1yr2(conr1r2): Sieldatoesmenorquer1,buscarporelhijoizquierdo. Sieldatoesmayorquer1ymenorquer2,buscarporel hijocentral. Siesmayorquer2buscarporelhijoderecho.

rboles 2-3
Insercinenunrbol23
AligualqueenlosABByAVL,lainsercindenuevos elementosocurrealniveldelashojas Comoenlosrbolesbinariosdebsqueda,elprimerpaso consisteenlocalizarelnodohojaendondedebeirelelemento Sinembargo,ahoraelcrecimientodelrboleshacialaraz
Estogarantizaquelashojasestnsiempreenelmismoniveldel rbol,loqueasuvezgarantizaelbalancedelrbol

rboles 2-3
Insercinenunrbol23
Lasinsercionesenunrbol23tienendoscasos 1. Hayespacioenelnodopueshayunsloelemento 2. Nohayespacioyelnododebedividirseendosylamediana delostreselementosseinsertaenelpadrerecursivamente. Estopuedegenerarunasecuenciadedivisioneshastalaraz

rboles 2-3
Insercinenunrbol23
Entodosloscasos,elelementoainsertarsedenotaporx
Nodo hoja Nodo hoja luego de la insercin

Caso 1:

r1

r1 < x

r1

Nodo hoja

Nodo hoja luego de la insercin

Caso 2:

r1

x < r1

r1

rboles 2-3
Insercinenunrbol23
Entodosloscasos,elelementoainsertarsedenotaporx Caso 3: r1 r2 x > r2 Sube r2 x

r1

r2

Estos punteros se agregan en el padre

r1

r2 sube al nodo padre.

rboles 2-3
Insercinenunrbol23
Entodosloscasos,elelementoainsertarsedenotaporx Caso 4: r1 r2 x < r1 Sube r1 x r1 r2

Estos punteros se agregan en el padre

r2

r1 sube al nodo padre.

rboles 2-3
Insercinenunrbol23
Entodosloscasos,elelementoainsertarsedenotaporx Caso 5: r1 r2 r1 < x < r2 Sube x r2

r1

Estos punteros se agregan en el padre

r1

r2

x sube al nodo padre.

rboles 2-3
Ejemplodeinsercinenunrbol23
Insertar en un rbol2-3 inicialmante vaco los siguientes elementos S={ 30, 2, 15, 63, 65, 1,0, 14, 27, 8, 9, 81, 79, 60 }

Input: 30 Input: 2 Input: 15


Observe que el rbol crece hacia arriba, por la raz. 2

30

30

30

15 2

15

30

30

rboles 2-3
S={ 30, 2, 15, 63, 65, 1,0, 14, 27, 8, 9, 81, 79, 60 } Input: 63
15 2

30

63

S={ 30, 2, 15, 63, 65, 1,0, 14, 27, 8, 9, 81, 79, 60 } Input: 65
15 Sube el 63 2 30 63 65 2 30 65 15 63

rboles 2-3

S={ 30, 2, 15, 63, 65, 1,0, 14, 27, 8, 9, 81, 79, 60 } Input: 1

15

63

30

65

rboles 2-3
S={ 30, 2, 15, 63, 65, 1, 0, 14, 27, 8, 9, 81, 79, 60 } Input: 0
Sube el 1 0 1 2 15 63 1 15 63

30

65

2 15 1

30

65

Sube el 15 1 15 63

63

30

65

30

65

rboles 2-3
S={ 30, 2, 15, 63, 65, 1,0, 14, 27, 8, 9, 81, 79, 60 } Input: 14 15
1 63

14 15

30

65

Input: 27
1

63

14

27 30

65

rboles 2-3
S={ 30, 2, 15, 63, 65, 1,0, 14, 27, 8, 9, 81, 79, 60 } Input: 8
15 1 Sube el 8 0 2 8 14 27 30 65 15 1 8 63 63

14

27 30

65

rboles 2-3
S={ 30, 2, 15, 63, 65, 1,0, 14, 27, 8, 9, 81, 79, 60 } Input: 9
1 8 15 63

14

27 30 15

65

Input: 81
1 8

63

14

27 30

65 81

rboles 2-3
S={ 30, 2, 15, 63, 65, 1,0, 14, 27, 8, 9, 81, 79, 60 } Input: 79 15
1 8 63 Sube el 79 65 79 15 81

14

27 30

63

79

14

27 30

65

81

rboles 2-3
S={ 30, 2, 15, 63, 65, 1,0, 14, 27, 8, 9, 81, 79, 60} Input: 60
15 63

30

79

14

27

60

65

81

rboles 2-3
Borradoenunrbol23
Losborradosenunrbol23sondemasiadocomplejos PostponemossuestudioparaelcasodelosrbolesB

rboles 2-3
ImplementacindeltipotArbol23enC
typedefstructnodoA23{ tipoElemelem1,elem2; structnodoA23*izq,*cent,*der; }nodoArbol23; typedefstruct{ nodoArbol23*raiz; intnElem; }tArbol23;

rboles 2-3
Anlisisdelaalturadeunrbol23
Enelpeorcaso,tenemosunrbolbinariocompleto,porlotanto tenemosque n=1+2+4+...+2(h1)=(2h1)/(21)=2h1nodos Esdecirh<=log2(n+1) Enelmejorcasoesunrbolternario,entonces: n=1+3+9+...+3(h1)=(3h1)/(31)=(3h1)/2nodos Esdecirh>=log3(2n+1) Luegolaalturadeunrbol23estentrelog2(n)ylog3(n)

Bibliografa
Data Structures and Algorithm Analysis. Clifford A. Shaffer.
http://people.cs.vt.edu/~shaffer/Book/C++3e20120605.pdf

Ver Captulos 5, 10.3, 10.4, 13.2.1. Estructuras de Datos y Algoritmos. Aho, Hopcroft y Ullman. Addison-Wesley, 1998. Introduction to Algorithms. Cormen, Leiserson, Rivest y Stein. 3. ed. MIT Press 2009: I-XIX, 1-1292

You might also like