Я пытаюсь найти декартовую продукцию и добавить конкретные критерии.Декартово изделие с определенными критериями
У меня есть четыре бассейна по 25 человек каждый. У каждого человека есть оценка и цена. Каждый человек в каждом бассейне выглядит как таковой.
[0] => array(
"name" => "jacob",
"price" => 15,
"score" => 100
),
[1] => array(
"name" => "daniel",
"price" => 22,
"score" => 200
)
Я хочу найти лучшее сочетание людей, с одним человеком, выбранным из каждого бассейна. Однако существует предельная цена, при которой никакая группировка не может превышать определенную цену.
Я уже возился с декартовыми функциями и функциями перестановки и не могу понять, как это сделать. Единственный способ, которым я знаю, как закодировать его, - это встраивать петли foreach
, но это невероятное налогообложение.
Этот код ниже, как вы можете видеть, невероятно неэффективен. Особенно, если бассейны увеличиваются!
foreach($poolA as $vA) {
foreach($poolb as $vB) {
foreach($poolC as $vC) {
foreach($poolD as $vD) {
// calculate total price and check if valid
// calculate total score and check if greatest
// if so, add to $greatest array
}
}
}
}
Я также думал, что я мог бы найти способ, чтобы вычислить общее количество/соотношение цены и оценки использования, что в мою пользу, но я не знаю, что я пропускаю.
Возможно, вы можете улучшить алгоритм путем сортировки людей в каждом пуле по цене. Когда вы достигаете того, чья цена ограничивает вас, вам не нужно пробовать остальных в этом пуле. – Barmar
@ Бармар, гениальный! это должно обязательно сократить многие циклы. Спасибо. –
Ваш подход грубой силы не имеет ничего общего с перестановкой (и не должен). –