我的语言是PHP,但算法应该相当普遍.
我有一个(比方说)评级的关联数组和给出评级的次数.
$ratings = array( 1 => 1, 2 => 3, 3 => 6, 4 => 3, 5 => 3 );
这相当于:[1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5]
,但考虑到我正在使用的数字,从第一种形式转换为第二种形式是非常低效的.
计算上述数字平均值的算法是什么?
试试这个:
$total = 0; $count = 0; foreach($ratings as $number=>$frequency) { $total += $number * $frequency; $count += $frequency; } return $total / $count;
这不行吗?
$total = 0; $sum = 0; foreach ($ratings as $k => $v) { $total += $k * $v; $sum += $v; } echo $total / $sum;
编辑:嗯,我看起来很傻,因为有人打败了我.那好吧.