0

可能是一个非常愚蠢的问题,我不确定它是属于这里还是属于数学。

我的问题:

我有几个 X 类型的元素,它们具有布尔属性 Y。

为了计算 Y 为真的元素的百分比,我计算了 Y 为真的所有 X 并将其除以元素的数量。

但我不想一直迭代所有元素以更新该百分比值。

我的想法是:

如果我有 33% 的 3 个元素,并且在 Y 为真的情况下添加第四个元素:

(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 回答