当前位置: 首页 > 面试题库 >

根据概率机会选择随机值

陶永望
2023-03-14
问题内容

如何根据分配给每一行的概率机会从数据库中选择随机行。
例子:

Make        Chance  Value
ALFA ROMEO  0.0024  20000
AUDI        0.0338  35000
BMW         0.0376  40000
CHEVROLET   0.0087  15000
CITROEN     0.016   15000
........

如何根据必须选择的可能性来选择随机的品牌名称及其值。

rand()ORDER BY可以结合使用吗?如果是这样,最好的方法是什么?


问题答案:

您可以通过使用rand()然后再使用累积和来执行此操作。假设它们的总和为100%:

select t.*
from (select t.*, (@cumep := @cumep + chance) as cumep
      from t cross join
           (select @cumep := 0, @r := rand()) params
     ) t
where @r between cumep - chance and cumep
limit 1;

笔记:

  • rand()在子查询中被调用一次以初始化变量。多次调用rand()是不可取的。
  • 随机数极有可能恰好位于两个值之间的边界上。的limit 1任意选择1。
  • 通过在时停止子查询可以提高效率cumep > @r
  • 值不必按任何特定顺序排列。
  • 可以对其进行修改以处理总和不等于1的机会,但这将是另一个问题。


 类似资料:
  • 我有下面的数组 这将给出主要结果为,而不是。 总价值是100%概率。数值可以是十进制,也可以是55.55、10.10等,但总的来说是100% 我已经跟踪https://www.geeksforgeeks.org/how-to-get-random-value-out-of-an-array-in-php/ 但这并没有给出预期的完美结果。 所以哪个概率最高应该主要随机选择。 所以结果可以是这样的:5

  • 我想知道(例如在Java中)在特定范围内生成随机数的最佳方法是什么,其中每个数都有一定的发生概率? e. g. 从[1;3]中生成概率如下的随机整数: P(1)=0.2 P(2)=0.3 P(3)=0.5 现在,我正在考虑在[0;100]范围内生成一个随机整数的方法,并执行以下操作: 如果在[0; 20]以内--

  • 假设我有一个从1到10的值范围。我想根据某种高斯概率从这个范围中随机选择一个数字。所以,有更高的机会得到大约4,5,6的值。仍然有机会得到1和10,但机会更小。它不需要完全遵循高斯分布,因为那样1和10的值几乎是不可能得到的。我希望至少改变和歪曲得到极值的机会,同时分散得到其他值的机会。通过倾斜,我的意思是有时我希望得到10的机会大于1。所以分布不一定是对称的。 我试着使用random类创建一个随

  • 我正在尝试从以下枚举中筛选,以根据随机机会选择其中一个值。 目前,我正在使用此代码选择一个值。 还有我的随机效用函数 目前,大多数情况下,它将准确地选择一个没有问题的层值。然而,大约在的时候,我会得到一个索引arrayoutofbounds。 我知道这是因为枚举中的机会分散到很远的地方(因为如果我向枚举添加更多值,机会不会像它们那样分散,那么就不会发生此异常)。 如何修复此错误?或者有更好的方法

  • 问题 你想从一个序列中随机抽取若干元素,或者想生成几个随机数。 解决方案 random 模块有大量的函数用来产生随机数和随机选择元素。 比如,要想从一个序列中随机的抽取一个元素,可以使用 random.choice() : >>> import random >>> values = [1, 2, 3, 4, 5, 6] >>> random.choice(values) 2 >>> random

  • 问题内容: 我想知道在特定范围内生成随机数的最佳方法(例如在Java中)是什么,而每个范围内的每个数字都有一定的发生概率? 例如 从[1; 3]内产生随机整数,并具有以下概率: P(1)= 0.2 P(2)= 0.3 P(3)= 0.5 现在,我正在考虑在[0; 100]内生成随机整数并执行以下操作的方法: 如果它在[0; 20]之内->我得到我的随机数1。 如果它在[21; 50]之内->我得到