. Login Cadastro

Comunidade para programadores


Você não está conectado. Conecte-se ou registre-se

Implementação de uma Árvore KD (2D)

Ver o tópico anterior Ver o tópico seguinte Ir para baixo Mensagem [Página 1 de 1]

Post: #14/9/2020, 17:01

Morzan

Morzan

Administrador
Código:

k = 2
def build_kdtree(points, depth=0, parent_split=None):
    n = len(points)
    if n <= 0:
        return None

    axis = depth % k

    sorted_points = sorted(points, key=lambda point: point[axis])
    if n == 1:
        return {
            'point': sorted_points.pop()
        }
    else:
        mid_point = int((n - 1) / 2)
        split_value = sorted_points[mid_point][axis]

        no =  {
            "split": split_value,
            "left": build_kdtree(sorted_points[: mid_point+1], depth + 1),
            "right": build_kdtree(sorted_points[mid_point+1 :], depth + 1),
            # these are bottom-left point and top-right points
        }
        return no

segue um caso de exemplo:
Código:
kdtree = build_kdtree([
(-13,8),
(-11,-7),
(-8,-1),
(-8,6),
(-5,-5),
(-2,2),
(2,7),
(4,-6),
(6,5),
(8,-3),
])
pprint.pprint(kdtree)

https://doublefree.forumeiros.com

Ver o tópico anterior Ver o tópico seguinte Ir para o topo Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos