Manera fácil de demostrar que este algoritmo finalmente termina

10

Introducción y anotaciones:

Aquí hay una versión nueva y simple de mi algoritmo que parece terminar (según mis experimentos), y ahora me gustaría probarlo.

Deje que la notación refiera a un punto de datos dimensional (un vector). Tengo tres conjuntos A, B y C, de modo que , , : p | A | = n | B | = m | C | = l A = { x i | i = 1 , . . , n } B = { x j | j = n + 1 , . . , n + m } C = { x u |xiRpp|A|=n|B|=m|C|=l

A={xi|i=1,..,n}
B={xj|j=n+1,..,n+m}
C={xu|u=n+m+1,..,n+m+l}

Dado , deje que denote la distancia euclidiana media desde a sus puntos más cercanos en ; y denota la distancia media euclidiana de a su más cercano puntos en . d A x i x i k A d C x i x i k CkNdxiAxikAdxiCxikC

Algoritmo:

Tengo el siguiente algoritmo que modifica iterativamente los conjuntos A y B moviendo algunos elementos seleccionados de A a B y viceversa, y C permanece siempre igual (no cambia). Para simplificarlo: el propósito del algoritmo es separar mejor los conjuntos y modo que "los puntos de sean más similares a los de un conjunto fijo conocido " y "los puntos de finalmente sean autosimilares y más lejos de los de y el conjunto final ":B B C A C BABBCACB

  • A={xiAdxiA>dxiC} ... (1)
  • B = B A A=AA ; ... (2)B=BA
  • B={xiBdxiA<dxiC } ... (3)
  • A = A B B=BB ; ... (4)A=AB
  • Repita (1), (2), (3) y (4) hasta que: (ningún elemento se mueva de a o de a , es decir, A 'y B' se vacíen) o ( o )B B A | A | k | B | kABBA|A|k|B|k

El algoritmo termina en dos casos:

  • cuandoose vuelve menor o igual aEl | B | k|A||B|k
  • o el caso más estándar, cuando , lo que significa que no se mueven más elementos entre A y B.A=B=

Pregunta:

¿Cómo demostrar que este algoritmo finalmente termina? No encontré una función potencial conveniente que pueda ser estrictamente minimizada o maximizada por el algoritmo. He intentado sin éxito algunas funciones: la función pero no aumenta en cada iteración. La función pero no está disminuyendo en cada iteración. La función parece no estar disminuyendo en cada iteración. La funciónx A d A x + x B d C xx A d A x + x B d B xx A d B x + x B d A xxAdxC+xBdxAxAdxA+xBdxCXUNreXUN+XsireXsiXUNreXsi+XsireXUNparece no estar aumentando en cada iteración. Entonces, ¿cuál es la función potencial conveniente que se puede mostrar que aumenta o disminuye en cada iteración? ¿O deberíamos mostrar que la función disminuye pero no en cada iteración (después de algunas iteraciones)? Cómo ?

Notas:

  • Los puntos más cercanos a en un conjunto , significa: los puntos (distintos de ) en , que tienen la distancia euclidiana más pequeña a . Simplemente puede tomar para simplificar el análisis.x S k x S x k = 1kXSkXSXk=1
  • No sé si esto puede ayudar o no, pero tengo la siguiente propiedad para mis conjuntos iniciales : inicialmente , si es el punto más cercano a y es el punto más cercano a entonces siempre . Esto intuitivamente significa que los puntos en están más cerca de de puntos en .x iB , x jA x bC x i x aC x j d i s t a n c e ( x i , x b ) < d i s t a n c e ( x j , x a ) B C AUN,si,CXyosi,XjUNXsiCXyoXunCXjreyostunnorteCmi(Xyo,Xsi)<reyostunnorteCmi(Xj,Xun)siCUN
  • Si eso facilita el análisis: es totalmente posible considerar una versión ligeramente diferente del Algoritmo en la que tan pronto como un punto de se mueva a , se mueva de a (sin pasar por ), y vis inversa de .B A B A BUNsiUNsiUNsi
shn
fuente
3
¿Por qué estás interesado en este algoritmo en particular?
1
shna: ¿Qué es lo que quieres hacer con una colección de puntos divididos arbitrariamente en tres conjuntos?
44
@shna Conocer el propósito y el objetivo del algoritmo puede conducir a una mejor intuición y, por lo tanto, ayudar al problema.
@RichardRast Para simplificar la explicación: el propósito es separar mejor los conjuntos y B de modo que "los puntos de B sean más similares a los de un conjunto fijo conocido C " y "los puntos de A finalmente sean autosimilares y más lejos de los de C y el conjunto final B ". UNsisiCUNCsi
shn
La migración a la teoría fue rechazada.

Respuestas:

2

Aquí está la solución para el caso :k=1

Suponga que el algoritmo no termina. Como hay un número finito de estados del algoritmo (asignaciones de puntos a y B ), el estado del algoritmo debe repetirse en un ciclo. Dado que el ciclo pasa por diferentes estados, debe haber un punto que cambie entre A y B infinitamente.UNsiUNsi

Sea un punto que cambia infinitamente a menudo en este ciclo. Elige la primera iteración del algoritmo dentro del ciclo durante el cual x interruptores de B a A . Para que x cambie a A , debe haber habido al menos un punto x ' en A , con d C x > d i s t ( x , x ' ) . Elija arbitrariamente el punto más pequeño etiquetado; define una función f para que f ( x ) =XXsiUNxAxAdxC>dist(x,x)f . Tenga en cuenta que x ' también debe cambiar entre A y B infinitamente (porque si x ' permaneció en A permanentemente, también lo haría x ), entonces podemos tomar f ( f ( x ) ) , f ( f ( f ( x ) ) ) , etc.f(x)=xxABxAxf(f(x)),f(f(f(x))),

