Tengo un algoritmo iterativo que minimiza una cantidad dada en cada iteración (por lo que finalmente termina). ¿Cuál es la mejor manera de probar un límite superior en el número de iteraciones del algoritmo?

(EDITAR: se cambió la pregunta. La respuesta es para una versión genérica anterior).

Creo que al ” minimizar una cantidad dada en cada iteración”, probablemente quiere decir ” reducir una cantidad dada en cada iteración”. De lo contrario, no sé cómo podría concluir que “finalmente termina”.

Del mismo modo, voy a suponer que la cantidad decreciente es un número entero, ya que de lo contrario nuevamente no habría podido concluir que el algoritmo debe terminar. Ignorando los problemas de flujo insuficiente, un algoritmo puede reducir repetidamente la cantidad a la mitad en cada iteración, para nunca detenerse. (Teniendo en cuenta el flujo inferior, el “número racional” que se reduce a la mitad es realmente un múltiplo entero de una cantidad fija).

Con estos dos supuestos, un límite superior en el número de iteraciones es el valor inicial de esa cantidad, y un límite inferior es que el valor inicial se divide por la magnitud máxima posible de la reducción en cada paso.

Su algoritmo toma exactamente (| A | + | B |) (| CA | + | CB |) comparaciones para completar, y solo realiza una iteración porque cada vez que compara la distancia de x a todos los elementos en CA y CB, esto La distancia no cambia.
Puede estar relacionado con otros supuestos sobre la naturaleza del espacio en el que está trabajando, podría optimizarse mejor, por ejemplo, si todos los puntos se encuentran en una línea, solo debe ordenar CA y CB (que toma tiempo n log n) y dividir en segmentos, por lo que para cada x solo debe decidir si se encuentra en un segmento para CA o para CB.
En el plano es un problema y una solución muy similares, pero la segmentación es un poco más difícil, debe dividir el plano con un diagrama de Voronoi y decidir qué áreas pertenecen a CA y cuáles a CB, más adelante, buscando cada x a cuál El área pertenece es un problema clásico también. ver Problema de ubicación del punto.

En dimensiones más altas, la dificultad aumenta, pero supongo que solo en concepto, en términos de cálculos, no debería tomar más pasos que la solución de “fuerza bruta” de comparar todas las distancias de puntos en [matemáticas] A \ bigcup B [/ matemáticas] a todos los puntos en [matemáticas] CA \ bigcup CB [/ matemáticas]

¿Qué es el algoritmo?

Sin conocer el algoritmo particular, no puedo garantizar que tenga un mejor método.
Un camino a seguir podría ser probar un límite inferior en la disminución en cada paso, llamémoslo [matemáticas] \ delta [/ matemáticas]. Llamemos al valor inicial de la cantidad [math] S_ {0} [/ math]. Deje que el valor terminal que queremos obtener sea [math] S_ {n} [/ math]. Entonces, un límite superior en el número de iteraciones es [math] \ frac {S_ {0} -S_ {n}} {\ delta} [/ math]

Este es solo un posible enfoque de muchos otros.

Este enfoque conducirá a límites superiores ‘buenos’ solo si en cada iteración la disminución es aproximadamente [matemática] O (\ delta + \ epsilon) [/ matemática]. El enfoque sobreestima horriblemente si hay un número constante de ‘estados’ que tienen [matemáticas] O (\ delta + \ epsilon) [/ matemáticas] y el resto tiene reducciones exponencialmente mayores que [matemáticas] \ delta [/ matemáticas].

Otro enfoque será considerar grupos de [matemática] S_ {j} [/ matemática] que tienen límites inferiores [matemática] \ delta_ {j} [/ matemática] y luego determinar la fracción de veces que la [matemática] S_ {j } [/ math] ‘s ocurren. Luego use esto para obtener un mejor límite superior usando esas fracciones como pesos.

Otra posibilidad es dar un argumento probabilístico. Por ejemplo, puede encontrar el número esperado de iteraciones. O encuentre la probabilidad de que [math] S_ {j} [/ math] se reduzca en [math] \ delta [/ math].

También puede usar algún tipo de función potencial / argumento de amortización.

Como puede ver, tenemos un número infinito de posibilidades, por lo que no puedo hacer una declaración definitiva sobre la mejor manera de encontrar un límite superior.

Una pasada es suficiente para que este algoritmo termine, ya que CA y CB no cambian. Por lo tanto, las comparaciones posteriores son exactamente las mismas que en la primera pasada.

Es una pregunta mucho más interesante cuando CA es A y CB es B, de modo que a medida que mueve los puntos, el conjunto de comparación cambia. En este caso, puede quedar atrapado en un bucle infinito.