Está en la página 1de 33

rbolesByB+

Tema6:rbolesByB

1.Gestinmediantendicesdegrandesvolmenesde informacin 2.rbolesB 3.Accesosecuencialindexado:rbolesB+

rbolesByB+

Gestinmediantendicesdegrandes volmenesdeinformacin
Losndicessimplesproporcionanunmtodo sencilloyeficienteparamanejarficherosderegistros PeroQueocurresielvolmendelficheroestal quelosndicesnopuedenmantenerseenmemoria? Mantenerunndicesimpleendisco,aunque posible,esextremadamenteineficiente
Lasinsercionesdebenserordenadas,yportantoimplicanabrirhuecosy desplazarregistros Losborradosimplicaneliminarhuecos(enelficherondicenopuedeutilizarseel borradolgico) Lasbsquedasbinariasrequierendemasiadosaccesos.Buscarunregistroentre 1000000registros 20accesos
2

rbolesByB+

Unaposiblealternativaconsisteordenar lgicamentelosregistrossiguiendounesquemade rbolbinariodebsqueda


IzqDerClaveRestodecampos... AbbChi01 BeaMyb01 BeaCal01 AbbFer01 PriIwa01 EagThe01 RoxLov01
0 34 68 102 136 170 204 238 272 306 340 374 408 442 1 68 170 204 1 1 272 272 1 408 374 1 1 1 34 AbbChi01| 102 BeaMyb01| 1 BeaCal01| 136 PriIwa01| 306 EagThe01| 1 AbbFer01| 238 BeaTha01| 340 BobLik01| 1 BeaShe01| 1 RoxLov01| 1 FleSar01| 1 EagHot01| 1 QueWea01| 1 BeaShe02| Chiquitita|Abba|1979|3:34 MyBonnie|Beatles|1964|3:45 CaliforniaGirls|BeachBoys|1965|1:27 IWannaBeYourLover|Prince|1979|1:40 TheLongRun|Eagles|1979|1:15 Fernando|Abba|1976|3:35 ThankYouGirl|Beatles|1964|2:07 LikeARollingStone|BobDylan|1965|1:28 SheLovesYou|Beatles|1964|3:36 LoveIsTheDrug|RoxyMusic|1976|3:03 Sara|FleetwoodMac|1979|2:13 HotelCalifornia|Eagles|1977|3:28 WeAreTheChampions|Queen|1977|2:16 She'sAWoman|Beatles|1964|3:50

BeaTha01

BeaShe01 BeaShe02

BobLik01

FleSar01 QueWea01

EagHot01

Representacin lgica

Representacin fsica

rbolesByB+

Unapequeacabeceraenelficheroindicala posicindelnodoraizdelrbol Losnodoshojasonaquelloscuyosndicesizquierda yderechaapuntana1 Representacinmuycompacta:tantolosdatoscomo losndicesestnalmacenadosenunnicofichero Operacionesmuyeficientes


UnabsquedaimplicasloO(logn)lecturasenelfichero Noesnecesarioordenarfsicamentelosdatos.Losdatosseinsertanalfinalyse enganchanalnodohojacorrespondienteenO(logn) Losborradosaunqueunpocomscomplejos,tambinrequierenO(logn)lecturas

rbolesByB+

Problemagrave:desequilibradodelrboltrasvarias insercionesyborrados
Solucinposible:utilizarunrbolbalanceado(p.e.AVL),aunqueresolverlas rotacionesenelficherorequierenuevosaccesos

Labsquedabinarianoessuficientementeeficiente Elusodeldiscoesmuydeficiente
Cadaaccesoimplicaleerunbloque,ydeestebloquenicamenteseutilizaun registro,cuyosndicesizquierdayderechaapuntan,conmuchaprobabilidad,aun registrodeotrobloque

rbolesByB+

Losndicesmultinivelhacenunusodeldiscomucho mseficientequelosrbolesbinarios
Sedefineunregistrodeclaves,detamaoigualaunbloquedediscooun divisordeste Elndicedeprimernivelconsisteenunficheroderegistrosdeclavescon apuntadoresalficherodedatos Elndicedesegundonivelsirveparaindexarelndicesdeprimernivelytienela mismaestructuraqueste.Cadaentradaaquincluyelaclavedelaprimera entradadecadaregistrodelndicedeprimernivelyunapuntadoraste Elndicedetercernivelindexaaldesegndonivel,etc.
Ficherondicedesegundonivel
AbbChi01|BeaShe01|EagHot01

