平均分配算法

平均分配有2种情况

1)都没有记录的时候,平均分配。

若11个元素,4个cpu,则分配数量为(2, 3, 3, 3),每次分配的起点终点表示区间为

[list*seqno/taskCounters, list*(seqno+1)/taskCounters]

11个数,平均分给4个CPU

header("Content-type: text/html; charset=utf-8");
$list = 11;
$taskCounters = 4;
$result = [];
for ($taskNumber = 0; $taskNumber < $taskCounters; $taskNumber++) {
    $seqno = $taskNumber;
//$max = intval($list * ($seqno + 1) / $taskCounters);
//$j = intval($list * $seqno / $taskCounters);
    $max = $list * ($seqno + 1) / $taskCounters;
    $j = $list * $seqno / $taskCounters;
    echo "每次分配的起点终点表示区间为:{$j}--{$max}<br/>";
    for ($i = $j; $i < $max; $i++) {
        $result[$taskNumber][] = $i;
    }
}

 场景2:已经有记录了,分配时要保证总量的平均。(比如:每人分3个,有的人已经有2个了,就只需要分1个了)

$list = 14;
$taskCounters = 4;
$result = [['a'], ['b', 't', 'm'], ['c', 'd'], []];
for ($i = 0; $i < $list; $i++) {
    foreach ($result as $taskNumber => $info) {
        $result_count[$taskNumber] = count($info);
    }
    $minTaskNumber = array_search(min($result_count), $result_count);
    if (min($result_count) < max($result_count)) { //排除相等
        $result[$minTaskNumber][] = $i;
    } else {
        $taskNumber = $i % $taskCounters;
        $result[$taskNumber][] = $i;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值