Відредагуйте відстань між двома перегородками


17

У мене є два розділи [1n] і шукаю відстань редагування між ними.

Цим я хочу знайти мінімальну кількість одиничних переходів вузла в іншу групу, які необхідні для переходу від розділу А до розділу Б.

Наприклад, відстань від {0 1} {2 3} {4}до {0} {1} {2 3 4}буде два

Після пошуку я натрапив на цей документ, але а) я не впевнений, чи враховують вони впорядкованість груп (те, що мені не байдуже) на їх відстані b) я не впевнений, як це працює і c) Ніяких посилань немає.

Будь-яка допомога вдячна


5
Що б ви вважали відстань між {0 1 2 3} і {0 1} {2 3}? Було б 2? По-друге, я не бачу, чому "графіки" взагалі входять у малюнок. Здається, у вас є два розділи [n] і хочете обчислити відстань між ними.
Суреш Венкат

Так, було б два. Дійсно, це встановлені розділи на вузлах графа (тобто розділ графіка). Це, ймовірно, не важливо для рішення, але це проблема, яку я намагаюся вирішити, отже, чому я це згадав.
zenna

3
Якщо графік не має значення, видаліть зі свого запитання всі посилання на "графіки" та "вузли"; це не допомагає, воно відволікає.
Jukka Suomela

Чи не можна визначити відстань редагування через відстань на решітці перегородки?
Тегірі Ненаші

@Tegiri - Це справді геодезична відстань на решітці партій. На жаль, обчислити, що решітка для будь-якого набору кардинальності набагато більша за 10 є непереборною.
zenna

Відповіді:


21

Ця проблема може бути перетворена в задачу присвоєння , відому також як максимально зважена двостороння відповідність.

Спершу зауважте, що відстань редагування дорівнює кількості елементів, які потрібно змінити з одного набору в інший. Це дорівнює загальній кількості елементів мінус кількості елементів, які не потрібно змінювати. Отже, знаходження мінімальної кількості елементів, які не змінюються, еквівалентно пошуку максимальної кількості вершин, які не змінюються.

Нехай і В = { B 1 , B 2 , . . . , Б л } розбиття числа [ 1 , 2 , . . . , п ] . Крім того, не втрачаючи загальності, нехай k l (дозволено, оскільки e d i tA={A1,A2,...,Ak}B={B1,B2,...,Bl}[1,2,...,н]кл ). Тоді нехай B l + 1 , B l + 2 , ..., B k - всі порожні множини. Тоді максимальна кількість вершин, які не змінюються, становить:edit(A,B)=edit(B,A)Bl+1Bl+2Bk

maxfi=1k|AiBf(i)|

де є перестановкою [ 1 , 2 , . . . , к ] .f[1,2,...,k]

Це якраз проблема задачі, де вершини , ..., A k , B 1 , ..., B k, а ребра - пари ( A i , B j ) з вагою | A iB j | . Це можна вирішити за час O ( | V | 2 log | V | + | V | | E | ) .A1AkB1Bk(Ai,Bj)|AiBj|O(|V|2log|V|+|V||E|)


Чи можете ви назвати алгоритм, який надає цей час складність?
D-503

Я вважаю, що @bbejot має на увазі послідовний алгоритм найкоротшого шляху (з підпрограмою Dijkstra, що реалізується за допомогою куб напруги).
Вей

Мені знадобилося довго розбирати це, бо я не людина з математики, але дякую тобі. Я багато часу шукав, і це було єдине, що я міг знайти, який показав, як перетворити проблему відстані розділу в проблему присвоєння - або в будь-який алгоритм, який я можу викликати з якоїсь бібліотеки Python. (Важкою частиною для мене було з'ясування того, як використовувати scipy.optimize.linear_sum_assignment, а потім встановити матриці на основі цих інструкцій.)
Sigfried

Мені потрібно було зробити ваги негативними. Інакше scipy.optimize.linear_sum_assignment дає мені 0 за все.
Зігфрід

2

Подивіться цей PDF-документ

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

Визначення відстані редагування там є саме те, що вам потрібно, я думаю. "Довідковий" розділ був би (довільним) одним із двох ваших розділів, а другий - просто другим. Також містить відповідні цитати.

Найкраще, Роб


Дякую Роб. Однак, якщо я щось не пропускаю, це відстань редагування, визначена в ході розділеного злиття. Вони добре вивчені, і як зазначається у статті, зміна інформації є інформаційно-теоретичною мірою цього. Мене, однак, цікавить перехід в одному елементі.
zenna

1

Примхлива думка в неділю вранці, яка може бути або не бути правильною:

P1P2n1(S)ΣP1n2(S)P2

  • n2(S):=n1(S)SP2SSSP1
  • n2(S)=n2(S)SSS,n1(S)=n2(S)P1
  • SP1S,S
  • P1P2

w1=n1(1)n1(n)w2=n2(1)n2(n)nj(i)=nj(S),iSPjdH(w1,w2)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.