En este tema veremos como los diagrama de Voronoi constituyen una herramienta que, al almacenar toda la información referente a proximidad en una nube de puntos, nos permitirá resolver numerosos problemas en ámbitos muy diversos. En la proxima sección veremos algunos de dichos problemas y en la sección tercera los solucionaremos.
Damos a continuación una serie de problemas que, a pesar de su aparente disparidad, tienen el denominador común de que la modelización de todos ellos lleva a un problema donde nos preguntamos acerca de relaciones de proximidad entre puntos:
P1-Tráfico aéreo. De forma simplificada podemos decir que si queremos diseñar una ayuda automática al tráfico aéreo, los dos aviones que más posibilidades tienen de colisionar son aquellos que se encuentran más cercano.
P2-Ecología. Es interesante conocer para cada individuo de una especie animal (probablemente en peligro de extinción), cual es el individuo de su misma especie más cercano a él y tratar de encontrar parejas de cercania, el número de parejas de este tipo que se presenten determina un coeficiente que permite medir la posibilidad que tiene una especie de sobrevivir.
P3-Trazado de redes. Queremos conectar entre sí diversos puntos de tal forma que la longitud total del trazado sea mínima. Este problema tiene aplicaciones en el trazado de redes eléctricas, telefónicas, tuberías, etc.
P4-Topografía. Dadas las alturas sobre el nivel del mar de diversos puntos sobre los que se han efectuado mediciones precisas, querríamos deducir cual es la altura de un nuevo punto sin necesidad de efectuar nuevas mediciones.
P5-Clasificación. En diversas aplicaciones como reconocedores de voz, identificación de particulas elementales, etc., disponemos de diversos patrones fijos y un nuevo elemento (el elemento a clasificar) lo hemos de identificar con uno de dichos patrones. Por ejemplo, en un reconocedor de voz los patrones son las palabras que constituyen nuestro diccionario que han sido previamente grabadas, analizadas y almacenadas, cuando un usario dice algo (una palabra), tratamos de encontrar el patrón de nuestro diccionario que más se aproxima a la palabra que se acaba de pronunciar y la identificamos (reconocemos) con dicho patrón.
A las hora de resolver estos problemas, en primer lugar, es necesario modelizarlos, a ello nos disponemos: en todos los problemas, supondremos que S es una colección de N puntos en el plano:
Tal y como se ha mencionado anteriormente, todos los problemas mencionados (y muchos más) pueden ser resueltos de forma eficiente utilizando los diagramas de Voronoi, veamos la pueculiaridad de cada caso (S sigue siendo una colección de N puntos en el plano):
Teorema 3.1: Todos los vecinos más cercanos de S puede ser resuelto en tiempo óptimo lineal conociendo Vor(S).
Demostración: Como se ha visto en la
Proposición 3.3 del Tema 2, cada vecino de un
punto de S define una arista del diagrama de Voronoi, así que sólo debemos buscar entre
los vecinos de cada punto y, por la fórmula de Euler, el numero total de vecinos es
lineal.
Evidentemente, a partir de todos los vecinos más cercanos, se resuelve el par más cercano en tiempo lineal, tenemos por tanto:
Corolario 3.1: El par más cercano de S puede ser resuelto en tiempo óptimo lineal conociendo Vor(S).
Teorema 3.2: El vecino más cercano de p puede ser resuelto en tiempo óptimo O(log N) a partir de Vor(S).
Demostración: Basta con encontrar en qué
región de Vor(S) se encuentra p y ello como se vió en el Tema 1 puede ser realizado en tiempo O(log N).
Lema 3.1: Dado una partición de S en dos subconjuntos disjuntos S1 y S2 la arista más corta que une un vértice de S1 con uno de S2 es entre dos vecinos de Vor(S).
Como una consecuencia del Lema 3.1, obtenemos:
Teorema 3.3: El árbol generador mínimo se puede construir en tiempo lineal óptimo a partir de Vor(S).
Por último, nos quedaría por resolver el problema de la triangulación pero a ello le dedicaremos el próximo tema.