4

私の言語は 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]私が扱っている数値を考えると、最初の形式から 2 番目の形式に変換するのは非常に非効率的です。

上記の数値の平均を計算するアルゴリズムは何でしょうか?

4

3 に答える 3

17

これを試して:

$total = 0;
$count = 0;
foreach($ratings as $number=>$frequency) {
  $total += $number * $frequency;
  $count += $frequency;
}
return $total / $count;
于 2009-01-29T03:10:44.807 に答える
10

これはうまくいきませんか?

$total = 0;
$sum = 0;
foreach ($ratings as $k => $v) {
  $total += $k * $v;
  $sum += $v;
}
echo $total / $sum;

編集: うーん、誰かが私を殴ったので、私はばかげているように見えます. しかたがない。

于 2009-01-29T03:13:19.213 に答える
3

確かに私は受け入れられた答えを打ち負かすことができますが、組み込みのループ関数はスクリプト化されたループよりも高速に実行されることがわかりました。$multiplyの呼び出しがどれだけ最適化されるかわかりません。これが本当に遅い場合は、誰かがコメントで指摘することを期待しています。

function multiply( $k , $v ) { return $k * $v; }
return array_sum( array_map( 'multiply' , array_keys($ratings) , $ratings ) ) / array_sum( $ratings );
于 2009-01-29T04:04:56.567 に答える