【发布时间】:2015-08-06 09:59:11
【问题描述】:
场景
-
具有以下属性的可用车辆列表:
车辆1 {乘客:4,行李:2,手提箱:8}
车辆2 {乘客:5,行李:3,手提箱:10}
车辆3 {乘客:6,行李:3,手提箱:10}
车辆4 {乘客:8,行李:4,手提箱:10}
-
现在,如果用户要求旅行(13 名乘客,6 件行李,15 个手提箱),那么最高效的车辆结果将是:
车辆 2 + 车辆 4
问题定义: 我已经能够开发出一个流程/算法(但仅限于乘客人数),但是当乘客/手提箱/行李数量超过 3 辆车或更多车辆的需求时,我无法开发算法它。
代码:
function ajax_getVehicles() {
$vehicleType = $_POST['vehicle_type'];
$passengers = intval($_POST['passengers']);
$luggage = intval($_POST['luggage']);
$suitcases = intval($_POST['suitcases']);
$requiredVehicles = array();
// 1. Check if all passengers fit in a single car
if (!$requiredVehicles) {
$vehicle = $this->common_model->get_where('fleets', array('vehicle_type' => $vehicleType, 'passengers >=' => $passengers), 'passengers ASC');
if ($vehicle)
array_push($requiredVehicles, $vehicle[0]);
}
// 2. Try sending duplicate vehicles
$vehicles = $this->common_model->get_where('fleets', array('vehicle_type' => $vehicleType), 'passengers ASC');
if (!$requiredVehicles) {
foreach ($vehicles as $v) {
if ($v['passengers'] * 2 == $passengers) {
array_push($requiredVehicles, $v, $v);
}
}
}
// 3. Find best possible solution
if (!$requiredVehicles) {
$totalPermutation = gmp_fact(count($vehicles)) / (gmp_fact(count($vehicles) - 2) * gmp_fact(2));
$total_pax_array = array();
for ($i = 0; $i < $totalPermutation; $i++) {
for ($count = $i + 1; $count < count($vehicles); $count++) {
$total_pax = $vehicles[$i]['passengers'] + $vehicles[$count]['passengers'];
if ($total_pax >= $passengers) {
if (count($total_pax_array) < 1) {
$requiredVehicles = array($vehicles[$i], $vehicles[$count]);
} else if ($total_pax < min($total_pax_array)) {
$requiredVehicles = array($vehicles[$i], $vehicles[$count]);
}
array_push($total_pax_array, $total_pax);
}
}
}
}
// 4. check if requirement can be acheived by sending duplicate vehicles
if (!$requiredVehicles) {
foreach ($vehicles as $v) {
if ($v['passengers'] * 2 > $passengers) {
array_push($requiredVehicles, $v, $v);
}
}
}
if (!$requiredVehicles)
jsonOutput('ERROR', 'call for 3 vehicles required.');
else
jsonOutput('SUCCESS', 'criteria matching vehicles', $requiredVehicles);
}
【问题讨论】:
标签: php algorithm codeigniter logic solution