Modifica la distanza tra due partizioni


17

Ho due partizioni di [1n] e sto cercando la distanza di modifica tra di loro.

Con questo, voglio trovare il numero minimo di singole transizioni di un nodo in un gruppo diverso che sono necessarie per passare dalla partizione A alla partizione B.

Ad esempio, la distanza da {0 1} {2 3} {4}in {0} {1} {2 3 4}sarebbe due

Dopo la ricerca mi sono imbattuto in questo documento, ma a) Non sono sicuro che stiano prendendo in considerazione l'ordinamento dei gruppi (qualcosa che non mi interessa) nella loro distanza b) Non sono sicuro di come funziona ec) Non ci sono riferimenti

Qualsiasi aiuto apprezzato


5
Quale considereresti la distanza tra {0 1 2 3} e {0 1} {2 3}? Sarebbe 2? In secondo luogo, non vedo perché i "grafici" entrino nella figura. Sembra che tu abbia due partizioni di [n] e desideri calcolare una distanza tra loro.
Suresh Venkat,

Sì, sarebbero due. In effetti, queste sono partizioni impostate sui nodi di un grafico (cioè una partizione del grafico). Questo probabilmente non è importante per la soluzione, ma questo è il problema che sto cercando di risolvere, quindi perché l'ho menzionato.
zenna,

3
Se il grafico è irrilevante, rimuovere tutti i riferimenti a "grafici" e "nodi" dalla domanda; non aiuta, distrae.
Jukka Suomela,

La distanza di modifica non può essere definita in termini di distanza sul reticolo della partizione?
Tegiri Nenashi,

@Tegiri - È davvero la distanza geodetica sul reticolo delle partizioni. Sfortunatamente calcolare quel reticolo per qualsiasi insieme di cardinalità molto maggiore di 10 è intrattabile.
zenna,

Risposte:


21

Questo problema può essere trasformato in problema di assegnazione , noto anche come problema di corrispondenza bipartita massimo ponderato.

Nota innanzitutto che la distanza di modifica è uguale al numero di elementi che devono cambiare da un set all'altro. Ciò equivale al numero totale di elementi meno il numero di elementi che non è necessario modificare. Quindi trovare il numero minimo di elementi che non cambiano equivale a trovare il numero massimo di vertici che non cambiano.

Lasciate e B = { B 1 , B 2 , . . . , B l } essere partizioni [ 1 , 2 , . . . , n ] . Inoltre, senza perdita di generalità, lascia k l (consentito perché e d i tUN={UN1,UN2,...,UNK}B={B1,B2,...,Bl}[1,2,...,n]kl ). Quindi lascia che B l + 1 , B l + 2 , ..., B k siano tutti l'insieme vuoto. Quindi il numero massimo di vertici che non cambiano è:edit(A,B)=edit(B,A)Bl+1Bl+2Bk

maxfi=1k|AiBf(i)|

dove è una permutazione di [ 1 , 2 , . . . , k ] .f[1,2,...,k]

Questo è esattamente il problema di assegnazione in cui i vertici sono , ..., A k , B 1 , ..., B k e i bordi sono coppie ( A i , B j ) con peso | A iB j | . Questo può essere risolto nel tempo O ( | V | 2 log | V | + | V | | E | ) .A1AkB1Bk(Ai,Bj)|AiBj|O(|V|2log|V|+|V||E|)


Potresti nominare l'algoritmo, che dà per favore questa complessità temporale?
D-503,

Credo che @bbejot si riferisca all'algoritmo del percorso più corto successivo (con la subroutine di Dijkstra implementata usando i mucchi di fibonacci).
Wei,

Mi ci è voluto molto tempo per analizzarlo perché non sono una persona matematica, ma grazie. Ho trascorso molto tempo a cercare e questa è stata l'unica cosa che ho trovato che ha mostrato come convertire il problema della distanza della partizione in un problema di assegnazione o in qualsiasi algoritmo che potrei chiamare da una libreria Python. (La parte difficile per me è stata capire come usare scipy.optimize.linear_sum_assignment e quindi impostare le matrici in base a queste istruzioni.)
Sigfried

Avevo bisogno di rendere i pesi negativi. Altrimenti scipy.optimize.linear_sum_assignment mi dà 0 per tutto.
Sigfried,

2

Guarda il PDF di questo documento

http://www.ploscompbiol.org/article/info:doi/10.1371/journal.pcbi.0030160

La definizione di modifica della distanza è esattamente ciò di cui hai bisogno, penso. La partizione "di riferimento" sarebbe (arbitraria) una delle tue due partizioni, l'altra sarebbe semplicemente l'altra. Contiene anche citazioni pertinenti.

Meglio, Rob


Grazie Rob. Tuttavia, a meno che non mi manchi qualcosa, questa è una distanza di modifica definita in termini di mosse di divisione-unione. Questi sono ben studiati e, come sottolinea il documento, la variazione delle informazioni è una misura teorica dell'informazione di questo. Sono comunque interessato alle transizioni di spostamento a singolo elemento.
zenna,

1

Cranky Sunday morning idea che potrebbe o non potrebbe essere corretta:

P1P2n1(S)ΣP1n2(S)P2

  • n2(S):=n1(S)SP2SSSP1
  • n2(S)=n2(S) for some SS, assign the one that shares less elements with S,n1(S)=n2(S), the name of the set in P1 it shares the second most elements with, i.e. have it compete for that set's name.
  • If the former rule can not be applied, check for both sets wether they can compete for the name of other sets they share less elements with (they might still have more elements from some SP1 than the sets that got assigned its name!). If so, assign that name to the one of S,S that shares more elements with the respective set whose name they can compete for; the other keeps the formerly conflicting name.
  • Iterate this procedure until all conflicts are resolved. Since P1 does not have less sets than P2, there are enough names.

Now, you can consider the bit strings of your elements wrt either partition, i.e. w1=n1(1)n1(n) and w2=n2(1)n2(n) (with nj(i)=nj(S),iSPj). Then, the desired quantity is dH(w1,w2), i.e. the Hamming distance between the bit strings.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.