...

Ficherondicedeprimernivel
AbbChi01|AbbFer01|BeaCal1|BeaMyb01 BeaShe01|BeaShe02|BeaTha01|BobLik01 EagHot01|EagThe01|FleSar01|PriIwa01

...

Ficherodedatos

rbolesByB+

Labsquedaenunndicemultinivelesmuy eficiente,yaquerequiereunnicoaccesoporcada nivel


Buscarlaclaveenelregistrodelndicedemayornivelmediantebsqueda binaria Obtenemosunaentradacuyaclavepuedeserigualoinmediantementeinferiora labuscada.Seguimoselapuntadoralbloquedelsiguientenivelyrepetimoseste procesohastallegaralficherodedatos

Losndicemultinivelsonesencialmenteuna estructuradeficherosesttica.Lasinsercionesy borradossoncostosos


Lainsercinrequiererecorrerlosdistintosnivelesinsertandounanuevaclaveen losregistrosdendicescorrespondientes.Estoimplicaabrirunhuecomoviendo ndicesalsiguienteregistroencascada Elborradodejahuecosquedebensereliminadosiguiendounprocesosimilar

rbolesByB+

rbolesB
Descubiertosen1972porBayeryMcCreight,sonel estndarhoyendaparalaindexacindeficheros dedatos LosrbolesBsonndicesmultinivelqueresuelven losproblemasdelainsercinyborradoderegistros ysebasanendosreglas
Permitirquelosregistrosndicenoestnllenos Nomoverndicesdeunregistroaotrocuandoestlleno.Ensulugar,dividiren doselregistro.Cuandodosregistrosestnmuyvacos,unirlosenunosolo

CadaregistrodeclavesesunnododelrbolB
Elnmeromximodeclavespornodo(m)constituyeelordendelrbolB Elnmeromnimodeclavespermitidasenunnodoesnormalmentelamitaddel ordendelrbol,conlaexcepcindelaraiz

rbolesByB+

Dospropiedadesdelashojas:
Todaslashojastienenlamismaprofundidad(pertenecenalmismonivel) Lashojasposeenapuntadoresalosregistrosenelficherodedatos,deformaque elnivelcompletodelashojasformaunndiceordenadodelficherodedatos

ElrbolBseguardantegramenteenunnicofichero ndice,demanerasimilaralrbolbinarioestudiado anteriormente


AbbChi01|BeaMyb01|BeaTha01|PriIwa01

PriIwa01|QueWea01|RoxLov01 AbbChi01|AbbFer01|BeaCal01

BeaMyb01|BeaShe01|BeaShe02

BeaTha01|BobLik01|EagHot01|FleSar01

Ficherodedatos
9

rbolesByB+

BsquedaenunrbolB

LabsquedaenunrbolBestaneficientecomoen unndicemultinivel,conunordenO(logmn),siendom elordendelrbolynelnmerodeelementos


Paraunficherode1000000dedatosindexadomedianteunrbolBdeorden10 localizamoscualquierdatocon6accesos 1Comenzarporelnodoraiz.Seleedediscoamemoriasiesnecesario 2Realizarunabsquedabinariaosecuencialparalocalizarlaclavekigualo inmediatamenteinferioralvalordelaclavebscada.Obtenerladireccindasociada adichaclave 3Sielnodoanteriornoesunahoja,leerelsiguientenodo,apuntadoporladireccin dypasarloamemoria.Volveralpaso2 4Encasocontrarioleerelregistrodelficherodedatosapuntadoporladireccind

Elprocedimientodebsquedaeselsiguiente

10

rbolesByB+

InsercinenunrbolB

Lainsercindeunaclaveserealizamediantedos pasadas:
Unapasadahaciaabajoenlaqueserealizaunabsquedaparaencontrarlahoja quelecorrespondealaclave Unapasadahaciaarribaenlaquesedividenlosnodoscuandoesnecesario

