Edytuj odległość między dwiema partycjami

17

Mam dwie partycje [1n] i szukam odległości edycji między nimi.

W ten sposób chcę znaleźć minimalną liczbę pojedynczych przejść węzła do innej grupy, które są niezbędne do przejścia z partycji A na partycję B.

Na przykład odległość od {0 1} {2 3} {4}do {0} {1} {2 3 4}wynosi dwa

Po przeszukaniu natknąłem się na ten artykuł, ale a) nie jestem pewien, czy uwzględniają kolejność grup (coś, co mnie nie obchodzi) w ich odległości, b) nie jestem pewien, jak to działa, c) Brak referencji.

Każda pomoc doceniona

zenna
źródło
5
Jak oceniasz odległość między {0 1 2 3} a {0 1} {2 3}? Czy byłoby 2? Po drugie, nie rozumiem, dlaczego w ogóle pojawiają się „wykresy”. Wygląda na to, że masz dwie partycje [n] i chcesz obliczyć odległość między nimi.
Suresh Venkat
Tak, byłyby dwa. Rzeczywiście są to ustawione partycje w węzłach grafu (tj. Partycja grafu). Prawdopodobnie nie jest to ważne dla rozwiązania, ale to jest problem, który próbuję rozwiązać, dlatego też o nim wspomniałem.
zenna
3
Jeśli wykres jest nieistotny, usuń wszystkie odniesienia do „wykresów” i „węzłów” z pytania; to nie pomaga, rozprasza.
Jukka Suomela
Czy nie można zdefiniować odległości edycji za pomocą odległości od siatki przegrody?
Tegiri Nenashi
@Tegiri - To rzeczywiście odległość geodezyjna na sieci partititonów. Niestety obliczenie tej sieci dla dowolnego zbioru liczności znacznie większego niż 10 jest trudne.
zenna

Odpowiedzi:

21

Problem ten można przekształcić w problem przypisania , znany również jako problem maksymalnego ważenia dwustronnego dopasowania.

Zauważ najpierw, że odległość edycji jest równa liczbie elementów, które należy zmienić z jednego zestawu na inny. Jest to równa całkowitej liczbie elementów minus liczba elementów, których nie trzeba zmieniać. Znalezienie minimalnej liczby elementów, które się nie zmieniają, jest równoważne znalezieniu maksymalnej liczby wierzchołków, które się nie zmieniają.

Niech a B = { B 1 , B 2 , . . . , B l } się partycje [ 1 , 2 , . . . , n ] . Również bez utraty ogólności niech k l (dozwolone, ponieważ e d i tA={A1,A2,...,Ak}B={B1,B2,...,Bl}[1,2,...,n]kl ). Pozwól B l + 1 , B l + 2 , ..., B k wszyscy być zbiorem pustym. Zatem maksymalna liczba wierzchołków, które się nie zmieniają to:edit(A,B)=edit(B,A)Bl+1Bl+2Bk

maxfi=1k|AiBf(i)|

gdzie jest permutacją [ 1 , 2 , . . . , k ] .f[1,2,...,k]

To jest właśnie problem przypisania gdzie wierzchołki są 1 , ..., k , B 1 , ..., B k a krawędzie są pary ( I , B j ) o masie | A iB j | . Można to rozwiązać za pomocą czasu O ( | V | 2 log | V | + | V | | E | ) .A1AkB1Bk(Ai,Bj)|AiBj|O(|V|2log|V|+|V||E|)

bbejot
źródło
Czy mógłbyś wymienić algorytm, który sprawia, że ​​ten czas jest skomplikowany?
D-503
Uważam, że @bbejot odnosi się do kolejnego algorytmu najkrótszej ścieżki (z podprogramem Dijkstry zaimplementowanym przy użyciu stosów fibonacciego).
Wei
Dużo czasu zajęło mi przeanalizowanie tego, ponieważ nie jestem matematyką, ale dziękuję. Długo szukałem i to była jedyna rzecz, jaką mogłem znaleźć, która pokazała, jak przekonwertować problem odległości partycji na problem przypisania - lub na dowolny algorytm, który mogłem wywołać z jakiejś biblioteki Pythona. (Trudno mi było dowiedzieć się, jak użyć scipy.optimize.linear_sum_assignment, a następnie skonfigurować macierze na podstawie tych instrukcji).
Sigfried,
Musiałem sprawić, by wagi były ujemne. W przeciwnym razie scipy.optimize.linear_sum_assignment daje mi 0 za wszystko.
Sigfried
2

Spójrz na plik PDF tego artykułu

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

Sądzę, że definicja odległości edycji jest dokładnie tym, czego potrzebujesz. Partycja „referencyjna” byłaby (dowolną) jedną z twoich dwóch partycji, druga byłaby po prostu drugą. Zawiera również odpowiednie cytaty.

Najlepiej, Rob

Obrabować
źródło
Dzięki, Rob. Jednakże, chyba że czegoś mi brakuje, jest to odległość edycji zdefiniowana w kategoriach ruchów scalania podziału. Są one dobrze zbadane i, jak wskazuje artykuł, zmienność informacji jest teoretyczną miarą tego. Interesują mnie jednak przejścia pojedynczego elementu.
zenna
1

Zepsuty pomysł na niedzielny poranek, który może, ale nie musi być poprawny:

Wlog, niech będzie partycją z większą liczbą zestawów, P 2 drugą. Najpierw przypisz parami różne nazwy n 1 ( S ) Σ do swoich zestawów P 1 . Następnie znajdź najlepszą nazwę n 2 ( S ) dla zestawów P 2 według następujących zasad:P1P2n1(S)ΣP1n2(S)P2

  • do S P 2 z S S " ilość wśród wszystkich S 'P 1 ; wybierz ten, który powoduje najmniej konfliktów, jeśli możliwych jest wiele wyborów.n2(S):=n1(S)SP2SSSP1
  • Jeśli teraz dla niektórych S S , przypisz ten, który dzieli mniej elementów z S , n 1 ( S ) = n 2 ( S ) , nazwa zestawu w P 1 dzieli ten drugi co do wielkości element, tzn. konkuruje o nazwę tego zestawu.n2(S)=n2(S)SSS,n1(S)=n2(S)P1
  • Jeśli poprzedniej reguły nie można zastosować, sprawdź oba zestawy, czy mogą konkurować o nazwy innych zestawów, z którymi dzieli mniej elementów (mogą nadal mieć więcej elementów z niektórych niż zestawy, którym przypisano jej nazwę !). Jeśli tak, przypisz tę nazwę do S , S ′, który dzieli więcej elementów z odpowiednim zestawem, o którego nazwę mogą konkurować; drugi zachowuje wcześniej sprzeczną nazwę.SP1S,S
  • Powtarzaj tę procedurę, aż wszystkie konflikty zostaną rozwiązane. Ponieważ nie ma mniej zestawów niż P 2 , jest wystarczająco dużo nazw.P1P2

Teraz możesz wziąć pod uwagę ciągi bitowe elementów piszących na partycjach, tj. i w 2 = n 2 ( 1 ) n 2 ( n ) ( z n j ( i ) = n j ( S ) , i S P jw1=n1(1)n1(n)w2=n2(1)n2(n)nj(i)=nj(S),iSPj ). Następnie pożądana ilość todH(w1,w2)

Raphael
źródło