Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中使用缓冲区实现公平划分(?)?_Javascript_Algorithm_Division - Fatal编程技术网

如何在javascript中使用缓冲区实现公平划分(?)?

如何在javascript中使用缓冲区实现公平划分(?)?,javascript,algorithm,division,Javascript,Algorithm,Division,为了解释,假设我有101个实体。实体都是人 在第一个实体中,它有x个数量的“土豆”,我希望它有y个土豆,现在我将使用950作为示例,故意选择一个比1000更尴尬的数字进行测试 var personOne = { ... potatoes: 100 } 我有100多个这样的实体,它们可能有任意数量的土豆,但我设置了一个恒定的缓冲区,至少100个,为了再次举例,必须与每个人保持一致 这意味着,对于所有拥有超过100家公司的实体,我将从他们那里获得一些资金——我希望这些资金能够在

为了解释,假设我有101个实体。实体都是人

在第一个实体中,它有x个数量的“土豆”,我希望它有y个土豆,现在我将使用950作为示例,故意选择一个比1000更尴尬的数字进行测试

var personOne = {
     ...
     potatoes: 100
}
我有100多个这样的实体,它们可能有任意数量的土豆,但我设置了一个恒定的缓冲区,至少100个,为了再次举例,必须与每个人保持一致

这意味着,对于所有拥有超过100家公司的实体,我将从他们那里获得一些资金——我希望这些资金能够在所有实体之间按比例共享,这样一来,850家公司就不会从前两家或三家公司中获得,而是从所有能够提供此类资金的公司中获得10家或5家公司

有什么办法吗

可选:我使用的属性不止一个“土豆”属性,但我计划遍历每种类型并重新使用我找到的方法。我不确定这是否会影响答案

重要/简化的
“一个实体”从所有其他实体中抽取“土豆”,它们并不是均匀地分布在所有实体中,而是被带到一个实体中。我只是不想以一种与其他100个实体不成比例的方式来做这件事


这与其说是切蛋糕,不如说是征税。我正在努力用谷歌搜索这道数学题的正确名称。

案例1。足够每个人吃100多个土豆:把所有的土豆放在一起,均匀地分开

案例2。土豆不够每人吃100个。将超过100的土豆加起来对于那些拥有+加上所有少于100的土豆的人,将收集到的土豆分成100以下的土豆


(是的,案例2意味着一些100岁以下的人最终会吃到比他们开始吃的更少的土豆。这不公平吗?好吧,如果没有足够的土豆给每个人吃,也许你不应该保护1%的人:)但我离题了)

案例1。足够每个人吃100多个土豆:把所有的土豆放在一起,均匀地分开

案例2。土豆不够每人吃100个。将超过100的土豆加起来对于那些拥有+加上所有少于100的土豆的人,将收集到的土豆分成100以下的土豆


(是的,案例2意味着一些100岁以下的人最终的土豆比他们开始的要少。这不公平?好吧,如果没有足够的土豆供每个人食用,也许你不应该保护1%的人:)但我离题了)

我希望这次我理解了这个问题。我会计算得到所需土豆量所需的多余土豆的百分比,然后从每个参与者的多余土豆中提取该百分比,或者如果总数不足,则全部提取

下面是一些要澄清的演示代码。它可能过于冗长,但无论如何只应用于显示意图。我假设有一个非常精确的马铃薯切割器可用,因为没有关于如何取整的规定。输出是重新分配之前和之后参与者的马铃薯。我将
numberofu参与者设置为
4
,这样输出就有点可读性

const max\u START\u=1234;
最小常数=100;
常量实体取0;
所需常数=950;
参与者数量=4;
//生成具有随机数量的\u参与者实体的数量\u
让实体=[];
for(设i=0;i<参与者的数量;i++){
push(Math.floor(Math.random()*(MAXIMUM_START_+1));
}
控制台日志(实体);
让所需的土豆=所需的土豆-实体[实体取土豆];

如果需要,我希望这次我理解了这个问题。我会计算出获得所需土豆量所需的多余土豆的百分比,然后从每个参与者的多余土豆中提取该百分比,或者如果总数不足,则全部提取

下面是一些需要澄清的演示代码。它可能过于冗长,但无论如何应该只用于显示意图。我假设有一个非常精确的马铃薯切割器可用,因为没有关于如何进行舍入的规则。输出是重新分配之前和之后参与者的马铃薯。我设置
NUMB参与者的ER_
4
,因此输出在某种程度上是可读的

const max\u START\u=1234;
最小常数=100;
常量实体取0;
所需常数=950;
参与者数量=4;
//生成具有随机数量的\u参与者实体的数量\u
让实体=[];
for(设i=0;i<参与者的数量;i++){
push(Math.floor(Math.random()*(MAXIMUM_START_+1));
}
控制台日志(实体);
让所需的土豆=所需的土豆-实体[实体取土豆];

如果(必选土豆将多余的土豆加起来,除以参与者的数量…?一些参与者可能不需要平均结果。950/100=9或10取决于四舍五入,我是说他们必须保留100,他们可能没有100。这有帮助吗?顺便说一句,我很欣赏使用省略号让我感觉自己像个白痴省略号更强调的是,我不确定我是否完全理解这个问题,我正在做一个最好的猜测。我在考虑Max(0,土豆-100)的总和将每个参与者的数据取下来,除以101,然后将其返回给每个参与者。取整的结果并不清楚。如果你想要一些其他加权的转移,更多的信息将是有用的。计算差异的中位数,并用它来帮助分清比例,将多余的土豆除以数字参与者的数量…?一些参与者可能没有必要拥有aver的结果