Lospasosaseguirsonlossiguientes
1Realizarlabsquedadelnodohojaquecorrespondealaclave 2Insertarlaclaveenelnodo 3Silainsercinnoesposibleporestarelnodolleno,crearunnuevonodoypasara stelamitaddelasclaves.Realizarlainsercindelaclaveenelnodoquele corresponda 4Silaclaveinsertadaeslamenordelnodo,actualizarlaclaveenelnodopadre(y realizarlomismo,siesnecesario,hastalaraiz) 5Sisehadivididoelnodooriginal,insertarlaprimeraclavedelnuevonodoenel nodopadre(paraellovolveralpaso2)
11

rbolesByB+

Ejemplo:
AbbChi01|BeaCal01

AbbChi01|AbbFer01

BeaCal01|BeaShe01|BeaShe02|BeaTha01

InsertarAbbSar02.Elnodoseinsertasinproblemas
AbbChi01|BeaCal01

AbbChi01|AbbFer01|AbbSar02

BeaCal01|BeaShe01|BeaShe02|BeaTha01

InsertarAbbCas01.Elnodoseinsertasinproblemas,aunquealsituarseenprimera posicinesnecesarioactualizarlaclavedelpadre
AbbCas01|BeaCal01

AbbCas01|AbbChi01|AbbFer01|AbbSar02

BeaCal01|BeaShe01|BeaShe02|BeaTha01

12

rbolesByB+

InsertarBeaShe03.Nohayespacioenelnodo,portantoesnecesariodividiry redistribuirlasclaves.Laclaveseinsertaenelsegundonodo

AbbCas01|BeaCal01|BeaShe02

AbbCas01|AbbChi01|AbbFer01|AbbSar02

BeaCal01|BeaShe01

BeaShe02|BeaShe03|BeaTha01

InsertarAbbBet01.Unasituacinquecombinalasdosanteriores

AbbBet01|AbbFer01|BeaCal01|BeaShe02

AbbBet01|AbbCas01|AbbChi01

BeaShe02|BeaShe03|BeaTha01

AbbFer01|AbbSar02

BeaCal01|BeaShe01

13

rbolesByB+

BorradoenunrbolB

Elborradotambinrequieredospasadas
Unapasadahaciaabajoenlaqueserealizaunabsquedaparaencontrarlahoja quecontienelaclave Unapasadahaciaarribaenlaqueseunennodoscuandosuocupacinbajadel umbralpermitidoyseredistribuyenclavescuandoloanteriornoesposible

Lospasosaseguirsonlossiguientes
1Realizarlabsquedadelnodohojaquecontienelaclave 2Eliminarlaclavedelnodo 3Silaocupacindelnodoessuperioram/2ylaclaveocupabalaprimeraposicin delnodo,actualizarlosnodosdenivelessuperioresestableciendounanueva primeraclave 4Silaocupacindelnodoesinferioram/2yelhermanoalaizquierdaoderecha tieneespaciosuficiente,pasarlasclavesalhermanoyeliminarelnodocompleto. Actualizarelpadreeliminadolaclavecorrespondiente(paraellovolveralpaso2) 5Silaocupacindelnodoesinferioram/2yloshermanosaizquierdaoderechano tienenespaciosuficiente,redistribuirlasclavesconunodelosdoshermanos. Actualizarlasclavesdelosnivelessuperioresparareflejarloscambios
14

rbolesByB+

Ejemplo:

AbbBet01|AbbFer01|BeaCal01|BeaShe02

AbbBet01|AbbCas01|AbbChi01

BeaShe02|BeaShe03|BeaTha01

AbbFer01|AbbSar02

BeaCal01|BeaShe01

BorrarBeaTha01.Laclaveseeliminatrivialmente
AbbBet01|AbbFer01|BeaCal01|BeaShe02

AbbBet01|AbbCas01|AbbChi01

BeaShe02|BeaShe03

AbbFer01|AbbSar02

BeaCal01|BeaShe01

15

rbolesByB+

BorrarBeaShe03.Laocupacindelnodocaepordebajodelumbral.Elhermanoa laizquierdatieneespacioparaalbergarlaclaverestante(BeShe02)
AbbBet01|AbbFer01|BeaCal01

AbbBet01|AbbCas01|AbbChi01

AbbFer01|AbbSar02

BeaCal01|BeaShe01|BeaShe02

BorrarAbbSar02.Situacinsimilaralaanterior

AbbBet01|BeaCal01

