Autoria: Carlos Eduardo Cayres | 4o

25 

Full text

(1)

Estrutura de Dados

Autoria: Carlos Eduardo Cayres | 4

o

semestre

Tema 07

Árvore Multidirecional (Árvore B)

Tema 07

Árvore Multidirecional (Árvore B)

Autoria: Carlos Eduardo Cayres

Como citar esse documento:

CAYRES, Carlos Eduardo. Estrutura de Dados: Árvore Multidirecional (Árvore B). Caderno de Atividades. Valinhos: Anhanguera Educacional, 2014.

Índice

‹ $QKDQJXHUD (GXFDFLRQDO 3URLELGD D UHSURGXomR ¿QDO RX SDUFLDO SRU TXDOTXHU PHLR GH LPSUHVVmR HP IRUPD LGrQWLFD UHVXPLGD RX PRGL¿FDGD HP OtQJXD

Pág. 39

Pág. 40 Pág. 40

Pág. 39 Pág. 31 Pág. 30

ACOMPANHE

NA

WEB

Pág. 3

CONVITE

À

LEITURA

Pág. 3

(2)

3

As estruturas de dados do tipo árvore são não lineares, ou seja, os elementos que as compõem não estão armazenados de forma sequencial e também não estão todos encadeados.

Este tema apresenta a estrutura de dados do tipo árvore multidirecional, uma das estruturas de programação mais utilizadas em programação. Apresentaremos conceitos de árvore multidirecional e introduziremos seu uso em C com vários exemplos práticos.

Diferentemente das árvores de busca binária e AVL, a árvore multidirecional não precisa ser rebalanceada. Outra característica importante da árvore multidirecional, que aponta vantagens se comparada a outros tipos de árvores, é o menor tempo de acesso e pesquisa.

Nas operações de inserção e remoção de dados, o nó não pode ser maior que sua ordem e, também, não pode ser menor que sua ordem dividida por 2.

3DUD¿QDOL]DUWHUHPRVDOJXQVH[HUFtFLRVQRLQWXLWRGHUHIRUoDURFRQWH~GRHVWXGDGRUHIHUHQWHjHVWUXWXUDGHGDGRVGR

tipo árvore multidirecional.

POR

DENTRO

DO

TEMA

Árvore Multidirecional (Árvore B)

A árvore B ou B-Tree é muito estudada na computação, sendo esta uma estrutura de dados bastante utilzada nos sistemas de arquivos e nos bancos de dados.

Nas operações de inserção e remoção de dados, o nó não pode ser maior que sua ordem e, também, não pode ser menor que sua ordem dividida por 2.

POR

DENTRO

DO

TEMA

Diferentemente das árvores de busca binária e AVL, a árvore B não precisa ser rebalanceada. Outra característica importante da árvore B, que aponta vantagens se comparada a outros tipos de árvores, é o menor tempo de acesso e pesquisa.

Para uma árvore B de ordem n, onde nUHSUHVHQWDRPi[LPRGH¿OKRVSDUDFDGDQyVypXPDiUYRUH%VHDWHQGHUjV

seguintes propriedades:

1. Cada nó pode ter no máximo n¿OKRV

2. &DGDQyH[FHWRRQyUDL]HRVQyVIROKDVGHYHWHUSHORPHQRVQ¿OKRV

3. 2QyUDL]GHYHWHUSHORPHQRVGRLV¿OKRVDPHQRVTXHVHMDXPQyIROKD

4. 7RGRQyQmRIROKDFRPP¿OKRVGHYHUiWHUPFKDYHV

5. )ROKDVWrPTXHDSDUHFHUQRPHVPRQtYHOHDUPD]HQDPGDGRV

$UHSUHVHQWDomRGRVQyVHPiUYRUH%GHQRWDFRQMXQWRVGHHOHPHQWRVFRPDSRQWDGRUHVSDUDVHXV¿OKRVGHQRPLQDGRV IROKDV$OJXQVDXWRUHVGH¿QHPFRPRRUGHPGHXPDiUYRUH%DTXDQWLGDGHGHUHJLVWURVTXHDiUYRUHSRGHVXSRUWDU SRUpPKiDXWRUHVTXHFRQVLGHUDPDRUGHPGHXPDiUYRUH%DTXDQWLGDGHGHFDPSRVDSRQWDGRUHV

2VQyVGHXPDiUYRUH%GHYHPWHUXPQ~PHURPtQLPRGHHOHPHQWRVTXHpGDGRFDOFXODQGRDPHWDGHGRYDORUGDRUGHP GRQy&DVRDiUYRUHVHMDGHRUGHPtPSDURQ~PHURGHYHVHUWUXQFDGRFRPH[FHomRGDUDL]TXHSRGHWHUXPUHJLVWUR

Por exemplo, para uma árvore de ordem 7, deve-se ter 7 registros no mínimo; truncando, teremos 3 registros.

Exemplo de estrutura em C:

GH¿QH1GH¿QLQGRDRUGHPGDiUYRUH

struct No{

int num;

FKDUFKDYH>1@ VWUXFW1RSUR[>1@

(3)

5

Inserção:

1. 3HVTXLVDUVHDFKDYHQmRH[LVWHQDiUYRUH

2. %XVFDUDSRVLomRSDUDLQVHULURYDORU7HVWDURQySDUDYHUL¿FDUVHHVWiFKHLR

3. Caso o nó esteja vazio, inserir o valor, caso contrário, deve-se executar a subdivisão do nó:

1. 9HUL¿FDUVHRQySDLHVWiYD]LRVHVLP

1. Mover para o nó pai o elemento do meio.

2. Dividir em dois nós iguais.

6HRQySDLQmRHVWLYHUYD]LRUHSHWLUUHFXUVLYDPHQWHRVSDVVRVDFLPD&DVRWRGRVRVQyVSDLHVWHMDPFKHLRV

incluindo o nó raiz, uma nova raiz terá que ser criada, aumentando a altura da árvore. 3. $FKDYHVyVHUiLQVHULGDDSyVVDWLVID]HUWRGDVDVGLYLV}HVSRVVtYHLV

