tarea arboles

3
Guia de Ejercicios. Arboles Binarios. Matem´ aticas Discretas SergioHern´andez Facultad de ciencias de la Ingenieria Universidad Cat´ olica del Maule [email protected] November 24, 2015 1 Introducci´ on Las b´ usquedas en espacios multidimensionales (datos espaciales, im´ agenes, audio, etc) son costosas debido a la comparaci´ on exhaustiva de distancias entre objetos. De modo de obtener una indexaci´ on adecuada, podemos recurrir a las propiedades de los espacios etricos. Dado un espacio vectorial X R D y una funci´ on de distancia d : X × X 7R, para cada par de elementos x, y X tenemos que : d(x, y) > 0 d(x, y)=0 = x = y d(x, x)=0 d(x, y)+ d(y,z ) d(x, z ) desigualdad triangular La complejidad de evaluar de manera exhaustiva las distancias entre objetos depende no solo de la cantidad de objetos n sino que tambi´ en de la dimensionalidad D. Por lo tanto se hace necesario contemplar otros mecanismos de indexaci´ on. 2 usqueda por ´ ındices Un m´ etodo de b´ usqueda por ´ ındices son los KD-trees, los cuales se basan en ´ arboles binarios, pero cortando uno de los ejes de manera ortogonal. El m´ etodo para realizar los cortes se basa en la mediana del eje seleccionado y produce un ´ arbol de altura log(n). El ´ arbol puede ser construido de manera recursiva con un costo O(n log n), el cual efectivamente es menor que la b´ usqueda exhaustiva O(n 2 ). 1

Upload: felipe-arzola

Post on 30-Jan-2016

8 views

Category:

Documents


0 download

DESCRIPTION

s

TRANSCRIPT

Page 1: Tarea Arboles

Guia de Ejercicios.

Arboles Binarios. Matematicas Discretas

Sergio HernandezFacultad de ciencias de la Ingenieria

Universidad Catolica del [email protected]

November 24, 2015

1 Introduccion

Las busquedas en espacios multidimensionales (datos espaciales, imagenes, audio, etc)son costosas debido a la comparacion exhaustiva de distancias entre objetos. De modode obtener una indexacion adecuada, podemos recurrir a las propiedades de los espaciosmetricos. Dado un espacio vectorial X ⊂ RD y una funcion de distancia d : X ×X 7→ R,para cada par de elementos x, y ∈ X tenemos que :

d(x, y) > 0

d(x, y) = 0 =⇒ x = y

d(x, x) = 0

d(x, y) + d(y, z) ≥ d(x, z) desigualdad triangular

La complejidad de evaluar de manera exhaustiva las distancias entre objetos dependeno solo de la cantidad de objetos n sino que tambien de la dimensionalidad D. Por lo tantose hace necesario contemplar otros mecanismos de indexacion.

2 Busqueda por ındices

Un metodo de busqueda por ındices son los KD-trees, los cuales se basan en arboles binarios,pero cortando uno de los ejes de manera ortogonal.

El metodo para realizar los cortes se basa en la mediana del eje seleccionado y produceun arbol de altura log(n). El arbol puede ser construido de manera recursiva con un costoO(n log n), el cual efectivamente es menor que la busqueda exhaustiva O(n2).

1

Page 2: Tarea Arboles

La Figura 1 muestra una arbol binario. Los hijos de cada nodo corresponden a laposicion de la mediana del eje seleccionado para cada profundidad.

A

B C

D

E F

Figure 1: Arbol binario que representa un KD-Tree. Cada nivel del arbol representa uncorte basado en la mediana del eje de corte

De manera de consultar por los vecinos mas proximos (nn), descendemos por el arboly mantenemos un punto candidato a ser el nn y un valor maximo conocido de la distanciaal punto de consulta. Luego chequeamos los sub-arboles dependiendo del eje de cortecontinuamos por una de las ramas.

Otro ejemplo tıpico es la busqueda por rangos en consultas geoespaciales. Supongamosque tenemos una aplicacion movil que busca ciudades cercanas y la recomendacion dependede la ubicacion del usuario. La base de datos podria contener los siguientes datos:

Longitud −71.661999Latitud −35.432349Ciudad Talca

3 Ejercicios

Se solicita implementar el algoritmo KD-trees para hacer busquedas de ciudades de Chile.El siguiente codigo lee datos (nombre, latitud, longitud) desde un archivo ESRI shapefiley los carga en memoria. Completar las siguientes funcionalidades:

2

Page 3: Tarea Arboles

Program 1 Ciudades de Chileimport osgeo.ogr

import math

class Node:pass

def haversine_distance((lat1,lon1),(lat2,lon2)):

dlat = math.radians(lat2-lat1)

dlon = math.radians(lon2-lon1)

a = math.sin(dlat/2) * math.sin(dlat/2) + math.cos(math.radians(lat1)) \

math.cos(math.radians(lat2)) * math.sin(dlon/2) * math.sin(dlon/2)

c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))

return 6371 * c

def kdtree_create(pointlist,names,depth=0):

#Retornar nodo y sub-arboles

node=Node()

return node

def kdtree_knn(kdtree,point,n=1):

#Retornar lista de n ciudades mas cercanas al punto point=(p1,p2)

return None

def kdtree_range(kdtree,point,range=0):

#Retornar lista de ciudades cercanas al punto point=(p1,p2) dentro de un rango

return None

ciudades={}

shapefile=osgeo.ogr.Open("cl_ciudades_geo.shp")

layer=shapefile.GetLayer(0)

spatialRef=layer.GetSpatialRef().ExportToProj4()

numFeatures=layer.GetFeatureCount()

for i in range(numFeatures):

feature=layer.GetFeature(i)

geometry=feature.GetGeometryRef()

point=geometry.GetPoint(0)

ciudades[feature.items()[’NOMBRE’]]=(point[1],point[0])

kdtree=kdtree_create(ciudades.values(),ciudades.keys())

3