Maneira fácil de provar que esse algoritmo termina eventualmente

10

Introdução e anotações:

Aqui está uma versão nova e simples do meu algoritmo que parece terminar (de acordo com meus experimentos), e agora eu gostaria de provar isso.

Deixe a notação referir-se a um ponto de dados dimensionais (um vetor). Eu tenho três conjuntos A, B e C, de modo que , , : p | Um | = 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 , deixe denotar a distância euclidiana média de até seus pontos mais próximos em ; e denotar a distância Euclidiana significativo de a sua mais próxima pontos em . d A x i x i k A d C x i x i k CkNdxiAxikAdxiCxikC

Algoritmo:

Eu tenho o seguinte algoritmo que modifica iterativamente os conjuntos A e B movendo alguns elementos selecionados de A para B e vice-versa, e C permanece sempre o mesmo (não mude). Para simplificar: o objetivo do algoritmo é separar melhor os conjuntos e modo que "os pontos de sejam mais semelhantes aos de um conjunto fixo conhecido " e "os pontos de finalmente sejam auto-similares e mais distantes dos de e do conjunto final ":B B C A C BABBCACB

  • A={xiAdxiA>dxiC} ... (1)
  • A=AA ; ... (2)B=BA
  • B={xiBdxiA<dxiC } ... (3)
  • B=BB ; ... (4)A=AB
  • Repita (1), (2), (3) e (4) até: (nenhum elemento se move de para ou de para , ou seja, A 'e B' ficam vazios) ou ( ou )ABBA|A|k|B|k

O algoritmo termina em dois casos:

  • quandooutorna-se menor ou igual a|A||B|k
  • ou o caso mais padrão, quando , o que significa que não mais elementos se movem entre A e B.A=B=

Questão:

Como provar que esse algoritmo termina eventualmente? Não encontrei uma função potencial conveniente que possa ser estritamente minimizada ou maximizada pelo algoritmo. Tentei, sem êxito, algumas funções: a função mas não está aumentando a cada iteração. A função mas não está diminuindo a cada iteração. A função parece não estar diminuindo a cada iteração. A funçãoxAdxC+xBdxAxAdxA+xBdxCxAdxA+xBdxBxAdxB+xBdxAparece não estar aumentando a cada iteração. Então, qual é a função potencial conveniente que pode ser mostrada para aumentar ou diminuir a cada iteração? Ou devemos mostrar que a função diminui, mas não a cada iteração (após algumas iterações)? Como ?

Notas:

  • Os pontos mais próximos de em um conjunto significam: os pontos (exceto ) em , tendo a menor distância euclidiana de . Você pode usar para simplificar a análise.x S k x S x k = 1kxSkxSxk=1
  • Não sei se isso pode ajudar ou não, mas tenho a seguinte propriedade para meus conjuntos iniciais : inicialmente , se for o ponto mais próximo para e é o ponto mais próximo de então sempre . Isto intuitivamente significa que os pontos em estão mais perto de de pontos em .A,B,CxiB,xjAxbCxixaCxjdistance(xi,xb)<distance(xj,xa)BCA
  • Se isso facilita a análise: é totalmente possível considerar uma versão ligeiramente diferente do algoritmo em que, assim que um ponto de deve ser movido para , ele é movido de para (sem passar por ), e vis versa para .ABABAB
shn
fonte
3
Por que você está interessado nesse algoritmo específico?
11
shna: O que você quer fazer com uma coleção de pontos arbitrariamente divididos em três conjuntos?
4
@shna Saber o objetivo e o objetivo do algoritmo pode levar a uma melhor intuição e, portanto, ajudar o problema.
@RichardRast Para simplificar a explicação: o objetivo é separar melhor os conjuntos e modo que "os pontos de sejam mais semelhantes aos de um conjunto fixo conhecido " e "os pontos de finalmente sejam auto-similares e mais longe dos de e do conjunto final ". ABBCACB
shn
A migração para a história foi recusada.

Respostas:

2

Aqui está a solução para o caso :k=1

Suponha que o algoritmo não termine. Como existe um número finito de estados do algoritmo (atribuições de pontos para e ), o estado do algoritmo deve se repetir em um ciclo. Como o ciclo passa por diferentes estados, deve haver um ponto que alterne entre e infinitamente.ABAB

Seja um ponto que muda infinitamente com frequência neste ciclo. Escolha da primeira iteração do algoritmo no ciclo durante o qual muda de para . Para mudar para , deve haver pelo menos um ponto em , com . Escolha arbitrariamente o menor ponto com esse rótulo; defina uma função para que . Observe que também deve alternar entre e infinitamente (porque se permaneceu emxxBAxAxAdxC>dist(x,x)ff(x)=xxABxApermanentemente, o mesmo ocorreria com ), para que possamos tomar etc.xf(f(x)),f(f(f(x))),

Como temos um número finito de pontos, as iterações de f devem eventualmente repetir: para alguns . Agora observe as seqüências correspondentes de distâncias de C: . Como se repete, essa sequência não pode estar diminuindo uniformemente. Deve haver uma iteração tal quefn(x)=fm(x)m>ndf(x)C,df2(x)C,...dfn(x)C,...odfo1(x)Cdfo(x)C

Agora, e estão próximos o suficiente um do outro para causar um ao outro estar em , se um deles estiver. Ou seja, eles estão mais próximos um do outro que : (da definição de )fo1(x)fo(x)ACdfo(x)Cdfo1(x)C>dist(fo1(x),fo(x))f

Portanto, assim que e estiverem em , eles se manterão em para sempre (consulte as linhas 1-2 do algoritmo). Isso contradiz o fato de que todas as iterações de devem mudar de conjuntos infinitamente com frequência. Assim, para o caso em que , o algoritmo termina.f o ( x ) Uma Uma f k = 1fo1(x)fo(x)AAfk=1

causativo
fonte
Isso é de alguma forma complicado e pode ser mostrado apenas para . Em vez disso, é muito melhor se pudermos derivar uma função potencial que pode ser mostrada como aumentando ou diminuindo a cada iteração. Ou um que pode ser mostrado para ser aumentando ou diminuindo depois de "alguns" iterações em vez de 1.k=1
shn
11
@shn Não sei por que você está criticando a escolha da técnica de prova de alguém que teve mais sucesso em resolver seu problema do que você. Especialmente quando sua própria pergunta lista quatro tentativas fracassadas de usar sua técnica preferida.
David Richerby
11
@DavidRicherby Não estou criticando;) Na verdade, discuti sobre essa solução com "causative" (que deu essa resposta) no IRC e descobrimos que não será possível provar dessa maneira para ; portanto, deduzimos que é muito melhor derivar uma função potencial que pode ser mostrada como decrescente a cada iteração. Meu comentário foi apenas informativo. k>1
shn