Exclusão:

1. 3HVTXLVDUDFKDYHSDUDYHUL¿FDUVHH[LVWH

2. 6HH[LVWLUHHVWLYHUHPXPDIROKDID]HUDH[FOXVmR

3. 6HH[LVWLUHQmRHVWLYHUHPXPDIROKDVXEVWLWXLUDFKDYHSHODPHQRUFKDYHGR¿OKRjVXDGLUHLWD

1. 6HRQ~PHURGDFKDYHQRQyIRUPDLRUGRTXH11pDRUGHPGDiUYRUH¿QDOL]DU

2. &DVRFRQWUiULRUHGLVWULEXLUDVFKDYHVHQWUHRVQyVYL]LQKRV

Busca:

1. 5HFHEHUDFKDYHDVHUSHVTXLVDGD

2. 3HVTXLVDUFRPHoDQGRGDUDL]DWpHQFRQWUDUDFKDYHHUHWRUQDURQyHDSRVLomRGDFKDYHQDiUYRUH

3. 6HDFKDYHQmRIRUHQFRQWUDGDFRQWLQXHRODoRDWpYDUUHUDVIROKDV

Vantagens:

1. 3RUWHUXPQ~PHURPHQRUGHQyVGRTXHXPDiUYRUHELQiULDSRVVXLPHOKRUGHVHPSHQKR$TXDQWLGDGHPHQRUGH nós indica uma árvore de menor altura, resultando em menos acessos ao disco.

2. Como tem poucos ponteiros entre os nós, utiliza menos espaço de alocação.

3. $XWLOL]DomRGHFKDYHVSULPiULDVJDUDQWHPDLRUUDSLGH]QDVEXVFDV

4. A cada operação, inclusão ou exclusão, a estrutura dinâmica faz o balanceamento automático da árvore.

5. 1DVEXVFDVDOHDWyULDVGHYLGRjVUDPL¿FDo}HVSRVVLELOLWDXPWHPSRPHQRUGHDFHVVRDRVGDGRV

Desvantagens:

1. $EXVFDjVYH]HVSRGHVHUOHQWDSRLVXPQyQmRIROKDFRPQFKDYHVpYLVLWDGRQYH]HV

Comparações com outras Estruturas de Dados

Inserção: Mais rápida em comparação com tabelas hash, devido aos balanceamentos a cada inserção, ocorrendo menos colisões e repetições para encontrar posições livres.

Exclusão:1DVRSHUDo}HVGHH[FOXVmRDViUYRUHV%WrPDFDUDFWHUtVWLFDGHHYLWDUJUDQGHVIUDJPHQWDo}HVVHDMXVWDQGR

HEDODQFHDQGR4XDQWRjVWDEHODVhashVHDFRQWHFHUDH[FOXVmRGHXPDFKDYHDDORFDomRGHPHPyULDSHUPDQHFH

vazia, entretanto, o espaço continua alocado.

Busca:$WXOL]DomRGHFKDYHSULPiULDpRIDWRUTXHID]DGLIHUHQoDQRGHVHPSHQKRVXSHULRUGDiUYRUH%$EXVFDVH

LQLFLDQDUDL]HSUHFRUUHRVQyVH¿OKRVFRQIRUPHDFKDYHSURFXUDGDWRUQDQGRRUHVXOWDGR¿QDOGDEXVFDPDLVH¿FLHQWH

1º exemplo: algoritmo, trecho de programa em C

const

7

0$;B&+$9(6 74XDQWLGDGHPi[LPDGHFKDYHV

(4)

7

0,1B2&83 72FXSDomRPtQLPDHPFDGDQy

typedef struct no_arvoreB arvoreB;

struct no_arvoreB {

LQWQXPBFKDYHV4XDQWLGDGHVGHFKDYHVFRQWLGDQRQy

LQWFKDYHV>0$;B&+$9(6@&KDYHVDUPD]HQDGDVQRQy DUYRUH%¿OKRV>0$;B),/+26@3RQWHLURSDUDRV¿OKRV

};

LQVHULUXPDFKDYHHRSRQWHLURSDUDR¿OKRGDGLUHLWDHPXPQy YRLGLQVHUHBFKDYHDUYRUH%UDL]LQWLQIRDUYRUH%¿OKRGLU

{

int k, pos;

UHDOL]DEXVFDSDUDREWHUDSRVLomRLGHDOSDUDLQVHULUDQRYDFKDYH SRV EXVFDBELQDULDUDL]LQIR

N UDL]!QXPBFKDYHV

UHPDQHMDPHQWRSDUDPDQWHUDVFKDYHVRUGHQDGDV ZKLOHN!SRV LQIRUDL]!FKDYHV>N@

{

UDL]!FKDYHV>N@ UDL]!FKDYHV>N@ UDL]!¿OKRV>N@ UDL]!¿OKRV>N@

k--;

}

LQVHULUFKDYHQDSRVLomRLGHDO UDL]!FKDYHV>SRV@ LQIR UDL]!¿OKRV>SRV@ ¿OKRGLU UDL]!QXPBFKDYHV

}

EXVFDGRQySDUDLQVHULUDFKDYHHVXEGLYLV}HVTXDQGRQHFHVViULDV DUYRUH%LQVHUHDUYRUH%UDL]LQWLQIRERROKLQWLQIRBUHWRUQR

{

int i, j, pos,

LQIRBPHGLDQRDX[LOLDUSDUDDUPD]HQDUDFKDYHTXHLUiVXELUSDUDRSDL DUYRUH%WHPS¿OKRBGLUSRQWHLURSDUDR¿OKRjGLUHLWDGDFKDYH

LIUDL] 18//

