Thuật toán nào sẽ tính toán các lựa chọn tối đa từ hai bộ?


11

Cho hai vectơ số nguyên có độ dài không bằng nhau, làm thế nào tôi có thể xác định kết quả tối đa có thể từ việc tích lũy chọn tối đa giữa các cặp số tương ứng giữa hai vectơ có các số 0 thêm vào vectơ ngắn hơn để bù cho chênh lệch kích thước?

Ví dụ, hãy xem xét hai vectơ sau đây làm đầu vào:

[8 1 4 5]
[7 3 6]

Các lựa chọn để chèn số không và tổng kết quả là:

[0 7 3 6]  => Maximums: [8 7 4 6]  =>  Sum is: 25
[7 0 3 6]  => Maximums: [8 1 4 6]  =>  Sum is: 19
[7 3 0 6]  => Maximums: [8 3 4 6]  =>  Sum is: 21
[7 3 6 0]  => Maximums: [8 3 6 5]  =>  Sum is: 22

Do đó, trong trường hợp này, thuật toán sẽ trả về 25.

Tôi có thể làm điều này bằng vũ lực bằng cách tính toán cho tất cả các hoán vị của việc đặt các số 0 vào vectơ nhỏ hơn (như đã làm ở trên) nhưng điều này sẽ tốn kém về mặt tính toán, và tệ nhất là trong trường hợp khi một vectơ có kích thước bằng một nửa.

Có cách nào để tính toán câu trả lời theo thời gian tuyến tính tỷ lệ với độ dài của vectơ dài hơn ngay cả khi các vectơ khác nhau về chiều dài không? Nếu không, chúng ta có thể làm tốt hơn số lượng hoán vị giai thừa được chọn không?


3
0

2
Tôi đang sử dụng điều này để tính kết quả tối đa của một thuật toán tìm kiếm khác liên quan đến xếp hạng mức độ tương tự của hai câu với nhau. Đúng, sắp xếp lại không được chấp nhận.
WilliamKF

Chúng ta có hứa gì về sự khác biệt giữa độ dài của vectơ không? Trong ví dụ của bạn, chỉ thiếu một số không. Nếu bạn biết rằng số lượng số không bị thiếu là nhỏ, có các thuật toán hiệu quả hơn (ví dụ: thuật toán lập trình động có thể được thực hiện để chạy trong thời gian tuyến tính, nếu số lượng số không bị thiếu là một hằng số).
DW

Câu trả lời:


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.