A resposta a seguir é basicamente equivalente à que você já conhece, mas pode parecer um pouco menos "mágica". Por outro lado, é mais técnico, mas acredito que a técnica geral "escreva seu problema como uma otimização em matrizes de permutação e invoque Birkhoff-von Neumann" é excelente.
Para uma permutação de { 1 , … , n } defina a matriz de permutação P σ como a matriz 0-1, de modo que P i j = 1 se j = σ ( i ) e P i j = 0 caso contrário. Esta é simplesmente a matriz que permite as coordenadas de um vetor x de acordo com σ : se y = P σ x então y i = x σσ{1,…,n}PσPij=1j=σ(i)Pij=0xσy=Pσx . Denotareiy= P σ xcomoσ(x) apartir de agora.yi=xσ(i)y=Pσxσ(x)
Mais uma definição: um não negativo matriz H é duplamente estocástica se cada uma das suas linhas e cada uma das suas colunas montantes para um.n×nM
E um fato que é muito importante na otimização combinatória - o teorema de Birkhoff-von Neumann:
Uma matriz é duplamente estocástica se, e somente se, for uma combinação convexa de matrizes de permutação, isto é, se e somente se existirem permutações σ 1 , … , σ k e reais positivos α 1 , … , α k tais que M = ∑ k i = 1 α i P σ i e ΣMσ1,…,σkα1,…,αkM=∑ki=1αiPσi.∑αi=1
Observe que uma matriz duplamente estocástica é definida pelas desigualdades
∀ j : n ∑ i = 1 M i j = 1 ∀ i , j : M i j ≥ 0
∀i:∑j=1nMij=1
∀j:∑i=1nMij=1
∀i,j:Mij≥0
P
Portanto, dada uma entrada a ser classificada, precisamos apenas apresentar um objetivo linear f a ( Ma=(a1,…,an)fa(M)
- fa(Pτ)<fa(Pσ)σ(a)τ(a)
fa(M)Pσσσ(a)σPσ
fa(M)vTMav=(1,…,n)
- M
- Pσfa(Pσ)=∑ni=1iaσ(i)
- σσ(a)σ(a)
E pronto, você tem um programa linear para classificação. Parece bobagem para classificação, mas esse é, de fato, um método poderoso de otimização.