0

かなりばかげた質問かもしれませんが、それがここにあるのか数学に属するのかはわかりません。

私の問題:

ブール属性Yを持つタイプXの要素がいくつかあります。

Yが真である要素のパーセンテージを計算するために、Yが真であるすべてのXを数え、それを要素の数で割ります。

しかし、そのパーセンテージ値を更新するために、すべての要素の上で常に反復する必要はありません。

私の考えは:

3つの要素に対して33%があり、Yが真である4番目の要素を追加する場合:

(0.33 * 3 + 1) / 4 = 0.4975

明らかに、0.33のため、これはうまく機能しません。

反復せずに正確な解を取得したり、Yが真であるアイテムの数を節約したりする方法はありますか?

4

2 に答える 2

2

要素の総数と「真の」要素の数を数えます。グローバル変数、オブジェクトメンバー変数など。プログラムの開始時に、要素がゼロになっていると思います。要素が追加、削除、またはそのブール属性が変更されるたびに、必要に応じてそれらのカウントをインクリメントまたはデクリメントします。リストを繰り返す必要はありませんが(テストを除く)、リストに変更を加えるたびに、これらの変数をいじる必要があります。

于 2012-08-20T20:02:23.717 に答える
2

0.33は1/3に等しくないため、あなたのアイデアは機能しません。これは概算です。正確な値を取ると、正しい答えが得られます。

(1/3 * 3 + 1) / 4 = (1 + 1) / 4 = 1/2

私の質問は、33%の値を反復せずに保存できるのであれば、1と3の値を保存して計算してみませんか?つまり、真の値の数とオブジェクトの数の現在の合計を保持するだけです。新しいものを入手したらインクリメントします。オンデマンドで計算します。毎回繰り返す必要はありません。

于 2012-08-20T20:02:23.887 に答える