stringtranslate.com

Descomposición de pares bien separados

En geometría computacional , una descomposición de pares bien separados (WSPD) de un conjunto de puntos es una secuencia de pares de conjuntos , de modo que cada par está bien separado y, para cada dos puntos distintos , existe precisamente un par que separa los dos.

El gráfico inducido por una descomposición de pares bien separados puede servir como un k-spanner del gráfico euclidiano completo y es útil para aproximar soluciones a varios problemas relacionados con esto. [1]

Definición

Representación visual de un par bien separado

Sean dos conjuntos disjuntos de puntos en , denote el cuadro delimitador mínimo alineado al eje para los puntos en , y denote el factor de separación .

Consideramos que y están bien separados , si para cada uno de y existe una bola d de radio que lo contiene, tal que las dos esferas tienen una distancia mínima de al menos . [2]

Consideramos que una secuencia de pares bien separados de subconjuntos de , es una descomposición de pares bien separados (WSPD) de si para dos puntos distintos , existe precisamente un , , tal que

Construcción

Árbol dividido

Mediante la construcción de un árbol dividido justo, es posible construir un WSPD de tamaño en el tiempo. [2]

El principio general del árbol de división de un conjunto de puntos S es que cada nodo u del árbol representa un conjunto de puntos S u y que el cuadro delimitador R(S u ) de S u se divide a lo largo de su lado más largo en dos partes iguales que forman los dos hijos de u y su conjunto de puntos. Se hace de forma recursiva hasta que solo queda un punto en el conjunto.

Sea L max (R(X)) el tamaño del intervalo más largo del hiperrectángulo delimitador del conjunto de puntos X y sea L i (R(X)) el tamaño de la i -ésima dimensión del hiperrectángulo delimitador del conjunto de puntos X. A continuación, presentamos un pseudocódigo para el cálculo del árbol de división.

SplitTree(S) Sea u el nodo para S  si  |S| = 1  R(u) := R(S) // R(S) es un hiperrectángulo cuyo lado tiene una longitud de cero. Almacena en u el único punto en S. de lo contrario Calcula R(S) Sea la dimensión i -ésima aquella donde L max (R(S)) = L i (R(S)) Divide R(S) a lo largo de la dimensión i -ésima en dos hiperrectángulos del mismo tamaño y toma los puntos contenidos en estos hiperrectángulos para formar los dos conjuntos S v y S w . v := SplitTree(S v )  w := SplitTree(S w ) Almacena v y w como, respectivamente, los hijos izquierdo y derecho de u . R(u) := R(S)  devuelve  u

Este algoritmo se ejecuta en el tiempo.

A continuación, presentamos un algoritmo más eficiente que se ejecuta en el tiempo. El objetivo es recorrer la lista en solo operaciones por paso de la recursión, pero solo invocar la recursión en, como máximo, la mitad de los puntos cada vez.

Sea S i j la i -ésima coordenada del j -ésimo punto en S tal que S i esté ordenado según la i -ésima coordenada y p(S i j ) sea el punto. Además, sea h(R(S)) el hiperplano que divide el lado más largo de R(S) en dos. Aquí está el algoritmo en pseudocódigo:

SplitTree(S, u)  si  |S| = 1  R(u) := R(S) // R(S) es un hiperrectángulo cuyo lado tiene una longitud de cero. Almacena en u el único punto en S. de lo contrario tamaño := |S|  repetir Calcular R(S)  R(u) := R(S)  j : = 1  k : = |S| Sea la dimensión i -ésima aquella donde L máx (R(S)) = L i (R(S))  S v  : = ∅  S w  : = ∅  mientras  S i j+1 < h(R(S))  y  S i k-1 > h(R(S))  tamaño:= tamaño - 1  S v  : = S v ∪ {p(S_i^j) } S w  : = S w ∪ {p(S_i^k) } j := j + 1  k := k - 1  Sean v y w, respectivamente, los hijos izquierdo y derecho de u . si  S i j+1 > h(R(S))  S w  := S \ S v  u := w  S := S w  SplitTree(S v ,v)  de lo contrario si  S i k-1 < h(R(S))  S v  := S \ S w  u := v  S := S v  SplitTree(S w ,w)  hasta que  tamaño ≤ n2  SplitTree(S,u)