AbbBet01|AbbCas01|AbbChi01|AbbFer01

BeaCal01|BeaShe01|BeaShe02

16

rbolesByB+

BorrarBeaCal01.Borradotrivial,aunquealtratarsedelaprimeraclave,es necesarioactualizarelpadre
AbbBet01|BeaShe01

AbbBet01|AbbCas01|AbbChi01|AbbFer01

BeaShe01|BeaShe02

BorrarBeaShe02.Elhermanonotienesitioparaalbergarlaclaverestante. Redistribuirensulugaryactualizarlaprimeraclaveenelpadre
AbbBet01|AbbFer01

AbbBet01|AbbCas01|AbbChi01

AbbFer01|BeaShe01

17

rbolesByB+

LaclaseparaunnododeunrbolB

template<classClaveP,unsignedorden> classNodoArbolB{ ClavePclaves[orden]; longintposiciones[orden]; unsignedocupacion; boolhoja; public: NodoArbolB(); voidinsertar(ClavePclave,unsignedlongposicion); voideliminar(ClavePclave); voiddividir(NodoArbolB&nodo); voidunir(NodoArbolB&nodo); voidredistribuir(NodoArbolB&nodo); longintbuscarIgual(ClavePclave); longintbuscarIgualMenor(ClavePclave); ClavePprimeraClave(); unsignednumClaves(); boolesHoja(); };

18

rbolesByB+

LaclaseparaelrbolB
#include<string> #include<fstream> usingnamespacestd; template<classClaveP,unsignedorden> classArbolB{ Fichero<NodoArbolB<orden,ClaveP>>fDatos; public: ArbolB(stringfDatos,boolcrear=false); voidinsertar(ClavePclaveP,unsignedlongpos); voidborrar(ClavePclaveP); unsignedlongbuscar(ClavePclaveP); };

EstaclasenicamenteresuelveunndiceenformaderbolB.Posteriormentees necesariointegrarlaenunaclasesimilaraFicheroIndices(temaanterior)conun ficherodedatos


19

rbolesByB+

Accesosecuencialindexado:rbolesB+
LosrbolesBproporcionanunasolucindefinitiva alproblemadelaindexacindeunficheroparala bsquedadeundatoporclave PeroQueocurresinuestraaplicacinrequiereun accesosecuencialalosregistrossiguiendola ordenacindadaporlaclave?
Ejemplo:obtencindelistadosordenados

Hastaahoratenemosdosposibilidades:
Mantenerordenadosfsicamentelosregistrosdelficherodedatos.Elrecorrido delficheroessencilloyeficiente,aunqueelcostedemantenerelficheroordenado esaltsimo

20

rbolesByB+

RecorrerlashojasdelrbolBdeizquierdaaderecha.Estoproporcionaunlistado delosregistrosordenadosporclave.Sinembargoimplicaunrecorridoeninorden, leyendotodoslosnodosdelrbolBmsaccesosadicionalesalosregistrosdel ficherodedatos


AbbChi01|BeaMyb01|BeaTha01|PriIwa01

PriIwa01|QueWea01|RoxLov01 AbbChi01|AbbFer01|BeaCal01

BeaMyb01|BeaShe01|BeaShe02

BeaTha01|BobLik01|EagHot01|FleSar01

Ficherodedatos

21

rbolesByB+

Ficherosdesecuenciasdebloques

Lasolucinalproblemaesmantenerordenados fsicamentelosregistrosdelfichero,perosloanivel debloque Cadabloquevaacontenervariosregistros,yel ficherodedatosvaaestarconstituidoporuna secuenciaordenadalgicamentedebloques


AbbChi01|...$AbbFer01|...$BeaCal01|...$ BeaMyb01|...$BeaShe01|...$BeaShe02|...$ PriIwa01|...$QueWea01|...$RoxLov01|...$ BeaTha01|...$BobLik01|...$EagHot01|...$FleSar01...$

22

rbolesByB+

Losbloquestienenlassiguientescaractersticas:
Sondetamaofijo.Elmejorrendimientoseconsiguesisutamaoesigualalde unbloquedelsistemadeficheros Unbloquepuedeestarparcialmentevaco,aunquesuocupacinnopuedeser menordel50% Losregistrosdentrodecadabloqueestnordenadosporlaclave Cadabloquecontieneunapuntadoralsiguientebloqueenlasecuencia ordenada.Laordenacinlgicanotienequecoincidirconlafsica

