Tổng quát hóa thuật toán Hungary sang đồ thị vô hướng chung?


14

Thuật toán Hungary là một thuật toán tối ưu hóa tổ hợp, giải quyết vấn đề khớp lưỡng cực trọng lượng tối đa trong thời gian đa thức và dự đoán sự phát triển sau này của phương pháp nhị phân quan trọng . Thuật toán được phát triển và xuất bản bởi Harold Kuhn vào năm 1955, người đã đặt tên là "thuật toán Hungary" vì thuật toán này dựa trên các công trình trước đây của hai nhà toán học Hungary: Dénes Kőnig và Jenő Egerváry. Munkres đã xem xét thuật toán vào năm 1957 và nhận thấy rằng nó thực sự là polytime. Kể từ đó, thuật toán còn được gọi là thuật toán Kuhn-Munkres.

Mặc dù tiếng Hungary chứa ý tưởng cơ bản của phương pháp primal-dual, nó giải quyết trực tiếp vấn đề khớp lưỡng cực trọng lượng tối đa mà không cần sử dụng bất kỳ máy móc lập trình tuyến tính (LP) nào. Vì vậy, trong câu trả lời của câu hỏi sau đây , Jukka Suomela đã nhận xét

Tất nhiên bạn có thể giải bất kỳ LP nào bằng cách sử dụng bộ giải LP đa năng, nhưng các thuật toán chuyên dụng thường có hiệu suất tốt hơn nhiều. [...] Bạn cũng có thể thường xuyên tránh các vấn đề như sử dụng số hữu tỷ chính xác so với số dấu phẩy động; mọi thứ có thể được thực hiện dễ dàng với số nguyên.

Nói cách khác, bạn không phải lo lắng về cách làm tròn một giải pháp hợp lý / dấu phẩy động từ bộ giải LP để lấy lại kết quả khớp hoàn hảo trọng lượng tối đa của đồ thị lưỡng cực cho trước.

Câu hỏi của tôi là như sau:

Có một khái quát về thuật toán Hungary hoạt động cho đồ thị vô hướng chung mà không sử dụng máy móc LP tương tự như tinh thần của thuật toán Hungary gốc không?

Tôi thích giải thích hiện đại và dễ đọc thay vì một số giấy phức tạp ban đầu. Nhưng bất kỳ con trỏ sẽ được đánh giá rất cao!

Rất cám ơn trước và Giáng sinh vui vẻ !!!


Cập nhật: Câu hỏi được Arman trả lời độc đáo dưới đây. Tôi chỉ muốn chỉ ra rằng một nguồn hay khác để nghiên cứu Thuật toán nở hoa của Edmonds (đối với trường hợp có trọng số) là Chương 11 của Tối ưu hóa kết hợp của Korte và Vygen . Google book thực sự cho thấy gần như tất cả các phần tôi cần để hiểu thuật toán.


2
Làm thế nào về thuật toán phù hợp của Edmonds? vi.wikipedia.org/wiki/Edmonds%27s_matching_alacticm
Arman

1
@Arman - Đó cũng là những gì tôi đã nghĩ. Cảm ơn liên kết, Wikipedia có một giải trình chi tiết đáng ngạc nhiên về thuật toán nở hoa của Edmond.
Abraham Flaxman

2
Nhân tiện, thuật toán kết hợp của Edmonds cũng dựa trên phương pháp Primal-Dual.
Arman

1
Cảm ơn Arman. Liên kết wikipedia cũng chỉ đến cuốn sách "Lovász, László; Plummer, Michael (1986). Lý thuyết phù hợp" cho phiên bản trọng số của thuật toán Edmonds. Tôi thực sự nên kiểm tra cuốn sách đó. Cảm ơn bạn rất nhiều ý kiến ​​của bạn! Có lẽ nếu bất kỳ ai trong số bạn có thể giải thích ở mức độ cao về cách thuật toán khái quát hóa thuật toán Hungary, bạn chắc chắn có thể làm cho nó trở thành một câu trả lời.
Đại Lê

