Professional Documents
Culture Documents
Humberto Razente
rvores k-d
N consiste de:
ponteiros para filhos esquerda e direita
chave k-dimensional
informaes satlite (por exemplo, nome de um
local)
rvores k-d construo
if (nodo == NULL)
nodo = new nodokd(ponto)
else if (ponto[dim] < nodo.ponto[dim])
nodo.esq = insere_kd(ponto, nodo.esq,
profundidade+1)
else
nodo.dir = insere_kd(ponto, nodo.dir,
profundidade+1)
return nodo;
}
rvores k-d insero
(35,60) x
(20,45) (60,80) y
Remover raiz (35,60):
(10,35) (80,40) x encontrar o elemento
na sub-rvore a
(20,20) (50,30) (90,60) y direita que tem o
menor valor para a
(70,20) x dimenso x: (50,30)
(60,10) y
rvores k-d remoo
Exemplo: remoo da raiz (35,60)
(50,30) x
(20,45) (60,80) y
Para substituir o
(10,35) (80,40) x elemento (50,30),
encontrar o elemento
com menor valor na
(20,20) (50,30) (90,60) y dimenso y na sub-
rvore esquerda (pois
(70,20) x no h sub-rvore
direita), entretanto ligar
(60,10) y sub-rvore esquerda
no ponteiro direita
rvores k-d remoo
Exemplo: remoo da raiz (35,60)
(50,30) x (50,30)
(70,20) x (70,20)
(60,10) y
Consultas
Consulta pontual:
em uma k-d com k=3, selecionar ponto (30,25,90)
Consulta pontual parcial
em uma k-d com k=3, selecionar ponto (30,25,?)
Consulta por regio
encontrar todos os pontos que esto dentro de um hiper-
retngulo k-dimensional
Consulta por abrangncia
encontrar todos os pontos que tem distncia ao ponto de
consulta menor ou igual que um raio
Consulta ao vizinho mais prximo (nearest neighbor)
dada uma funo de distncia e um ponto p, encontrar o
vizinho mais prximos ao ponto p
Nearest neighbor
Dado um ponto Q, encontre o ponto P mais prximo
No funciona: encontrar a clula que poderia conter o
ponto Q e retornar o ponto
razo: o ponto mais prximo no espao pode estar
longe de P na rvore
(52,52)
Nearest neighbor
Nearest neighbor
Nearest neighbor
Nearest neighbor
Leitura complementar
28
Referncia
29