Para poder mantener las listas ordenadas para cada nodo, se utilizan listas enlazadas. Se mantienen los puntos de cruce de cada lista con las demás para poder recuperar un punto en tiempo constante. En el algoritmo anterior, en cada iteración del bucle, se realiza una llamada a la recursión. En realidad, para poder reconstruir la lista sin la sobrecarga de volver a ordenar los puntos, es necesario reconstruir las listas ordenadas una vez que todos los puntos se han asignado a sus nodos. Para hacer la reconstrucción, se recorre cada lista para cada dimensión, se añade cada punto a la lista correspondiente de sus nodos y se añaden los puntos de cruce en la lista original para poder añadir los puntos de cruce para las nuevas listas. Por último, se llama a la recursión en cada nodo y su conjunto.

Cálculo de WSPD

Representación visual de un par bien separado calculado con los cuadros delimitadores

El WSPD se puede extraer de un árbol dividido de este tipo llamando a la función recursiva FindPairs(v,w) en los hijos de cada nodo del árbol dividido. Sea u l / u r los hijos del nodo u . A continuación, proporcionamos un pseudocódigo para la función FindWSPD(T, s) .

FindWSPD(T, s) para cada nodo u que no sea una hoja en el árbol dividido T,  haga FindPairs(u l , u r )

A continuación proporcionamos un pseudocódigo para la función FindPairs(v, w) .

FindPairs(v, w) si  S v y S w están bien separados con respecto a s informe par(S v , S w )  de lo contrario  si ( L max (R(v)) ≤ L max (R(w)) ) Llamar recursivamente a FindPairs(v, w l ) y FindPairs(v, w r )  de lo contrario Llamar recursivamente a FindPairs(v l , w) y FindPairs(v r , w)

La combinación de los pares s -bien separados de todas las llamadas de FindPairs(v,w) proporciona el WSPD para la separación s .

Cada vez que el árbol de recursión se divide en dos, se agrega un par más a la descomposición. Por lo tanto, el tiempo de ejecución del algoritmo se expresa en la cantidad de pares en la descomposición final.

Callahan y Kosaraju demostraron que este algoritmo encuentra una descomposición de pares bien separados (WSPD) de tamaño . [2]

Propiedades

Lema 1 : Sea un par bien separado con respecto a . Sea y . Entonces, .

Demostración : Como y están en el mismo conjunto, tenemos que donde es el radio del círculo que encierra a y . Como y están en dos conjuntos bien separados, tenemos que . Obtenemos que:

Lema 2 : Sea un par bien separado con respecto a . Sea y . Entonces, .

Demostración : Por la desigualdad triangular, tenemos:

Del Lema 1 obtenemos:

Aplicaciones

La descomposición en pares bien separados tiene aplicación en la solución de diversos problemas. WSPD se puede utilizar para:

Referencias

  1. ^ abcdefgh Smid, Michiel (16 de agosto de 2005). "La descomposición de pares bien separados y sus aplicaciones" (PDF) . Consultado el 26 de marzo de 2014 .
  2. ^ abc Callahan, PB y Kosaraju, SR (enero de 1995). "Una descomposición de conjuntos de puntos multidimensionales con aplicaciones a k-vecinos más próximos y campos potenciales de n cuerpos". Revista de la ACM . 42 (1): 67–90. doi : 10.1145/200836.200853 .
  3. ^ Bespamyatnikh, Sergei; Segal, Michael (2002). "Algoritmos rápidos para aproximar distancias". Algorítmica . 33 (2): 263–269. doi :10.1007/s00453-001-0114-7. S2CID  9758120.
  4. ^ Arya, Sunil; Mount, David M. (2016). "Un algoritmo rápido y simple para calcular árboles de expansión euclidianos mínimos aproximados". Actas del vigésimo séptimo simposio anual ACM-SIAM sobre algoritmos discretos : 1220-1233. doi :10.1137/1.9781611974331.ch85. ISBN: 978-0-2016-001-001 978-1-61197-433-1.