1
Tôi nghĩ rằng đó là một câu trả lời khá tốt như vậy :). Arman, bạn nên thêm nó như vậy
Suresh Venkat

Câu trả lời:


16

Thuật toán so khớp của Edmonds (còn gọi là Thuật toán Blossom) giải quyết kết quả khớp tối đa trên các biểu đồ chung. Trên thực tế nó là một khái quát của phương pháp đường dẫn xen kẽ. (Tôi không chắc chắn của tên của phương pháp này nhưng nó shoud được phương pháp König-Hall.) Về cơ bản nó thấy làm tăng đường dẫn (xem wikipedia page: http://en.wikipedia.org/wiki/Edmonds%27s_matching_algorithm ) để mở rộng kết hợp hiện tại và dừng lại nếu không có đường dẫn tăng thêm. Trong đồ thị chung, vấn đề duy nhất xảy ra trong các chu kỳ lẻ. Trong thuật toán phù hợp của Edmonds, các chu kỳ kỳ lạ được ký hợp đồng (nở hoa) và được sử dụng lại để có giải pháp.

Ngoài ra còn có sự tương ứng giữa thuật toán Blossom và phương pháp Primal Dual. Chu kỳ lẻ gây ra các điểm cực trị. Do đó, chúng tôi thêm cái gọi là bất bình đẳng hoa cho mỗi chu kỳ lẻ.

Vấn đề kết hợp hoàn hảo có trọng số tối thiểu và phù hợp với trọng số tối đa cũng có thể được xử lý bằng phương pháp này.

Để biết chi tiết về thuật toán, hãy xem http://en.wikipedia.org/wiki/Edmonds%27s_matching_alacticm http: //www.cs.ber siêu.edu / ~ kpp / greatalgo / lecture05.pdf

Để biết công thức toán học và phương pháp primal-dual tương ứng, xem http://webdocs.cs.ualberta.ca/~mreza/cifts/CombOpt09/lecture4.pdf


9

Hai năm trước, khi nghiên cứu thuật toán nở hoa (không trọng số), tôi đã tìm thấy hai bộ ghi chú tuyệt vời, một của Tarjan và một của Zwick. Họ làm cho trường hợp không trọng số có vẻ khá đơn giản và tôi đã có thể thực hiện nó trong Mathicala bằng cách sử dụng đệ quy. Nó hoạt động khá tốt.

Các ghi chú mà tôi thấy hữu ích là

http://www.cs.tau.ac.il/~zwick/grad-algo-06/match.pdfhttp://www.cs.dartmouth.edu/~ac/Teach/CS105-Winter05/Handouts/ tarjan-Blossom.pdf

Họ chắt lọc tất cả các thuật ngữ rất đơn giản cho phép người ta suy nghĩ đệ quy và sau đó, như đã lưu ý, chương trình đệ quy.

Tôi nghĩ rằng tất cả nên hoạt động trong trường hợp có trọng số, mà tôi đang cố gắng thực hiện ngay bây giờ.


Và tôi có demo mà có thể được theo dõi bởi bất cứ ai có phần mềm miễn phí: Một chương trình đầu tiên nở hoa độc đáo .... < demonstrations.wolfram.com/... > < demonstrations.wolfram.com/TheHungarianMaximumMatchingAlgorithm > < demonstrations.wolfram.com/ ĐặtDominoesOnACheckerboard >
Stan Wagon

Và tôi vừa lập trình hoa không trọng lượng như được đưa ra trong Korte / Vygen. Tôi thấy một vài cách tăng tốc có thể theo mã của anh ấy (ví dụ: bắt đầu bằng một kết hợp tối đa, trái ngược với không có gì), nhưng điều tuyệt vời là mã thủ tục của anh ấy được đưa ra ở dạng mà người ta có thể dễ dàng dịch sang mã làm việc. Tiếp theo: hoa có trọng lượng, khó hơn nhiều.
Stan Wagon
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.