Търся алгоритъм за уникален проблем

Имам шест масива, на всеки от които е дадена (не непременно уникална) стойност от едно до петдесет. Също така ми се дават няколко предмета, които да разделя между тях. Стойността на всеки елемент се определя от масива, в който се намира. Масивите могат да съдържат безкрайни или нула елементи, но сумата от елементи във всички масиви трябва да е равна на оригиналния брой дадени елементи.

Искам да намеря най-добрата конфигурация на елементи в масиви, където сумата от стойностите на елементите във всеки отделен масив са възможно най-близо една до друга.

Например, да кажем, че имам три масива със стойност 10 и три масива със стойност 20. За девет елемента един ще влезе във всеки от масивите „20“ и два ще влязат във всеки от „10“ масиви, така че сумата на всеки масив да е 20, а общият брой елементи е девет.

Не мога да добавя дробен брой елементи към масив и числата почти никога не са идеално делими като този пример, но винаги има решение, при което разликата между сумите е минимална.

В момента използвам груба сила, за да разреша този проблем, но производителността страда от по-голям брой елементи. Чувствам, че има математически отговор на този проблем, но дори не знам откъде да започна.


person Spenser Galloway    schedule 02.05.2020    source източник
comment
Под минимална разлика между сумите имате предвид максималната разлика между всеки 2 масива или сбор от разлики за всички двойки масиви, или е нещо друго?   -  person Roman Svistunov    schedule 02.05.2020


Отговори (1)


Лесно е да се напише алчен алгоритъм, който предлага приблизително решение. Просто винаги добавяйте следващия елемент към масива с най-ниска сума от стойности.

Масивът с най-висока стойност трябва да бъде в рамките на 1 елемент от правилността.

За всяко преброяване на елементи в масива с най-висока стойност можете да повторите упражнението. Получаване на масива с втората най-висока стойност до 1.

Продължете през всички тях и с 6 масива ще завършите с 3^5 = 243 възможни подредби на елементи (имайте предвид, че броят на елементите в последния масив се определя изцяло от първите 5). Изберете най-доброто от тях и вашата комбинативна експлозия ще бъде ограничена.

(Този подход трябва да работи, ако се опитвате да минимизирате разликата в стойността между най-големия и най-малкия масив и имате фиксиран брой масиви.)

person btilly    schedule 02.05.2020