Доброго времени суток всем!
Имеется следующая задача.
Имеется конечное множество элементов
.
Вопрос: Нужно разбить данное множество на 3 подмножества с условием чтобы сумма элементов в этих подмножествах была
или переводя на русский надо распределить элементы между тремя множествами так чтобы сумма элементов во всех трех множествах была приблизительно равна.
Мне пока кроме "железобетонного" перебора ничего в голову не приходит. Алгоритм может быть примерно следующим:
1. Упорядочиваем элементы множества
от наименьшего к наибольшему.
2. В каждое из 3 множеств кладем самые наибольшие элементы множества
.
3. Берем 4-ый с конца элемент и смотрим по очереди каждое из подможеств чтобы сумма имеющегося и добавляемого элемента не превосходила
. Если не превосходит кладем элемент в это множество если превосходит, то берем следующее подмножество и так далее.
4. Так продолжаем пока сумма во всех подмножествах не приблизиться к желаемой
.
5. Ну а остатки (если таковые имеются) раскидываем приблизительно одинаково по всем множествам.
Пример: , следовательно
1. После упорядочивания получаем:
.
2. Теперь кладем наибольшие элементы в подмножества
.
3. Далее берем
. Явно он не подходит для множества
а вот для множества
в самый раз ... значит определяем его туда. Так и с остальными элементами ... получаем что
.
4. Теперь остатки. По существу уже не важно в какое множество пойдут оставшиеся две 1 но пусть в первое и второе множества.
Итак получили, что
и соответственно
,
,
.
Вот такой вариант у меня имеется ... может кто нибудь подскажет что-нибудь умнее изложенного выше ... ну или хотя бы более эффективное.