2010-12-13 38 views
10

Tôi đang tìm mã Python để có trọng số tối đa/chi phí tối thiểu phù hợp trong biểu đồ hai bên. Tôi đã sử dụng mã phù hợp với trọng lượng tối đa của trường hợp chung trong NetworkX, nhưng tôi thấy nó quá chậm so với nhu cầu của mình. Điều này có thể do cả hai thuật toán chung là chậm hơn, và thực tế là giải pháp NetworkX được triển khai hoàn toàn bằng Python. Lý tưởng nhất, tôi muốn tìm một mã Python nào đó cho bài toán đối sánh hai bên kết thúc tốt đẹp một số mã C/C++, nhưng ngay bây giờ, bất cứ điều gì nhanh hơn việc thực hiện NetworkX sẽ hữu ích.Tối đa Trọng lượng/Chi phí tối thiểu Mã đối sánh song song trong Python

+0

Bạn có biết mã giả cụ thể nào không? Bạn có thể cung cấp một ví dụ đầu vào/đầu ra python không? – kevpie

+2

Câu hỏi tương tự http://stackoverflow.com/questions/4075669/hungarian-algorithm-in-python – Ante

+0

@Kevpie Tôi đang mở cho hầu hết mọi giao diện. Vấn đề trọng lượng tối đa là, chính nó cũng được xác định (trên Wikipedia ví dụ http://en.wikipedia.org/wiki/Matching_(graph_theory)#Maximum_matchings_in_bipartite_graphs) vì vậy tôi không muốn lãng phí không gian xác định lại nó. Đầu vào sẽ là một biểu đồ hoặc thậm chí chỉ là một ma trận trọng số, và đầu ra sẽ là một kết hợp giữa các đỉnh hai chân. – nomad

Trả lời

6

Sau khi điều tra thêm, tôi đã tìm thấy hai mô-đun sau đây đặc biệt hữu ích (http://pypi.python.org/pypi/pyLAPJV/0.3http://pypi.python.org/pypi/hungarian). Cả hai đều là các thuật toán được thực hiện trong C++ với các ràng buộc Python, và chạy nhanh hơn nhiều so với việc thực hiện kết hợp NetworkX. Việc thực hiện pyLAPJV, tuy nhiên, có vẻ là một chút quá khó khăn cho các nhu cầu của tôi và không xử lý đúng các cạnh có trọng số giống nhau. Mô-đun hungarian (mặc dù được cho là chậm hơn thuật toán pyLAPJV) chạy khoảng 3 đơn vị cường độ nhanh hơn so với việc triển khai NetworkX trên các kích thước dữ liệu mà tôi đang xử lý. Tôi cũng sẽ đưa ra một cái nhìn khác về mã được gợi ý bởi kunigami, vì tôi tin rằng nó có thể được chạy mặc dù Shedskin khá dễ dàng để đưa ra một cách thực hiện hợp lý nhanh chóng.

1

Không quá chắc chắn nếu đây là những gì bạn đang tìm kiếm, nhưng nó là một triển khai python của thuật toán kết hợp đồ thị bartartite Hopcroft-Karp. Nếu không, nó có thể là một nơi khởi đầu tốt cho bạn.

Hopcroft-Karp Bipartite Matching

+0

Cảm ơn bạn đã liên kết với Nico. Tuy nhiên, vấn đề phù hợp tối đa là dffeent hơn so với vấn đề trọng lượng tối đa phù hợp; nó là có liên quan với việc tìm kiếm số lượng tối đa của các đỉnh tham gia, ruột không lấy trọng lượng là vào tài khoản. – nomad

0

Trọng lượng tối thiểu song phương phù hợp có thể được giải quyết bằng các thuật toán Hungary (wikipedia). Liên kết trong liên kết wikipedia với triển khai python. Tôi không chắc chắn nếu nó nhanh hơn so với mã bạn đề cập, mặc dù.

+0

Cảm ơn Kunigami, tôi sẽ kiểm tra xem nó hoạt động như thế nào. – nomad

Các vấn đề liên quan