Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
Java 选择一个随机项目,但投票分数有偏差?_Java_Algorithm_List_Random - Fatal编程技术网

Java 选择一个随机项目,但投票分数有偏差?

Java 选择一个随机项目,但投票分数有偏差?,java,algorithm,list,random,Java,Algorithm,List,Random,我有一个项目列表,上面有赞成票和反对票。 现在,我想从这个列表中随机选择一个项目,但偏向于得分更高的项目 chance = random + (upvotes - downvotes) 如何实现此目标?实现此目标的最简单方法是重试得分较低的项目 while(true) { Item item = items.get(random.nextInt(items.size())); if (chanceOfSelecting(item) > random.nextFloat()

我有一个项目列表,上面有赞成票和反对票。 现在,我想从这个列表中随机选择一个项目,但偏向于得分更高的项目

chance = random + (upvotes - downvotes)

如何实现此目标?

实现此目标的最简单方法是重试得分较低的项目

while(true) {
    Item item = items.get(random.nextInt(items.size()));
    if (chanceOfSelecting(item) > random.nextFloat())
        return item;
}

实现这一点的最简单方法是重试得分较低的项目

while(true) {
    Item item = items.get(random.nextInt(items.size()));
    if (chanceOfSelecting(item) > random.nextFloat())
        return item;
}

你可以这样做:

为每个项目分配权重。 将所有权重相加,并创建一个0..total weight的随机数。 开始循环遍历这些项目,从随机数中减去每个项目的权重。当你达到0或更低,停止,你有你的随机选择的项目。
你可以这样做:

为每个项目分配权重。 将所有权重相加,并创建一个0..total weight的随机数。 开始循环遍历这些项目,从随机数中减去每个项目的权重。当你达到0或更低,停止,你有你的随机选择的项目。
一种方法是获得一个比已知项目大的大范围随机数,然后为更宽的“高分”赋值。例如,1代表-7分,而13-20代表+7分。一种方法是获得一个比已知项目大的大范围随机数,然后为更宽的“高分”赋值。例如,1代表-7分,而13-20代表+7分。我想补充的是,权重可能应该是1+上升票-下降票,或者如果下降票>=上升票,权重应该是1。或者,向上投票可能有更高的价值。缺点:打开以查找单个项目。@MarkoTopolnik:是的,对于大型集合来说,这当然不是很有效。不过,如果有必要,有很多方法可以对其进行优化,但为了有效地进行优化,我们需要更多关于数据的信息。我想补充的是,权重可能应该是1+上升投票-下降投票,或者如果下降投票>=上升投票,则仅为1。或者,向上投票可能有更高的价值。缺点:打开以查找单个项目。@MarkoTopolnik:是的,对于大型集合来说,这当然不是很有效。然而,如果有必要,有许多方法可以对此进行优化,但要有效地做到这一点,我们需要更多关于数据的信息。