Chỉnh sửa khoảng cách giữa hai phân vùng


17

Tôi có hai phân vùng và đang tìm khoảng cách chỉnh sửa giữa chúng.[1n]

Bằng cách này, tôi muốn tìm số lần chuyển tiếp tối thiểu của một nút thành một nhóm khác nhau cần thiết để đi từ phân vùng A sang phân vùng B.

Ví dụ, khoảng cách từ {0 1} {2 3} {4}vào {0} {1} {2 3 4}sẽ là hai

Sau khi tìm kiếm, tôi đã xem qua bài báo này , nhưng a) Tôi không chắc họ có tính đến thứ tự của các nhóm (điều mà tôi không quan tâm) ở khoảng cách của họ b) Tôi không chắc nó hoạt động như thế nào và c) Không có tài liệu tham khảo.

Bất kỳ trợ giúp đánh giá cao


5
Bạn sẽ xem khoảng cách là bao nhiêu giữa {0 1 2 3} và {0 1} {2 3}? Nó sẽ là 2? Thứ hai, tôi không thấy lý do tại sao "đồ thị" đi vào hình ảnh cả. Có vẻ như bạn có hai phân vùng [n] và muốn tính khoảng cách giữa chúng.
Suresh Venkat

Vâng, nó sẽ là hai. Thật vậy, đây là các phân vùng được đặt trên các nút của biểu đồ (tức là phân vùng biểu đồ). Điều này có thể không quan trọng đối với giải pháp, nhưng đây là vấn đề tôi đang cố gắng giải quyết, do đó tôi đã đề cập đến nó.
zenna

3
Nếu biểu đồ không liên quan, vui lòng xóa tất cả các tham chiếu đến "biểu đồ" và "nút" khỏi câu hỏi của bạn; Nó không giúp, nó làm mất tập trung.
Jukka Suomela

Không thể xác định khoảng cách chỉnh sửa theo khoảng cách trên mạng phân vùng?
Tegiri Nenashi

@Tegiri - Đó thực sự là khoảng cách đo đạc trên mạng tinh thể của partititons. Thật không may, tính toán mạng cho bất kỳ tập hợp cardinality lớn hơn 10 là không thể tìm thấy.
zenna

Câu trả lời:


21

Vấn đề này có thể được chuyển thành vấn đề chuyển nhượng , còn được gọi là vấn đề khớp lưỡng cực có trọng số tối đa.

Lưu ý đầu tiên rằng khoảng cách chỉnh sửa bằng với số phần tử cần thay đổi từ bộ này sang bộ khác. Điều này bằng tổng số phần tử trừ đi số phần tử không cần thay đổi. Vì vậy, việc tìm số lượng phần tử tối thiểu không thay đổi tương đương với việc tìm số đỉnh tối đa không thay đổi.

Đặt và là các phân vùng của . Ngoài ra, không mất tính tổng quát, hãy để (được phép vì ). Sau đó, hãy để , , ..., đều là tập hợp trống. Sau đó, số đỉnh tối đa không thay đổi là:B = { B 1 , B 2 , . . . , B l } [ 1 , 2 , . . . , n ] k l e d i t ( A , B ) = e d i t (A={A1,A2,...,Ak}B={B1,B2,...,Bl}[1,2,...,n]klB l + 1 B l + 2 B kedit(A,B)=edit(B,A)Bl+1Bl+2Bk

maxfi=1k|AiBf(i)|

trong đó là hoán vị của .[ 1 , 2 , . . . , k ]f[1,2,...,k]

Đây chính xác là bài toán gán trong đó các đỉnh là , ..., , , ..., và các cạnh là các cặp có trọng số. Điều này có thể được giải quyết trong thời gian .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|)


Bạn có thể đặt tên cho thuật toán, điều này mang lại sự phức tạp cho thời gian này không?
D-503

Tôi tin rằng @bbejot đang đề cập đến thuật toán đường dẫn ngắn nhất kế tiếp (với chương trình con Dijkstra được triển khai bằng cách sử dụng đống heaps).
Ngụy

