Задать вопрос
denis_druid
@denis_druid

Как решить логическую математическую задачу на PHP?

Привет. Помогите выбрать алгоритм решения.
Задача:
Есть массив с N элементами (натуральные рандомные числа от 1 до 3 000).
Нужно сгруппировать элементы массива в 8 групп так, чтобы сумма элементов в каждой группе была максимально приближена к сумме элементов в любой группе. (Максимально приближены к равенству между собой)

В идеале в задаче n-групп. Восемь - это в моём конкретном примере.
  • Вопрос задан
  • 243 просмотра
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 4
@Arik
Можно попробовать:
1. Найти N
2. Посчитать сумму всех элементом
3. Найти среднее на 8 групп
4. Отсортировать по возрастанию
5. Начать заполнять каждый массив, пока сумма в тек группе меньше среднего (пункт 3)
Ответ написан
WizardNG
@WizardNG
1. Находишь сумму всех чисел, и делишь на 8, получаешь целевое значение, обозначим его О
2. Идя с начала исходного массива заполняешь числами первый массив результата до тех пор, пока добавление следующего числа не даст сумму массива, большую, чем О
3. Повторяешь предыдущий шаг для остальных семи массивов.
4. Если в исходном массиве остались числа - добавляешь их по одному к выходным массивам, начиная с первого.
5. (Тут для удобства можно отсортировать результирующие массивы)
6. Выбираешь два массива - один с самым большим превышением О, другой с самой большой недостачей до О.
7. В первом (из этих двух) массиве выбираешь максимальное число, меньшее, чем превышение, и переносишь его во второй из этих двух массивов.
8. Повторяешь шаги 6 и 7 до тех пор, пока не окажется, что нет числа для переноса.
9. Конец.

Думаю, должно сработать.
Ответ написан
denis_druid
@denis_druid Автор вопроса
Есть нечто похожее вот тут: ссылка
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы