Estrutura de Dados
Autoria: Carlos Eduardo Cayres | 4
osemestre
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
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@
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
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
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//
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
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
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
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
}
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
{
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
}
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@
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
}
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
{
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
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
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
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 {
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
39
Os conceitos e exemplos práticos em C apresentados neste tema deixaram bem claro que a estrutura de dados doWLSRiUYRUHPXOWLGLUHFLRQDOiUYRUH%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;
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[
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´
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´
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