Bien, este es el trato. Tengo un montón de funciones lineales, a * x + b.Buscar funciones mínimas
Mi objetivo es responder a la siguiente pregunta/consulta: ¿Cuál es la función mínima en x = q?
Por ejemplo: si tengo funciones f (x) = 3 * x + 2, g (x) = 5 * x - 6 y h (x) = 2 * x + 1, responderé por ejemplo:
para x = 4, la función h
para x = 2, la función g
para x = 1, la función g
Mi idea es la siguiente:
Ordenar las funciones por el coeficiente de x, en orden decreciente.
Ordenar las consultas en orden creciente
deshacerse de las funciones paralelas, mantener los que tienen la más pequeña término constante (por ejemplo: si he f (x) = 2 * x + 4 y g (x) = 2 * x + 2, f (x) nunca será más pequeño que g (x), por lo que no necesito f (x)).
En este momento estoy en el intervalo de -inf a algún número real, lo llaman W1 y sé que en este intervalo, la función con el coeficiente lineal más alta es la más pequeña
Búsqueda W1 encontrando el x1 más pequeño f (x1) = g (x1) donde f es mi función actual y g itera a través de todas las demás funciones con un coeficiente lineal menor, w1 = x1
Repita mientras mi consulta esté en el intervalo (-inf, w1): muestra la función actual, luego pasa a la siguiente consulta.
Si todavía tengo consultas que necesitan respuesta, permita que la función actual sea la que interseca mi función actual actual en x = w1, y en lugar de -inf ponga w1, repita los mismos pasos.
Sin embargo, mi implementación o idea no es lo suficientemente rápida. ¿Hay algo que no haya notado que pueda acelerar mi programa?
Gracias de antemano.
¿Podría explicarme un poco qué quiere decir con "cada intervalo"? –
@RobertBadea, claro. – goat
Creo que construir esos intervalos costará 'N^2' si está revisando cada intersección. ¿Cuál es la relación de funciones con las consultas? Esto dará una idea de qué tipo de precalculación es razonable. –