Tối đa hóa tổng số các số không chồng chéo của nhau trong mảng vuông - giúp chứng minh


7

Một câu hỏi đã được đăng trên Stack Overflow yêu cầu một thuật toán để giải quyết vấn đề này:

Tôi có một ma trận (gọi nó là A) là nxn. Tôi muốn chọn một tập hợp con (gọi là B) các điểm từ ma trận A. Tập hợp con sẽ bao gồm n phần tử, trong đó một và chỉ một phần tử được lấy từ mỗi hàng và từ mỗi cột của A. Đầu ra sẽ cung cấp giải pháp ( B) sao cho tổng các phần tử tạo thành B là giá trị tối đa có thể, với các ràng buộc này (ví dụ 25 trong ví dụ dưới đây). Nếu tìm thấy nhiều phiên bản của B (nghĩa là các giải pháp khác nhau có cùng tổng tối đa), giải pháp cho B có phần tử tối thiểu lớn nhất sẽ được chọn.

B cũng có thể là một ma trận lựa chọn là nxn, nhưng chỉ có n phần tử mong muốn là khác không.

Ví dụ: nếu A =

|5 4 3 2 1|
|4 3 2 1 5|
|3 2 1 5 4|
|2 1 5 4 3|
|1 5 4 3 2|

=> B sẽ là

 |5 5 5 5 5|

Tôi đã đề xuất một giải pháp lập trình động mà tôi nghi ngờ là hiệu quả như bất kỳ giải pháp nào sẽ có được. Tôi đã sao chép-dán thuật toán đề xuất của tôi dưới đây.


  • Để cho A là một mảng vuông của n bởi n số.
  • Để cho Ai,j biểu thị yếu tố Atrong ihàng jthứ và cột thứ.
  • Để cho S(i1:i2,j1:j2) biểu thị tổng tối ưu của các số không trùng nhau cho một phân đoạn vuông của A chứa giao điểm của các hàng i1 đến i2 và cột j1 đến j2.

Sau đó, tổng tối ưu của các số không chồng lấp được ký hiệu S( 1:n , 1:n )và được đưa ra như sau:

S(1:n,1:n)=max{S(2:n,2:n)+A1,1S(2:n,1:n1)+A1,nS(1:n1,2:n)+An,1S(1:n1,1:n1)+An,n
Note that S( i:i, j:j ) is simply Aij.

Nghĩa là, tổng tối ưu cho một mảng vuông ncó kích thước có thể được xác định bằng cách tính riêng tổng tổng tối ưu cho mỗi trong bốn mảng phụ có kích thước n-1, sau đó tối đa hóa tổng của mảng phụ và phần tử bị "bỏ đi ".

S for |# # # #|
      |# # # #|
      |# # # #|
      |# # # #|

Is the best of the sums S for:

|#      |      |      #|      |# # #  |       |  # # #|
|  # # #|      |# # #  |      |# # #  |       |  # # #|
|  # # #|      |# # #  |      |# # #  |       |  # # #|
|  # # #|      |# # #  |      |      #|       |#      |

Đây là một thuật toán rất thanh lịch và tôi hoàn toàn nghi ngờ rằng nó là chính xác, nhưng tôi không thể đưa ra một cách để chứng minh nó là chính xác.

Khó khăn chính tôi gặp phải là nó chứng minh rằng vấn đề hiển thị cấu trúc tối ưu. Tôi tin rằng nếu bốn lựa chọn tiềm năng trong mỗi phép tính là bốn lựa chọn duy nhất , thì điều này là đủ để hiển thị cấu trúc tối ưu. Đó là, tôi cần phải chứng minh rằng:

|   #    |
| #   # #|
| #   # #| 
| #   # #|

Không phải là một giải pháp hợp lệ, bởi vì nó là không thể (nghĩa là bằng chứng mâu thuẫn) hoặc bởi vì khả năng này đã được tính bằng một trong bốn n-1biến thể "vuông".

Bất cứ ai cũng có thể chỉ ra bất kỳ sai sót trong thuật toán của tôi, hoặc cung cấp một bằng chứng rằng nó thực sự hoạt động?


Nhưng độ phức tạp thời gian của thuật toán của bạn là gì?

1
Kết hợp tối đa?
Aryabhata

@SaeedAmiri: Cảm ơn bạn đã đánh dấu LaTeX. Và nó sẽ là O(N^3)nếu nó hoạt động, ngoại trừ nó không hoạt động. Vì vậy, pooh.
Li-aung Yip

Trừ khi tôi hiểu nhầm điều gì đó, một sự giảm bớt đơn giản từ Nhân viên bán hàng du lịch ngụ ý rằng vấn đề ban đầu là NP-hard!
JeffE

@JeffE: Bạn có thể giải thích dưới dạng câu trả lời không?
Li-aung Yip

Câu trả lời:


7

Trên thực tế, tôi không tin giải pháp đề xuất của bạn là chính xác. Một ví dụ mà bạn có thể cần trường hợp này

|   #    |
| #   # #|
| #   # #| 
| #   # #|

có thể là

| 1 2 1 1|
| 2 1 1 1|
| 1 1 1 2| 
| 1 1 2 1|

Giải pháp tối ưu bao gồm tất cả 2 giây, trong khi chỉ có 1 giây ở các góc; do đó, bạn không thể tìm thấy một giải pháp tối ưu chỉ bằng cách bắt đầu ở các góc.


Ôi. Chết tiệt.
Li-aung Yip

5

Vấn đề này có thể được giải quyết bằng thuật toán khớp tối đa trong đồ thị lưỡng cực có trọng số, chẳng hạn như thuật toán Kuhn-Munkres hoặc thuật toán dòng chi phí tối thiểu.

Hãy tưởng tượng một đồ thị lưỡng cực G, có hai tập hợp điểm khác nhau là AB. Mỗi đỉnhaiA tương ứng với một hàng và mỗi đỉnh bjBtương ứng với một cột. Trọng lượng của cạnhEi,j giữa aibjMi,j, các jyếu tố thứ của i-thứ hàng của ma trận. Kết hợp tối đa có trọng số của biểu đồ này tương ứng với một giải pháp cho vấn đề của bạn.

Để phá vỡ cà vạt, bạn phải tìm giá trị của phép so khớp có trọng số tối đa lúc đầu. Hãy để giá trị làWmax. Sau đó, bạn nên sắp xếp tất cả các yếu tố trong ma trậnMvà thực hiện tìm kiếm nhị phân trên đó. Khi kiểm tra giá trịm, nghĩa là, có một kết hợp tối đa có phần tử tối thiểu không nhỏ hơn m, bạn nên sửa đổi tất cả Mi,j đến nếu Mi,j<m và tìm kết quả khớp tối đa Wmax trong ma trận sửa đổi M. Wmax=Wmax Nếu có một giải pháp có các phần tử tối thiểu không ít hơn m.

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.