【问题标题】:Select a random Item but bias by voting score?选择一个随机项目但投票得分偏向?
【发布时间】:2014-01-02 23:19:58
【问题描述】:

我有一个包含赞成(喜欢)和反对(不喜欢)的项目列表。
现在,我想从这个列表中随机选择一个项目,但偏向于得分更高的项目。

chance = random + (upvotes - downvotes)

我怎样才能做到这一点?

【问题讨论】:

  • 一种方法是获取大范围内的随机数(大于已知项目的随机数),然后为更宽的“更高分数”分配值。例如。 1 为 -7 分,而 13-20 为 +7 分。

标签: java algorithm list random


【解决方案1】:

实现这一目标的最简单方法是重试低分项目。

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

【讨论】:

    【解决方案2】:

    你可以这样做:

    1. 为每个项目分配一个权重。
    2. 将所有权重相加,并从 0..total weight 创建一个随机数。
    3. 开始循环遍历这些项目,从随机数中减去每个项目的权重。当你达到 0(或更低)时,停下来,你就有了随机选择的物品。

    【讨论】:

    • 我想补充一点,重量可能应该类似于1 + upvotes - downvotes,或者如果downvotes >= upvotes,则只是1。或者upvotes 可能有更高的价值。
    • 缺点:O(n) 才能找到单个项目。
    • @MarkoTopolnik:是的,这对于大型收藏当然不是很有效。然而,如有必要,有很多方法可以优化这一点,但要有效地做到这一点,我们需要更多关于数据的信息。
    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2012-09-11
    • 2021-05-04
    • 1970-01-01
    相关资源
    最近更新 更多