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 là một mảng vuông của bởi số.
- Để cho biểu thị yếu tố trong
i
hàngj
thứ và cột thứ. - Để cho 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 chứa giao điểm của các hàng đến và cột đến .
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:
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 n
có 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-1
biế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?
O(N^3)
nếu nó hoạt động, ngoại trừ nó không hoạt động. Vì vậy, pooh.