{

QyDQWHULRUpRLGHDOSDUDLQVHULUDQRYDFKDYH

(5)

9

K WUXH

LQIRBUHWRUQR LQIR UHWXUQ18//

}

else {

SRV EXVFDBELQDULDUDL]LQIR

LIUDL]!QXPBFKDYHV!SRV UDL]!FKDYHV>SRV@ LQIR

{

SULQWI³&KDYHMiFRQWLGDQDÈUYRUH´ K IDOVH

}

else {

SHUFRUUHUDiUYRUHDWpHQFRQWUDURQyIROKDSDUDLQVHULUDFKDYH ¿OKRBGLU LQVHUHUDL]!¿OKRV>SRV@LQIRKLQIRBUHWRUQR

LIK6HWUXHGHYHLQVHULUDLQIRBUHWRUQRQRQy

{

LIUDL]!QXPBFKDYHV0$;B&+$9(67HPHVSDoRQDSiJLQD

{

LQVHUHBFKDYHUDL]LQIRBUHWRUQR¿OKRBGLU K IDOVH

}

HOVH^pQHFHVViULRVXEGLYLGLU

WHPS DUYRUH%PDOORFVL]HRIDUYRUH%

WHPS!QXPBFKDYHV

LQLFLDOL]D¿OKRVFRP18// IRUL L0$;B),/+26L WHPS!¿OKRV>L@ 18//

HOHPHQWRPHGLDQRTXHYDLVXELUSDUDRSDL LQIRBPHGLDQR UDL]!FKDYHV>0,1B2&83@ LQVHUHPHWDGHGRQyUDL]QRWHPS WHPS!¿OKRV>@ UDL]!¿OKRV>0,1B2&83@ IRUL 0,1B2&83L0$;B&+$9(6L LQVHUHBFKDYHWHPSUDL]!FKDYHV>L@UDL]!¿OKRV>L@ DWXDOL]DQyUDL]

IRUL 0,1B2&83L0$;B&+$9(6L

{

UDL]!FKDYHV>L@ UDL]!¿OKRV>L@ 18//

(6)

11

}

UDL]!QXPBFKDYHV 0,1B2&83

YHUL¿FDHPTXDOQyVHUiLQVHULGDDQRYDFKDYH LISRV 0,1B2&83

LQVHUHBFKDYHUDL]LQIRBUHWRUQR¿OKRBGLU HOVHLQVHUHBFKDYHWHPSLQIRBUHWRUQR¿OKRBGLU

UHWRUQDRPHGLDQRSDUDLQVHULORQRQySDLHRWHPSFRPR¿OKRGLUHLWRGRPHGLDQR LQIRBUHWRUQR LQIRBPHGLDQR

UHWXUQWHPS

}

}

}

}

}

DUYRUH%LQVHUHBDUYRUH%DUYRUH%UDL]LQWLQIR

{

ERROK

int info_retorno, i;

DUYRUH%¿OKRBGLUQRYDBUDL]

¿OKRBGLU LQVHUHUDL]LQIR K LQIRBUHWRUQR

DENTRO

TEMA

LIK

^DXPHWDUDDOWXUDGDiUYRUH

QRYDBUDL] DUYRUH%PDOORFVL]HRIDUYRUH% QRYDBUDL]!QXPBFKDYHV

QRYDBUDL]!FKDYHV>@ LQIRBUHWRUQR QRYDBUDL]!¿OKRV>@ UDL] QRYDBUDL]!¿OKRV>@ ¿OKRBGLU IRUL L 0$;B&+$9(6L QRYDBUDL]!¿OKRV>L@ 18//

UHWXUQQRYDBUDL]

}

HOVHUHWXUQUDL]

}

2º exemplo: programa em C

LQFOXGHVWGLRK! LQFOXGHVWGOLEK! LQFOXGHPDOORFK! GH¿QHP GH¿QHPP

(7)

13

W\SHGHILQW7LSRBFKDYH

typedef struct

{

7LSRBFKDYHFKDYHBDUYRUH

} Registro;

typedef struct Pagina_str *Apontador;

typedef struct Pagina_str

{

int n;

5HJLVWURU>PP@ $SRQWDGRUS>PP@

} Pagina;

typedef Apontador TipoDicionario;

YRLG,QLFLDOL]D7LSR'LFLRQDULR'LFLRQDULR

{

'LFLRQDULR 18//

}