Mantenerordenadounbloqueseseficientepuesto quesetransfierentegramenteamemoriapara realizarunaoperacindeinsercinoborrado Sieltamaodelbloqueesigualalbloquedel sistemadeficheros,latransferenciarequiereun nicoacceso


23

rbolesByB+

Realizarunrecorridoordenadodelosregistroses sencilloyeficiente
Bastaconirleyendodeformaordenadacadabloqueyprocesarlosregistrosen suinterior,siguiendotambinsuordeninterno

Lainsercindeunnuevoregistroenelfichero implicalossiguientespasos
1Localizarelbloquealquepertenece(estoloharemosutilizandounrbolB, comoveremosmsadelante) 2Pasarelbloqueamemoria 3Sielbloquetieneespacioparaelnuevoregistro,realizarsuinsercinenla posicincorrespondiente.Salvarelbloqueenelficheroyterminar 4Sielbloquenotieneespacio,entoncesesnecesariocrearunnuevobloque,al finaldelficherooenunhuecoexistentedeunbloqueborradoanterior.Insertarel nuevobloqueenlalista,acontinuacindelbloqueoriginal 5DeformasimilaralosrbolesB,repartirlosregistrosentrelosdosbloques existenteseinsertarelnuevoregistroenelquecorresponda.Salvarambos bloquesenelfichero
24

rbolesByB+

Ejemplo:
AbbChi01|...$AbbFer01|...$BeaCal01|...$ BeaMyb01|...$BeaShe01|...$BeaShe02|...$ PriIwa01|...$QueWea01|...$RoxLov01|...$ BeaTha01|...$BobLik01|...$EagHot01|...$FleSar01...$

InsertarBeaDer03yBasMan02:
AbbChi01|...$AbbFer01|...$BasMan02|...$BeaCal01|...$BeaDer03|...$ BeaMyb01|...$BeaShe01|...$BeaShe02|...$ PriIwa01|...$QueWea01|...$RoxLov01|...$ BeaTha01|...$BobLik01|...$EagHot01|...$FleSar01...$

InsertarBatCat01:
AbbChi01|...$AbbFer01|...$BasMan02|...$ BeaMyb01|...$BeaShe01|...$BeaShe02|...$ PriIwa01|...$QueWea01|...$RoxLov01|...$ BeaTha01|...$BobLik01|...$EagHot01|...$FleSar01...$ BatCat01|...$BeaCal01|...$BeaDer03|...$

25

rbolesByB+

ElborradoessimilaralborradoenunrbolB
1Localizarelbloquedondeestsituadoelregistro 2Pasarelbloqueamemoria 3Eliminarelregistrodelbloque.Silaocupacindelbloquesiguesiendosuperior al50%terminar 4Encasocontrariocomprobarlaocupacindelosbloquesanterioryposterior 5Siunodelosdostieneespacioparaalbergarlosregistrosdelbloqueactual, pasarstosalbloqueencuestin,desconectarelbloqueactualymarcarcomo borradoparaseraprovechadoeninsercionesposteriores 6Encasocontrario,escogerunodelosdosbloquesyredistribuirlosregistros entreambosbloquesdeformaequitativa

26

rbolesByB+

Ejemplo:
AbbChi01|...$AbbFer01|...$BeaCal01|...$ BeaMyb01|...$BeaShe01|...$BeaShe02|...$ PriIwa01|...$QueWea01|...$RoxLov01|...$ BeaTha01|...$BobLik01|...$EagHot01|...$FleSar01...$

EliminarBeaCal01.Losregistrosrestantessepasanalsegundobloque
AbbChi01|...$AbbFer01|...$BeaMyb01|...$BeaShe01|...$BeaShe02|...$ PriIwa01|...$QueWea01|...$RoxLov01|...$ BeaTha01|...$BobLik01|...$EagHot01|...$FleSar01...$

EliminarQueWea01.Denuevolaocupacindelbloquecaepordebajo del50%.Losregistrosdelosdosprimerosbloquesseredistribuyen
AbbChi01|...$AbbFer01|...$BeaMyb01|...$BeaShe01|...$BeaShe02|...$ FleSar01...|PriIwa01|...$RoxLov01|...$ BeaTha01|...$BobLik01|...$EagHot01|...$