Como tenemos un número finito de puntos, las iteraciones de f eventualmente deben repetirse: para algunos m > n . Ahora mira a las secuencias correspondientes de distancias de C: d C f ( x ) , d C f 2 ( x ) , . . . d C f n ( x ) , . . .fn(x)=fm(x)m>ndf(x)C,df2(x)C,...dfn(x)C,.... Como se repite, esta secuencia no puede disminuir uniformemente. Debe haber una iteración tal que d C f o - 1 ( x )d C f o ( x )odfo1(x)Cdfo(x)C

Ahora, y f o ( x ) están lo suficientemente cerca uno del otro como para causar que el otro esté en A , si uno de ellos está. Es decir, están más cerca uno del otro que cualquiera de ellos es C : d C f o ( x )d C f o - 1 ( x ) > d i s t ( f o - 1 ( x ) ,fo1(x)fo(x)AC (de la definición de f )dfo(x)Cdfo1(x)C>dist(fo1(x),fo(x))f

Tan pronto como y f o ( x ) estén ambos en A , se mantendrán mutuamente en A para siempre (ver líneas 1-2 del algoritmo). Esto contradice el hecho de que todas las iteraciones de f deben cambiar conjuntos infinitamente a menudo. Por lo tanto, para el caso en que k = 1 , el algoritmo termina.fo1(x)fo(x)AAfk=1

causante
fuente
Esto es de alguna manera complicado y puede mostrarse solo para . Más bien, es mucho mejor si podemos derivar una función potencial que se puede demostrar que aumenta o disminuye en cada iteración. O bien, se puede demostrar que aumenta o disminuye después de "algunas" iteraciones en lugar de 1.k=1
shn
1
@shn No estoy seguro de por qué criticas la elección de la técnica de prueba de alguien que ha tenido más éxito para resolver tu problema que tú. Especialmente cuando su propia pregunta enumera cuatro intentos fallidos de usar su técnica preferida.
David Richerby
1
@DavidRicherby no estoy criticando;) De hecho, discutí sobre esa solución con "causativo" (quien dio esta respuesta) en IRC y descubrimos que no será posible probarlo de esta manera para ; entonces dedujimos que es mucho mejor si podemos derivar una función potencial que se puede demostrar que disminuye en cada iteración. Mi comentario fue solo informativo. k>1
shn