[eside-ghost] Quereis currar en google? Haced algoritmos!

Borja Sotomayor borja en borjanet.com
Mar Ene 30 00:50:30 CET 2007


Jelou!

> Ahora en serio, yo tp tengo ni pajolera idea.. esto si que debería (en 
> mi opinion) saberse para ser ingeniero informático (tanto tecnico como 
> superior, me da igual).

Efectivamente... sin embargo, con sólo saber un poco de teoría 
informática, es fácil ver que el problema que plantea Google no es más 
que un problema (bastante clásico) llamado "Nearest Neighbors", bastante 
relevante en IA y en aprendizaje automatico.

	http://en.wikipedia.org/wiki/Nearest_neighbor_search

La solución trivial requiere O(NK) pasos, pero hay un método que utiliza 
un arbol balanceado para particionar el espacio (multidimensional) en el 
que se realiza la busqueda, de tal manera que pasamos de una busqueda 
lineal (calcular la distancia a todos los puntos) a una busqueda binaria 
(en la que nos cargamos la mitad de los puntos en cada iteración, y 
entonces tenemos una complejidad logaritmica, no lineal).

En concreto, la estructura de datos necesaria es un arbol kd:

	http://en.wikipedia.org/wiki/Kd_tree

La construcción del arbol requiere N*log(N) pasos, y cada "consulta" 
(cual es el punto más cercano al "bullet") require log(N) pasos. Es 
decir, para consultar K "bullets" tenemos:

	O(N*log(N)) + K*O(log(N))

	K <= N: O(N*log(N))
	K >  N: O(K*log(N))

Sin embargo, todo esto solo sirve para buscar el "globo" más cercano al 
"bullet" :-) Para encontrar *todos* los globos a cierta distancia (1.0) 
del "bullet", hay que utilizar algo un poco más complejo, aunque me 
parece que un kd-tree todavía permitiría encontrarlos en un tiempo mejor 
que O(KN).

Un saludo,
-- 
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Borja Sotomayor, University of Chicago
  Ph.D. Student, Department of Computer Science
  Ryerson 257-C, 1100 East 58th Street, Chicago, IL
GT4 Tutorial: http://gdp.globus.org/gt4-tutorial/
BorjaNet:  http://www.borjanet.com/   borja en borjanet.com
·····························································
          "Dis maschine vill run und run!"
                -- Kurt Gödel (on the Turing Machine)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


Más información sobre la lista de distribución eside-ghost