Supongamos que tenemos un conjunto finito de discos en , y deseamos calcular el disco más pequeño para el que . Una forma estándar de hacer esto es utilizar el algoritmo de Matoušek, Sharir y Welzl [1] para encontrar una base de , y dejar que , el disco más pequeño que contiene . El disco puede calcularse algebraicamente utilizando el hecho de que, dado que es una base, cada disco en es tangente a .
( es una base de si es mínimo, de modo que . Una base tiene como máximo tres elementos; en general, para bolas en una base tiene como máximo elementos).
Es un algoritmo recursivo aleatorio de la siguiente manera. (Pero vea a continuación una versión iterativa, que puede ser más fácil de entender).
Procedimiento : Entrada : conjuntos finitos de discos , , donde B es una base (de B ).
- Si , el retorno .
- De lo contrario, elija al azar.
- Deje .
- Si , devuelve .
- De lo contrario, devuelva , donde es una base de .
Se utiliza como para calcular una base de .
Recientemente tuve motivos para implementar este algoritmo. Después de verificar que los resultados fueron correctos en millones de casos de prueba generados aleatoriamente, noté que había cometido un error en la implementación. En el último paso, estaba devolviendo lugar de .
A pesar de este error, el algoritmo estaba dando las respuestas correctas.
Mi pregunta: ¿Por qué esta versión incorrecta del algoritmo aparentemente da respuestas correctas aquí? ¿Siempre funciona (probablemente)? Si es así, ¿eso también es cierto en las dimensiones superiores?
Añadido: algunas ideas falsas
Varias personas han propuesto argumentos incorrectos en el sentido de que el algoritmo modificado es trivialmente correcto, por lo que puede ser útil evitar algunos conceptos erróneos aquí. Una creencia falsa popular parece ser que . Aquí hay un contraejemplo a esa afirmación. Dados los discos como se muestra a continuación (el límite de también se muestra en rojo):un , b , c , d , e
podemos tener ; y tenga en cuenta que :e ∉ ⟨ c , d ⟩
Así es como puede suceder. La primera observación es que :
- Deseamos calcular
- Elija
- Deje
- Observe que
- Deje que sea la base deB ′ ∪ { X } = { a , b , c , e }
- Observe que
- Devuelve , que es{ b , c }
Ahora considere .
- Deseamos calcular
- Elija
- Deje
- Observe que
- Deje que sea la base deB ′ ∪ { X } = { b ,
- Observe que
- Devuelve , que es
(En aras de la definición, digamos que los discos tienen radio 2 y están centrados en , , , y respectivamente.)( 30 , 5 ) ( 30 , 35 ) ( 10 , 5 )( 5 , 26
Añadido: una presentación iterativa
Puede ser más fácil pensar en una presentación iterativa del algoritmo. Ciertamente me resulta más fácil visualizar su comportamiento.
Entrada : una lista de discos Salida : una base de
- Deje .
- Baraja al azar.
- Para cada en :
- Si :
- Deje que sea la base de .B ∪
- Regrese al paso 2.
- Volver .
La razón por la cual el algoritmo termina, por cierto, es que el paso 5 siempre aumenta el radio de , y solo hay muchos valores posibles de finita .B
La versión modificada no tiene una presentación iterativa tan simple, por lo que puedo ver. (Traté de dar uno en la edición anterior de esta publicación, pero fue incorrecto y arrojó resultados incorrectos).
Referencia
[1] Jiří Matoušek, Micha Sharir y Emo Welzl. Un límite subexponencial para la programación lineal. Algorithmica, 16 (4-5): 498-516, 1996.
fuente
Respuestas:
Este paso de eliminar de antes de continuar la recursión en realidad mejora el algoritmo, porque elimina la ya agregada del grupo de candidatos básicos. Siempre funcionará, probablemente, porque es equivalente al algoritmo existente, y también funcionará para dimensiones superiores.L XX L X
Traza a través del algoritmo. Cuando usa , hay y . Supongamos que lo elegimos nuevamente en el paso 2. Independientemente del resultado del paso 3, siempre tendrá , porque la función recursiva tiene la invariante .X ∈ L X ∈ B ′ ′ B ′ X B ⊆ M S W ( L , B )MSW(L,B′′) X∈L X∈B′′ B′ X B⊆MSW(L,B)
En otras palabras, su mejora en los atajos de algoritmo al paso 3 en la parte donde se eligeX
fuente