1

次のような 0 と 1 の間の値の配列ランダム配列を検討してください。

[0.1,0.2,0.8,0.9]

丸められていない配列の平均に最も近い値に一致するように、値を整数に切り下げるか切り上げる必要があるポイントを計算する方法はありますか? (上記の場合は平均ですが、それは純粋に偶然です)

それとも試行錯誤ですか?私はPythonでコーディングしています

助けてくれてありがとう

4

1 に答える 1

1

それらを合計してから、合計を四捨五入します。それはあなたが望む数の 1 です。1 が多くなるように丸めます。

def rounding_point(l):
    # if the input is sorted, you don't need the following line
    l = sorted(l)
    ones_needed = int(round(sum(l)))
    # this may require adjustment if there are duplicates in the input
    return 1.0 if ones_needed == len(l) else l[-ones_needed]

リストのソートにコストがかかりすぎることが判明した場合は、quickselect などの選択アルゴリズムを使用できます。ただし、Python には quickselect 関数が組み込まれていないため、入力が十分に大きくない限り、quickselect の漸近的な利点が、高度に最適化された C ソート アルゴリズムの一定係数の利点を上回る場合を除き、気にする必要はありません。

于 2013-07-16T14:46:54.087 に答える