Tôi đã mất một thời gian dài để phân tích điều này bởi vì tôi không phải là một người toán học, nhưng cảm ơn bạn. Tôi đã dành một thời gian dài để tìm kiếm và đây là điều duy nhất tôi có thể tìm thấy cho thấy cách chuyển đổi vấn đề khoảng cách phân vùng thành vấn đề gán - hoặc bất kỳ thuật toán nào tôi có thể gọi từ thư viện Python. (Phần khó đối với tôi đã tìm ra cách sử dụng scipy.optizes.linear_sum_assocation và sau đó để thiết lập ma trận dựa trên các hướng dẫn này.)
Sigfried

Tôi cần phải làm cho trọng lượng tiêu cực. Nếu không thì scipy.optizes.linear_sum_assocation cho tôi 0 cho mọi thứ.
Sigfried

2

Nhìn vào bản PDF này

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

Định nghĩa về khoảng cách chỉnh sửa trong đó chính xác là những gì bạn cần tôi nghĩ. Phân vùng 'tham chiếu' sẽ là (một tùy ý) một trong hai phân vùng của bạn, phân vùng kia chỉ đơn giản là một phân vùng khác. Cũng chứa các trích dẫn có liên quan.

Tốt nhất, Cướp


Cảm ơn Rob. Tuy nhiên, trừ khi tôi thiếu một cái gì đó, đây là khoảng cách chỉnh sửa được xác định theo các bước di chuyển hợp nhất. Đây là những nghiên cứu tốt và như bài báo chỉ ra, sự thay đổi của thông tin là một thước đo lý thuyết thông tin của điều này. Tôi quan tâm tuy nhiên, trong các yếu tố chuyển tiếp di chuyển.
zenna

1

Ý tưởng sáng chủ nhật cáu kỉnh có thể đúng hoặc không chính xác:

Wlog, hãy để là phân vùng có nhiều bộ hơn, khác. Đầu tiên, gán các tên khác nhau theo cặp cho các bộ của bạn . Sau đó, tìm một cách đặt tên tốt nhất cho các bộ theo các quy tắc sau:P 2 n 1 ( S ) Σ P 1 n 2 ( S ) P 2P1P2n1(S)ΣP1n2(S)P2

  • n2(S):=n1(S) cho với tối đa trong số tất cả ; chọn một trong những tạo ra xung đột ít nhất nếu có thể có nhiều lựa chọn.SP2SSSP1
  • Nếu bây giờ cho một số , hãy chỉ định một phần tử chia sẻ ít phần tử hơn với , tên của bộ trong nó chia sẻ hầu hết các yếu tố thứ hai với, tức là nó có cạnh tranh cho tên của tập hợp đó.n2(S)=n2(S)SSS,n1(S)=n2(S)P1
  • Nếu quy tắc cũ không thể được áp dụng, hãy kiểm tra cả hai bộ mà chúng có thể cạnh tranh để lấy tên của các bộ khác mà chúng chia sẻ ít thành phần hơn (chúng vẫn có thể có nhiều phần tử từ một số so với các bộ được gán Tên!). Nếu vậy, gán tên đó cho một trong chia sẻ nhiều phần tử hơn với tập tương ứng có tên mà chúng có thể cạnh tranh; cái còn lại giữ tên xung đột trước đây.SP1S,S
  • Lặp lại thủ tục này cho đến khi tất cả các xung đột được giải quyết. Vì không có ít bộ hơn , nên có đủ tên.P 2P1P2

Bây giờ, bạn có thể xem xét các chuỗi bit của các phần tử của mình, hoặc phân vùng, ví dụ và ( với ). Sau đó, số lượng mong muốn là , tức là khoảng cách Hamming giữa các chuỗi bit.w 2 = n 2 ( 1 ) n 2 ( n ) n j ( i ) = n j ( S )w1=n1(1)n1(n)w2=n2(1)n2(n)d H ( w 1 , w 2 )nj(i)=nj(S),iSPjdH(w1,w2)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.