Estoy haciendo estas preguntas por curiosidad, ya que mi implementación rápida y sucia parece ser lo suficientemente buena. Sin embargo, tengo curiosidad por saber cuál sería una mejor implementación.algoritmo eficiente para encontrar el punto más cercano en un gráfico que no tiene una ecuación conocida
Tengo un gráfico de datos del mundo real. No hay valores duplicados de X y el valor de X se incrementa a una tasa constante en todo el gráfico, pero los datos de Y se basan en la salida del mundo real. Quiero encontrar el punto más cercano en el gráfico desde un punto dado arbitrario P programáticamente. Estoy tratando de encontrar un algoritmo eficiente (es decir, rápido) para hacer esto. No necesito el punto exacto más cercano, puedo conformarme con un punto que es "casi" el punto más cercano.
La solución diferida obvia es incrementar cada punto del gráfico, calcular la distancia y luego encontrar el mínimo de la distancia. Sin embargo, esto podría ser teóricamente lento para gráficos grandes; demasiado lento para lo que quiero.
Dado que solo necesito un punto aproximado aproximado, imagino que la ecuación más rápida ideal sería generar una línea de mejor ajuste y usar esa línea para calcular dónde debe estar el punto en tiempo real; pero eso suena como un potencial dolor de cabeza matemático que no voy a asumir.
Mi solución es un truco que funciona solo porque asumo que mi punto P no es arbitrario, es decir, supongo que P generalmente estará cerca de mi línea gráfica y cuando eso sucede puedo tachar los valores X distantes de consideración . Calculo cuán cerca está el punto en la línea que comparte la coordenada X con P y uso la distancia entre ese punto y P para calcular el valor X más grande/más pequeño que podría ser puntos más cercanos.
No puedo evitar sentir que debería haber un algoritmo más rápido que mi solución (que solo es útil porque supongo que el 99% del tiempo mi punto P ya estará cerca de la línea). Intenté buscar mejores algoritmos en Google, pero encontré tantos algoritmos que no encajaban que era difícil encontrar lo que estaba buscando entre todo el desorden de algoritmos inapropiados. Entonces, ¿alguien aquí tiene un algoritmo sugerido que sería más eficiente? Tenga en cuenta que no necesito un algoritmo completo, ya que lo que tengo funciona para mis necesidades, solo tengo curiosidad por saber cuál hubiera sido la solución adecuada.
el problema es el cálculo de la f (x). ¿Cómo haré eso sin agregar complejidad masiva a mi código? – drew
Lo sentimos, 'f (x)' es su "información del mundo real". Es el valor y de tus datos en x. – tskuzzy
bien lo siento, leí mal su respuesta. Eso está cerca de lo que hice, excepto que usé el cuadrado de distancia como mi para r en lugar de f (X) -y. Tal vez simplemente no estoy pensando con claridad, pero parece que esto no funcionará sin una raíz cuadrada o cuadrada en alguna parte debido a que la distancia se basa fuera del cuadrado de X e Y. (mi cerebro no está funcionando completamente ahora así que no puedo estar seguro de no estar siendo estúpido, je) – drew