27

rbolesByB+

Larepresentacindeunbloqueenmemoria
template<ClavePclave,classRegistro,unsignedtamBloq> classBloqueReg{ ClavePclaves[tamBloq]; Registroregistros[tamBloq]; unsignedocupacion; unsignedbloqueSig; public: BloqueReg(); voidinsertar(ClavePclave,Registroreg); voideliminar(ClavePclave); Registroleer(ClavePclave); unsignedleerBloqueSig(); voiddividir(BloqueReg&bloque); voidunir(BloqueReg&bloque); voidredistribuir(BloqueReg&bloque); ClavePprimeraClave(); unsignednumReg(); //Iteracinporelbloque voidiniciarIteracion(ClavePclave); boolobtenerSiguiente(ClaveP&clave,Registro&reg); };

28

rbolesByB+

Ficheroestructuradoenbloques
#include<string> usingnamespacestd; template<classClaveP,classRegistro,unsignedtamBloq> classFicheroBloques{ Fichero<BloqueReg<ClaveP,Registro,tamBloq>>f public: FicheroBloque(stringfDatos); ~Fichero();//Cierraelfichero voidinsertar(unsignedbloq,ClavePclave,constRegistro&reg); boolbloqueDividido(unsigned&bNuevo); voideliminar(unsignedbloq,ClavePclaveP); boolbloqueUnido(unsigned&bDest); boolbloqueRedistribuido(unsigned&bloq1,unsigned&bloq2); voidleer(unsignedbloq,ClavePclaveP,Registro&reg); voidactualizar(unsignedbloq,ClavePclaveP,constRegistro&reg); ClavePprimeraClave(unsignedbloq); //Iteracinporelfichero voidiniciarIteracion(unsignedbloq,ClavePclave); boolobtenerSiguiente(ClaveP&clave,Registro&reg); };
29

rbolesByB+

rbolesB+

DenominamosrbolB+alaestructuraquecombina unficherodedatosestructuradoenunasecuencia debloquesderegistrosconunrbolBparaindexar dichosbloques


rbolB
AbbChi01|BeaTha01

AbbChi01|BeaMyb01

BeaTha01|PriIwa01

AbbChi01...BeaCal01

BeaMyb01...BeaShe02

BeaTha01...FleSar01

PriIwa01...RoxLov01

Ficherodedatos
30

rbolesByB+

UnrbolB+permitetantoaccesosporclave (medianteelrbolB)comorecorridossecuencialesa travsdelasecuenciadebloques LashojasdelrbolBcontienenlasclavesiniciales decadaunodelosbloques,ascomolas direccionesdelosmismos Lainsercincontemplalossiguientesaspectos


LocalizarmediantealrbolBelbloquequelecorresponde Insertarelregistroenelbloque.Sielregistrosesituaenprimeraposicin, entoncesactualizarelndiceenelrbolB Sinohayespacioenelbloque,entoncessecreaunnuevobloque.Estoimplica insertarlaprimeraclavedelnuevobloqueenelrbolB

31

rbolesByB+

Elborradosiguelossiguientespasos:
LocalizarelbloquealqueperteneceelregistromedianteelrbolB Eliminarelregistro.Siocupabalaprimeraposicin,actualizarlosndices correspondientesenelrbolB Siseproducelaeliminacindeunbloque,eliminarlaentradacorrespondienteen elrbolB Siseproduceunaredistribucinderegistros,actualizarlosndices correspondientesenelrbolB

32

rbolesByB+

LaclaserbolB+
#include<string> usingnamespacestd; template<classClaveP,classRegistro,unsignedtamBloq,unsignedorden> classArbolBMas{ FicheroBloques<ClaveP,Registro,tamBloq>fDatos; ArbolB<ClaveP,orden>indice; public: ArbolBMas(stringfDatos,boolcrear=false); ~ArbolBMas(); voidinsertar(ClavePclaveP,Registroreg); voidborrar(ClavePclaveP); Registrobuscar(ClavePclaveP); //Iteracinporelfichero voidiniciarIteracion(ClavePclaveP); boolobtenerSiguiente(ClaveP&claveP,Registro&reg); };

33

También podría gustarte