YRLG3HVTXLVDU5HJLVWUR[$SRQWDGRU$S

{

int i;

LI$S 18//

{

SULQWI³(UUR5HJLVWURQDRHVWDSUHVHQWH?Q´ V\VWHP³3$86(´

return;

}

L

ZKLOHL$S!Q [!FKDYHBDUYRUH!$S!U>L@FKDYHBDUYRUH L

LI[!FKDYHBDUYRUH $S!U>L@FKDYHBDUYRUH

{

[ $S!U>L@

return;

}

LI[!FKDYHBDUYRUH$S!U>L@FKDYHBDUYRUH 3HVTXLVDU[$S!S>L@

else

(8)

15

3HVTXLVDU[$S!S>L@

}

YRLG,QVHUHBSDJLQD$SRQWDGRU$S5HJLVWUR5HJ$SRQWDGRU$S'LU

{

int k;

int nao_encontrou;

N $S!Q

QDRBHQFRQWURX N! ZKLOHQDRBHQFRQWURX

{

LI5HJFKDYHBDUYRUH! $S!U>N@FKDYHBDUYRUH

{

QDRBHQFRQWURX

break; }

$S!U>N@ $S!U>N@ $S!S>N@ $S!S>N@

k--;

LIN

QDRBHQFRQWURX

}

$S!U>N@ 5HJ $S!S>N@ $S'LU $S!Q

}

YRLG,QVHULU5HJLVWUR5HJ$SRQWDGRU$SLQW&UHVFHX5HJLVWUR5HJ5HWRUQR$SRQWDGRU$S5HWRUQR

{

Apontador ApTemp;

int i, j;

LI$S 18//

{

&UHVFHX 5HJ5HWRUQR 5HJ $S5HWRUQR 18//

return; }

L

ZKLOHL$S!Q 5HJFKDYHBDUYRUH!$S!U>L@FKDYHBDUYRUH

(9)

17

L

LI5HJFKDYHBDUYRUH $S!U>L@FKDYHBDUYRUH

{

SULQWI³(UUR5HJLVWURMDHVWDSUHVHQWH?Q´

V\VWHP³3$86(´

&UHVFHX

return;

}

LI5HJFKDYHBDUYRUH$S!U>L@FKDYHBDUYRUH

,QVHULU5HJ$S!S>L@&UHVFHX5HJ5HWRUQR$S5HWRUQR

else

,QVHULU5HJ$S!S>L@&UHVFHX5HJ5HWRUQR$S5HWRUQR LI&UHVFHX

return;

LI$S!QPP

{

,QVHUHBSDJLQD$S5HJ5HWRUQR$S5HWRUQR &UHVFHX

return;

}

$S7HPS $SRQWDGRUPDOORFVL]HRI3DJLQD $S7HPS!Q

$S7HPS!S>@ 18// LIL P

{

,QVHUHBSDJLQD$S7HPS$S!U>PP@$S!S>PP@ $S!Q

,QVHUHBSDJLQD$S5HJ5HWRUQR$S5HWRUQR

}

else

,QVHUHBSDJLQD$S7HPS5HJ5HWRUQR$S5HWRUQR IRUM PM PPM

,QVHUHBSDJLQD$S7HPS$S!U>M@$S!S>M@ $S!Q P

$S7HPS!S>@ $S!S>P@ 5HJ5HWRUQR $S!U>P@ $S5HWRUQR $S7HPS

}

(10)

19

YRLG,QVHULUBFKDYH5HJLVWUR5HJ$SRQWDGRU$S

{

int Cresceu; Registro RegRetorno;

Apontador ApRetorno;

Apontador ApTemp;

,QVHULU5HJ$S &UHVFHX 5HJ5HWRUQR $S5HWRUQR

LI&UHVFHX^

$S7HPS $SRQWDGRUPDOORFVL]HRI3DJLQD $S7HPS!Q

$S7HPS!U>@ 5HJ5HWRUQR $S7HPS!S>@ $S5HWRUQR $S7HPS!S>@ $S $S $S7HPS

} }

YRLG5HFRQVWLWXL$SRQWDGRU$S3DJ$SRQWDGRU$S3DLLQW3RV3DLLQW'LPLQXLX

{

Apontador Aux;

int DispAux, j;

LI3RV3DL$S3DL!Q^ $X[ $S3DL!S>3RV3DL@ 'LVS$X[ $X[!QP $S3DJ!U>$S3DJ!Q@ $S3DL!U>3RV3DL@ $S3DJ!S>$S3DJ!Q@ $X[!S>@ $S3DJ!Q

LI'LVS$X[!^ IRUM M'LVS$X[M

,QVHUHBSDJLQD$S3DJ$X[!U>M@$X[!S>M@ $S3DL!U>3RV3DL@ $X[!U>'LVS$X[@ $X[!Q 'LVS$X[

IRUM M$X[!QM $X[!U>M@ $X[!U>M'LVS$X[@ IRUM M $X[!QM $X[!S>M@ $X[!S>M'LVS$X[@ 'LPLQXLX

}

else

{

(11)

21

IRUM M PM

,QVHUHBSDJLQD$S3DJ$X[!U>M@$X[!S>M@ IUHH$X[

IRUM 3RV3DLM$S3DL!QM

{

$S3DL!U>M@ $S3DL!U>M@ $S3DL!S>M@ $S3DL!S>M@

}

$S3DL!Q LI$S3DL!Q! P 'LPLQXLX

}

}

else

{

$X[ $S3DL!S>3RV3DL@ 'LVS$X[ $X[!QP IRUM $S3DJ!QM! M $S3DJ!U>M@ $S3DJ!U>M@ $S3DJ!U>@ $S3DL!U>3RV3DL@

IRUM $S3DJ!QM! M $S3DJ!S>M@ $S3DJ!S>M@ $S3DJ!Q

LI'LVS$X[!^ IRUM M'LVS$X[M

,QVHUHBSDJLQD$S3DJ$X[!U>$X[!QM@$X[!S>$X[!QM@ $S3DJ!S>@ $X[!S>$X[!Q'LVS$X[@

$S3DL!U>3RV3DL@ $X[!U>$X[!Q'LVS$X[@ $X[!Q 'LVS$X[

'LPLQXLX

}

else

{

IRUM M PM

,QVHUHBSDJLQD$X[$S3DJ!U>M@$S3DJ!S>M@ IUHH$S3DJ

$S3DL!Q LI$S3DL!Q! P 'LPLQXLX

}

(12)

23

}

}

YRLG$QWHFHVVRU$SRQWDGRU$SLQW,QG$SRQWDGRU$S3DLLQW'LPLQXLX

{

LI$S3DL!S>$S3DL!Q@ 18//

{

$QWHFHVVRU$S,QG$S3DL!S>$S3DL!Q@'LPLQXLX LI'LPLQXLX

5HFRQVWLWXL$S3DL!S>$S3DL!Q@$S3DL$S3DL!Q'LPLQXLX

return;

}

$S!U>,QG@ $S3DL!U>$S3DL!Q@ $S3DL!Q

'LPLQXLX $S3DL!QP

}

YRLG5HWLUDU7LSRBFKDYH&K$SRQWDGRU$SLQW'LPLQXLX

{

int Ind, j;

Apontador WITH;

LI$S 18//

{

SULQWI³(UURUHJLVWURQDRHVWDQDDUYRUH?Q´ V\VWHP³3$86(´

'LPLQXLX

return;

}

:,7+ $S ,QG

ZKLOH,QG:,7+!Q &K!:,7+!U>,QG@FKDYHBDUYRUH ,QG

LI&K :,7+!U>,QG@FKDYHBDUYRUH

{

LI:,7+!S>,QG@ 18//^ :,7+!Q

'LPLQXLX :,7+!QP IRUM ,QGM :,7+!QM

{

:,7+!U>M@ :,7+!U>M@ :,7+!S>M@ :,7+!S>M@

(13)

25

}

return;

}

$QWHFHVVRU$S,QG:,7+!S>,QG@'LPLQXLX LI'LPLQXLX

5HFRQVWLWXL:,7+!S>,QG@$S,QG'LPLQXLX

return;

}

LI&K!:,7+!U>,QG@FKDYHBDUYRUH ,QG

5HWLUDU&K :,7+!S>,QG@'LPLQXLX LI'LPLQXLX

5HFRQVWLWXL:,7+!S>,QG@$S,QG'LPLQXLX

}

YRLG5HPRYHUBFKDYH7LSRBFKDYH&K$SRQWDGRU$S

{

int Diminuiu;

Apontador Aux;

5HWLUDU&K$S 'LPLQXLX

LI'LPLQXLX $S!Q ^ $X[ $S

$S $X[!S>@ IUHH$X[

} }

YRLG/LVWDUBDUYRUH$SRQWDGRUSLQW1LYHO

{

int i;

LIS 18//

return;

IRUL L 1LYHOL SULQWI³³

IRUL LS!QL

SULQWI³G´S!U>L@FKDYHBDUYRUH SXWFKDUµ?Q¶

IRUL L S!QL /LVWDUBDUYRUHS!S>L@1LYHO

}

(14)

27

LQWPDLQ

{

Apontador *arv; Registro registro;

FKDUHQWUDGD V\VWHP³&/6´

DUY $SRQWDGRUPDOORFVL]HRI$SRQWDGRU ,QLFLDOL]DDUY

V\VWHP³&/6´ SULQWI³0(18?Q´ SULQWI³?Q´ ZKLOH

{

V\VWHP³&/6´ SULQWI³0(18?Q´ SULQWI³?Q´ SULQWI³,QVHULUQDDUYRUH?Q´ SULQWI³5HPRYHUGDDUYRUH?Q´ SULQWI³/LVWDUDUYRUH?Q´ SULQWI³6DLU?Q´

SULQWI³?Q'LJLWHVXDRSFDR³ VFDQI³F´ HQWUDGD LIHQWUDGD ¶¶

break;

VZLWFKHQWUDGD

{

FDVHµ¶

do

{

V\VWHP³&/6´

SULQWI³,QVHULUQDDUYRUH?Q´ SULQWI³?Q´

SULQWI³'LJLWHRYDORUGDFKDYHDVHULQVHULGDSDUD¿QDOL]DU?Q!³ VFDQI³G´ UHJLVWURFKDYHBDUYRUH

,QVHULUBFKDYHUHJLVWURDUY `ZKLOHUHJLVWURFKDYHBDUYRUH

break;

FDVHµ¶

do

{

(15)

29

V\VWHP³&/6´

SULQWI³5HPRYHUGDDUYRUH?Q´ SULQWI³?Q´

SULQWI³'LJLWHRYDORUGDFKDYHDVHUUHPRYLGDSDUD¿QDOL]DU?Q!³ VFDQI³G´ UHJLVWURFKDYHBDUYRUH

5HPRYHUBFKDYHUHJLVWURFKDYHBDUYRUHDUY `ZKLOHUHJLVWURFKDYHBDUYRUH

break;

FDVHµ¶ V\VWHP³&/6´ SULQWI³/LVWDUDUYRUH?Q´ SULQWI³?Q´ /LVWDUBDUYRUHDUYPP V\VWHP³3$86(´

break; }

}

V\VWHP³3$86(´

}

ACOMPANHE

NA

WEB

Árvores B

‡ $V iUYRUHV % VmR iUYRUHV EDODQFHDGDV SURMHWDGDV SDUD WUDEDOKDU FRP GLVSRVLWLYRV GH

armazenamento secundário, como discos magnéticos. Elas visam otimizar as operações de entrada e saída nos dispositivos.

Disponível em: KWWSZZZOFDGLFPFXVSEUaQRQDWR('%BDUYRUHEWUHHKWP!$FHVVRHPVHW

Árvores B

‡As árvores B são árvores balanceadas desenvolvidas para otimizar o acesso ao armazenamento secundário.

Disponível em: KWWSZZZLFXQLFDPSEUa]DQRQLPRDXODVDUYRUHV%SGI!$FHVVRHPVHW

Árvores B-tree

‡As multidirecionais ou árvores B são desenvolvidas para otimizar o acesso ao armazenamento secundário.

Disponível em: KWWSVZZZ\RXWXEHFRPZDWFK"Y 7.LWS&QJ!$FHVVRHPVHW

(16)

31

Instruções:

$JRUDFKHJRXDVXDYH]GHH[HUFLWDUVHXDSUHQGL]DGR$VHJXLUYRFrHQFRQWUDUiDOJXPDVTXHVW}HVGHP~OWLSOD HVFROKDHGLVVHUWDWLYDV/HLDFXLGDGRVDPHQWHRVHQXQFLDGRVHDWHQWHVHSDUDRTXHHVWiVHQGRSHGLGR

Questão 1

4XHVWmR&RPRLQWXLWRGHYHUL¿FDUDVKDELOLGDGHVGHSURJUDPDomRDGTXLULGDVDWpDJRUDDDWLYLGDGHSURSRVWDpDVROXomRGH XPSUREOHPDVLPSOHVXWLOL]DQGRRVUHFXUVRVGHSURJUDPDomRHVWXGDGRVQRWHPDDQWHULRU7DLVFRQKHFLPHQWRVVmRH[WUHPDPHQWH QHFHVViULRVQDVHTXrQFLDGHHVWXGRGRVFRQWH~GRVSRLVWHUHPRVPXLWRVH[HPSORVHH[HUFtFLRVEDVHDGRVQDOLQJXDJHP&

Problema proposto: Baseando-se na estrutura de programação da linguagem C, crie um programa que carregue uma árvore binária e resolva os itens abaixo:

,QVHULUXPQ~PHURQDiUYRUH &RQVXOWDUXPQ~PHURGDiUYRUH ([FOXLUXPQ~PHURGDiUYRUH

LQFOXGHLRVWUHDP! LQFOXGHVWGLRK!

struct arvore {

int num;

arvore *direita, *esquerda; };

AGORA

É

A

SUA

VEZ

arvore *raiz, *aux;

DUYRUHLQVHUHB5DUYRUHDX[LQWQXP

{

LIDX[ 18//

{

DX[ QHZDUYRUH DX[!QXP QXP DX[!HVTXHUGD 18// DX[!GLUHLWD 18//

}

HOVHLIQXPDX[!QXP

DX[!HVTXHUGD LQVHUHB5DX[!HVTXHUGDQXP

else

DX[!GLUHLWD LQVHUHB5DX[!GLUHLWDQXP

return aux; }

LQWFRQVXOWDUDUYRUHDX[LQWQXPLQWDFKRX

{

LIDX[ 18// DFKRX

{

LIDX[!QXP QXP

(17)

33

DFKRX

}

HOVHLIQXPDX[!QXP

DFKRX FRQVXOWDUDX[!HVTXHUGDQXPDFKRX

else

DFKRX FRQVXOWDUDX[!GLUHLWDQXPDFKRX

}

UHWXUQDFKRX

}

DUYRUHUHPRYHDUYRUHDX[LQWQXP

{

arvore *p, *p2;

LIDX[!QXP QXP

{

LIDX[!HVTXHUGD DX[!GLUHLWD

{

GHOHWHDX[

return NULL; }

HOVHLIDX[!HVTXHUGD 18//

{

S DX[!GLUHLWD

GHOHWHDX[

return p; }

HOVHLIDX[!GLUHLWD 18//

{

S DX[!HVTXHUGD

GHOHWHDX[

return p; } else {

S DX[!GLUHLWD

S DX[!GLUHLWD

ZKLOHS!HVTXHUGD

{

S S!HVTXHUGD

}

S!HVTXHUGD DX[!HVTXHUGD

GHOHWHDX[

return p2; } }

LIDX[!QXPQXP

(18)

35

DX[!GLUHLWD UHPRYHDX[!GLUHLWDQXP

else

DX[!HVTXHUGD UHPRYHDX[!HVTXHUGDQXP

return aux; }

LQWPDLQ

{

LQWRSDFKRXQXPHUR UDL] 18//

do {

V\VWHP³&/6´

SULQWI³?Q0HQXGHRSo}HV´

SULQWI³?Q,QVHULUXPQ~PHURQDiUYRUH´ SULQWI³?Q&RQVXOWDUXPQ~PHURGDiUYRUH´ SULQWI³?Q([FOXLUXPQ~PHURGDiUYRUH´ SULQWI³?Q6DLU´

SULQWI³?Q'LJLWHVXDRSomR³ VFDQI³G´ RS LIRS__RS!

SULQWI³?Q?Q2SomRLQYiOLGD?Q´ LIRS

{

VWGFRXW³?Q'LJLWHRQ~PHURDVHULQVHULGR³ VFDQI³G´ QXPHUR

UDL] LQVHUHB5UDL]QXPHUR SULQWI³?Q1~PHURLQVHULGR?Q´

}

LIRS

{

VWGFRXW³?Q'LJLWHRQ~PHURDVHUFRQVXOWDGR³ VFDQI³G´ QXPHUR

DFKRX FRQVXOWDUUDL]QXPHUR LIDFKRX

SULQWI³?Q1~PHURQmRHQFRQWUDGR?Q´

else

SULQWI³?Q1~PHURHQFRQWUDGR?Q´

}

LIRS

{

LIUDL] 18// SULQWI³ÈUYRUHYD]LD?Q´

else {

(19)

37

VWGFRXW³?Q'LJLWHRQ~PHURDVHUUHPRYLGR³

VFDQI³G´ QXPHUR

DFKRX FRQVXOWDUUDL]QXPHUR

LIDFKRX

SULQWI³?Q1~PHURQmRHQFRQWUDG?Q´

else {

UDL] UHPRYHUDL]QXPHUR SULQWI³?Q1~PHURUHPRYLGR?Q´

} } }

V\VWHP³3$86(´

}

ZKLOHRS

}

Questão 2

$VVLQDOHDDOWHUQDWLYDLQFRUUHWDFRPUHODomRjVSURSULHGDGHVGHXPDiUYRUH%GHRUGHPQ

a) &DGDQySRGHWHUQRPi[LPRQ¿OKRV

b) &DGDQyLQFOXVLYHRQyUDL]HRVQyVIROKDVGHYHWHUSHORPHQRVQ¿OKRV

c) 2QyUDL]GHYHWHUSHORPHQRVGRLV¿OKRVDPHQRVTXHVHMDXPQyIROKD

d) 7RGRQyQmRIROKDFRPP¿OKRVGHYHUiWHUQFKDYHV

e) 1HQKXPDGDVDOWHUQDWLYDVpYHUGDGHLUD

Questão 3

Dentre as alternativas a seguir, qual satisfazXPDSURSULHGDGHGHXPDiUYRUH%GHRUGHPQ"

a) 7RGRQyQmRIROKDFRPP¿OKRVGHYHUiWHUQFKDYHV

b) 2QyIROKDGHYHWHUSHORPHQRVGRLV¿OKRVDPHQRVTXHVHMDXPQyUDL]

c) &DGDQyLQFOXVLYHRQyUDL]HRVQyVIROKDVGHYHWHUSHORPHQRVQ¿OKRV

d) &DGDQySRGHWHUQRPi[LPRQ¿OKRV

e) 1HQKXPDGDVDOWHUQDWLYDVpYHUGDGHLUD

Questão 4

'DGDXPDiUYRUH%GHRUGHPTXDOpRQ~PHURPi[LPRGHFKDYHVTXHSRGHPVHUDUPD]HQDGDVSRUQyIROKD")XQGDPHQWH

sua resposta.

Questão 5

1DVRSHUDo}HVGHLQVHUomRTXDQGRDSiJLQDpGLYLGLGDRVQyVVmRGLYLGLGRVLJXDOPHQWHHQWUHDVSiJLQDVQRYDHYHOKD'DGD XPDiUYRUH%GHRUGHPTXDOpRQ~PHURPtQLPRGHFKDYHVTXHXPQySRGHDUPD]HQDUH[FHWRRQyUDL]")XQGDPHQWHVXD

(20)

39

Os conceitos e exemplos práticos em C apresentados neste tema deixaram bem claro que a estrutura de dados do

WLSRiUYRUHPXOWLGLUHFLRQDOiUYRUH%pPXLWRYHUViWLOQDVROXomRGHSUREOHPDVGRFRWLGLDQR

1DHVWUXWXUDGRWLSRiUYRUHFDGDHOHPHQWRDUPD]HQDXPWLSRGHGDGRHGHSRQWHLURVSDUDRHOHPHQWRjHVTXHUGDHj

direita, o que permite a inserção dos valores na árvore de forma recursiva.

Diferentemente das árvores de busca binária e AVL, a árvore multidirecional não precisa ser rebalanceada. Outra característica importante da árvore multidirecional, que aponta vantagens se comparada a outros tipos de árvores, é o menor tempo de acesso e pesquisa. Nas operações de inserção e remoção de dados, o nó não pode ser maior que sua ordem e, também, não pode ser menor que sua ordem dividida por 2.

$V RSHUDo}HV EiVLFDV GH LQVHUomR FRQVXOWD H H[FOXVmR GH XP Q~PHUR GD iUYRUH IRUDP DERUGDGDV FRP H[HPSORV

práticos.

REFERÊNCIAS

DUARTE, Luis; REIS, .OHLWRQ0DUTXHVGRV6&+,/,1*$GOHUÈUYRUHV%WUHHVídeo/YouTube. Disponível em: KWWSVZZZ

\RXWXEHFRPZDWFK"Y 7.LWS&QJ!$FHVVRHPMXQ

,&81,&$03ÈUYRUHV%Complexidade de Algoritmos II&DPSLQDV81,&$03,QVWLWXWRGH&RPSXWDomRVHW

Disponível em: KWWSZZZLFXQLFDPSEUa]DQRQLPRDXODVDUYRUHV%SGI!$FHVVRHPMXQ

LCAD. Árvores B6mR3DXOR863/DERUDWyULRGH&RPSXWDomRGH$OWR'HVHPSHQKR'LVSRQtYHOHPKWWSZZZOFDGLFPF

XVSEUaQRQDWR('%BDUYRUHEWUHHKWP!$FHVVRHPMXQ

7(1(1%$80$DURQ0/$1*6$0<HGLG\DK$8*(167(,10RVKH-Estruturas de Dados Usando C. São Paulo: Makron

%RRNV

GLOSSÁRIO

Banco de dados: É uma estrutura utilizada para armazenamento, que compreende um conjunto de registros cujo obje-tivo é organizar e armazenar dados e informações.

Sistema de arquivos: São rotinas e estruturas lógicas que auxiliam os sistemas operacionais no controle de acesso ao disco rígido. O volume de arquivos e acessos tende a crescer junto com a capacidade de armazenamento dos discos,

HLVVRH[LJHTXHRVVLVWHPDVGHDUTXLYRVVHMDPPDLVUREXVWRVSDUDDFRPSDQKDUHPRYROXPHGHDFHVVRVDRVDUTXLYRV

Tabela hash:7DPEpPpFRQKHFLGDFRPRWDEHODGHGLVSHUVmRRXGHHVSDOKDPHQWReXPWLSRGHHVWUXWXUDGHGDGRV

TXHWHPFRPRSULQFLSDOFDUDFWHUtVWLFDDDVVRFLDomRGHFKDYHVGHSHVTXLVDDRVYDORUHVDUPD]HQDGRV6XDHVWUXWXUDGH EXVFDWHQGHDVHUUiSLGDSRLVSDUWHGHXPDFKDYHVLPSOHVSDUDHQFRQWUDURYDORUEXVFDGR

GABARITO

Questão 1

Resposta:

LQFOXGHLRVWUHDP! LQFOXGHVWGLRK!

struct arvore

{ int num;

(21)

41

arvore *raiz, *aux;

DUYRUHLQVHUHB5DUYRUHDX[LQWQXP

{

LIDX[ 18//

{

DX[ QHZDUYRUH DX[!QXP QXP DX[!HVTXHUGD 18// DX[!GLUHLWD 18//

}

HOVHLIQXPDX[!QXP

DX[!HVTXHUGD LQVHUHB5DX[!HVTXHUGDQXP

else

DX[!GLUHLWD LQVHUHB5DX[!GLUHLWDQXP

return aux; }

LQWFRQVXOWDUDUYRUHDX[LQWQXPLQWDFKRX

{

LIDX[ 18// DFKRX

{

LIDX[!QXP QXP

{

DFKRX

}

HOVHLIQXPDX[!QXP

DFKRX FRQVXOWDUDX[!HVTXHUGDQXPDFKRX

else

DFKRX FRQVXOWDUDX[!GLUHLWDQXPDFKRX

}

UHWXUQDFKRX

}

DUYRUHUHPRYHDUYRUHDX[LQWQXP

{

arvore *p, *p2;

LIDX[!QXP QXP

{

LIDX[!HVTXHUGD DX[!GLUHLWD

{

GHOHWHDX[

(22)

43

HOVHLIDX[!HVTXHUGD 18//

{

S DX[!GLUHLWD

GHOHWHDX[

return p;

}

HOVHLIDX[!GLUHLWD 18//

{

S DX[!HVTXHUGD

GHOHWHDX[

return p; } else

{

S DX[!GLUHLWD

S DX[!GLUHLWD

ZKLOHS!HVTXHUGD

{

S S!HVTXHUGD

}

S!HVTXHUGD DX[!HVTXHUGD

GHOHWHDX[

return p2; }

}

LIDX[!QXPQXP

DX[!GLUHLWD UHPRYHDX[!GLUHLWDQXP

else

DX[!HVTXHUGD UHPRYHDX[!HVTXHUGDQXP

return aux; }

LQWPDLQ

{

LQWRSDFKRXQXPHUR UDL] 18//

do {

V\VWHP³&/6´

SULQWI³?Q0HQXGHRSo}HV´

(23)

45

SULQWI³?Q([FOXLUXPQ~PHURGDiUYRUH´ SULQWI³?Q6DLU´

SULQWI³?Q'LJLWHVXDRSomR³ VFDQI³G´ RS

LIRS__RS!

SULQWI³?Q?Q2SomRLQYiOLGD?Q´ LIRS

{

VWGFRXW³?Q'LJLWHRQ~PHURDVHULQVHULGR³ VFDQI³G´ QXPHUR

UDL] LQVHUHB5UDL]QXPHUR SULQWI³?Q1~PHURLQVHULGR?Q´

}

LIRS

{

VWGFRXW³?Q'LJLWHRQ~PHURDVHUFRQVXOWDGR³ VFDQI³G´ QXPHUR

DFKRX FRQVXOWDUUDL]QXPHUR LIDFKRX

SULQWI³?Q1~PHURQmRHQFRQWUDGR?Q´

else

SULQWI³?Q1~PHURHQFRQWUDGR?Q´

}

LIRS

{

LIUDL] 18// SULQWI³ÈUYRUHYD]LD?Q´

else {

VWGFRXW³?Q'LJLWHRQ~PHURDVHUUHPRYLGR³ VFDQI³G´ QXPHUR

DFKRX FRQVXOWDUUDL]QXPHUR LIDFKRX

SULQWI³?Q1~PHURQmRHQFRQWUDG?Q´

else {

UDL] UHPRYHUDL]QXPHUR SULQWI³?Q1~PHURUHPRYLGR?Q´

(24)

47

}

V\VWHP³3$86(´

}

ZKLOHRS

}

Clique aqui para retornar à seção Agora é a Sua Vez.

Questão 2

Resposta: Alternativa B.

3DUDXPDiUYRUH%GHRUGHPQRQGHQUHSUHVHQWDRPi[LPRGH¿OKRVSDUDFDGDQyVypXPDiUYRUH%VHDWHQGHUjV

seguintes propriedades:

&DGDQySRGHWHUQRPi[LPRQ¿OKRV

&DGDQyH[FHWRRQyUDL]HRVQyVIROKDVGHYHWHUSHORPHQRVQ¿OKRV 2QyUDL]GHYHWHUSHORPHQRVGRLV¿OKRVDPHQRVTXHVHMDXPQyIROKD 7RGRQyQmRIROKDFRPP¿OKRVGHYHUiWHUPFKDYHV

)ROKDVWrPTXHDSDUHFHUQRPHVPRQtYHOHDUPD]HQDPGDGRV

No caso da questão 2, a alternativa b aponta uma propriedade que não representa uma das características de uma árvore B de ordem n. Observe que na alternativa b, relacionada ao item 2 anteriormente citado, é usada a palavra

³LQFOXVLYH´QROXJDUGH³H[FHWR´RTXHGHVFDUDFWHUL]DXPDSURSULHGDGHGHiUYRUH%

Questão 3

Resposta: Alternativa A.

3DUDXPDiUYRUH%GHRUGHPQRQGHQUHSUHVHQWDRPi[LPRGH¿OKRVSDUDFDGDQyVypXPDiUYRUH%VHDWHQGHUjV

seguintes propriedades:

&DGDQySRGHWHUQRPi[LPRQ¿OKRV

&DGDQyH[FHWRRQyUDL]HRVQyVIROKDVGHYHWHUSHORPHQRVQ¿OKRV 2QyUDL]GHYHWHUSHORPHQRVGRLV¿OKRVDPHQRVTXHVHMDXPQyIROKD 7RGRQyQmRIROKDFRPP¿OKRVGHYHUiWHUPFKDYHV

)ROKDVWrPTXHDSDUHFHUQRPHVPRQtYHOHDUPD]HQDPGDGRV

No caso da questão 3, o item 4 anteriormente citado é uma das propriedades de uma árvore B de ordem n, que é

MXVWDPHQWHRTXHFRQVWDQDDOWHUQDWLYDµD¶GDTXHVWmR

Questão 4

Resposta: (PXPDiUYRUH%GHRUGHPPRQ~PHURPi[LPRGHFKDYHVHPXPQyIROKDpP3RUWDQWRXPDiUYRUH%GHRUGHP

SRGHWHUQRPi[LPRFKDYHVSRUQyIROKD

Questão 5

Resposta:2Q~PHURPtQLPRGHFKDYHVHPXPQypGDGRSRU>P@H[FHWRSDUDDUDL]3RUWDQWRXPDiUYRUH%GHRUGHP

(25)

Figure

Updating...

References

Updating...

Download now (25 pages)