2011-10-02 21 views
5

Proporcione un n log n time límite inferior para un algoritmo para verificar si un conjunto de puntos tiene un punto especial k.Algoritmo para encontrar el punto especial k en el tiempo O (n log n)

k se define como:

para un conjunto A de puntos, si por cada punto m en A, hay una q punto en A tal que k está en el medio de la mq segmento de línea tales ak no tiene que pertenecer a A.

Por ejemplo, este conjunto tiene un punto especial k = (0.5, 0.5) para un conjunto de cuatro puntos (1,0), (0,1), (1,1), (0,0).

Me enfrenté totalmente al póker cuando me preguntaron esto, no se me ocurrió nada. Supongo que necesita un fuerte fondo geométrico.

+1

Realmente no entiendo su pregunta. Un algoritmo que encuentra un límite inferior¿Te refieres a un algoritmo * con * un límite inferior? ¿O una prueba de que dicho algoritmo * tiene * un límite inferior? – davin

Respuesta

8

O(nlogn) solución (todavía no estoy claro por qué usted está buscando una solución cota más baja . Es lo mismo que acaba de hacer una comprobación exhaustiva, y luego simplemente ejecutar un bucle nlogn para asegurarse de la cota inferior No es muy difícil. Creo que debes querer decir el límite superior):

Encuentra el único punto candidato válido promediando todos los puntos. Es decir. sumando sus coordenadas y dividiendo por el número de puntos. Si tal k existe, este es. Si no existe tal k, veremos que el punto encontrado no es válido en el paso final.

Cree una nueva matriz (conjunto) de puntos, donde cambiamos nuestros ejes para que se centren en el punto k. Es decir. si k = (x k, y k), un punto (x, y) se convertirá en (x-x k, y-y k). Ordene los puntos según la relación x/y la norma sqrt (x + y). Como muestra el siguiente paso, no importa cómo se realiza este tipo, es decir, cuál es el criterio principal y cuál el secundario.

Podríamos buscar el complemento de cada punto, o mejor, simplemente recorrer la matriz y verificar que cada dos puntos adyacentes sean de hecho complementos. Es decir. si esta es una solución, cada dos puntos complementarios en esta nueva matriz son de la forma (x, y) y (-x, -y) ya que recentramos nuestros ejes, lo que significa que tienen la misma proporción ("gradiente") y norma, y ​​después del género, debe ser adyacente.

Si k no es válido, entonces hay un punto al que llegaremos en este recorrido, y descubrimos que su vecino no es de la forma correcta/complementaria ==> no existe tal k.

Tiempo =
O(n) para encontrar el candidato k +
O(n) para la construcción de la nueva matriz, ya que cada nuevo punto puede calcularse en O (1) +
O(nlogn) para el tipo +
O(n) para la verificación recorrido
= O(nlogn)

1

Yo diría que acaba de calcular el centro de masas (habiendo eliminado primero los duplicados) y verifica si es tu k. Probablemente, lo único que hace que sea O(n log n) sería buscar un punto en la ubicación especificada.

Cuestiones relacionadas