Який алгоритм обчислив би максимальний вибір з двох множин?


11

З огляду на два вектори цілих чисел, можливо, неоднакових довжин, як я можу визначити максимальний результат, можливий від накопичення вибору максимального між відповідними парами чисел між двома векторами із додатковими нулями, вставленими у коротший вектор, щоб компенсувати різницю розмірів?

Наприклад, розгляньте наступні два вектори як вхідні дані:

[8 1 4 5]
[7 3 6]

Вибір для вставки нуля та отриманої суми:

[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

Тому в цьому випадку алгоритм повинен повертати 25.

Я міг би зробити це грубою силою, обчисливши всі перестановки розміщення нулів у менший вектор (як це було зроблено вище), але це було б обчислювально дорого, і найгірше у випадку, коли один вектор рівно наполовину менший за інший.

Чи існує спосіб обчислити відповідь за лінійним часом, пропорційним довжині більш тривалого вектора, навіть коли вектори відрізняються за довжиною? Якщо ні, то чи можемо ми зробити кращу кількість обраних факторіальних перестановок?


3
0

2
Я використовую це для обчислення максимального результату іншого алгоритму пошуку, пов’язаного з ранжуванням того, наскільки два речення схожі між собою. Правильно, переупорядкування не є прийнятним.
WilliamKF

Чи обіцяємо нам щось про різницю між довжинами векторів? У вашому прикладі лише один пропущений нуль. Якщо ви знаєте, що кількість пропущених нулів невелика, є більш ефективні алгоритми (наприклад, алгоритм динамічного програмування можна зробити так, щоб він працював у лінійний час, якщо кількість відсутніх нулів є постійною).
DW

Відповіді:


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.