最大餘額法
參考文章最大餘額法
php實現
/**
* 最大餘額法
* @param array $data
* @return array
*/
function MaxBalance($data)
{
$sum = array_sum($data);
$res = [];
foreach ($data as $key=>$item) {
$res[$key]['percent'] = ($item/$sum)*10000;
}
//取出小數點
$result = [];
foreach ($res as $key=>$value) {
// $tmp = explode('.', $value['percent']);
$result[$value['percent']]['percent'] = $value['percent'];
$tmp = explode('.', $value['percent']);
$result[$value['percent']]['point'] = $tmp[1];
$result[$value['percent']]['int'] = $tmp[0];
}
//小數點排序
$sort = array_column($result, 'point');
array_multisort($sort, SORT_DESC, $result);
$int = array_column($result,'int');
$intSum = array_sum($int);
$count = 10000 - $intSum;
//餘額排序分配席位
foreach ($result as $key=>$value) {
if($key < $count){
$result[$key]['int'] = ($result[$key]['int'] + 1)/100;
} else {
$result[$key]['int'] = $result[$key]['int']/100;
}
}
}
var_dump(MaxBalance([2,3,4]));