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

21 Авг 2019 в 06:04
148 +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 Апр 2024 в 13:24
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир