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

21 Авг 2019 в 06:04
123 +1
1
Ответы
1

Для решения данной задачи на PHP можно использовать жадный алгоритм.
Вот пример кода, который реализует данное решение:

function groupArray($arr, $numGroups) {
// Сортируем массив по убыванию
rsort($arr);
$groupSum = array_fill(0, $numGroups, 0);
$groupItems = array_fill(0, $numGroups, []);
foreach ($arr as $item) {
$minSumIndex = array_search(min($groupSum), $groupSum);
$groupSum[$minSumIndex] += $item;
$groupItems[$minSumIndex][] = $item;
}
return $groupItems;
}
// Пример использования:
$arr = [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000];
$numGroups = 8;
$groupedArray = groupArray($arr, $numGroups);
foreach ($groupedArray as $group) {
echo implode(',', $group) . ' => ' . array_sum($group) . PHP_EOL;
}

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

Пожалуйста, убедитесь, что подходящее количество групп передается функции groupArray и что количество элементов во входном массиве делится на это число.

20 Апр в 13:24
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 493 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир