我想要一个集合,并且它的元素具有与之关联的概率,所以当我从集合中随机选择一个元素时,分布遵循与元素关联的概率。我想在一个非常小的 Java 应用程序中使用它,该应用程序存储了我想看的电影列表,这样我就可以让它向我推荐一部随机电影(否则我总是要花几个小时来挑选一部电影)。对于每部电影,我想关联向我推荐电影的次数,这将与从列表中选择电影以进行下一个建议的概率成反比。
是否有一种数据结构允许从其中随机选取元素且分布不均匀?
如果不是,那么编写这种数据结构的最有效方法是什么?我当然可以始终构建一个数组,将列表中的每个元素经常放入数组中,以便数组中值的分布与我希望它们具有的概率相匹配,并从该数组中选择一个随机元素;但是对于大型电影来说,这将是非常低效的。我的另一个想法是封装元素和所有元素的概率总和(所以第一个元素将被封装为(first,p(first)),第二个元素被封装为(second,p(second)+ p(首先))等等),然后选择一个介于 0 和 1 之间的随机数,并在这些封装元素的排序列表上进行二进制搜索。这听起来合理吗?
TL:DR(有点抽象):如何在 Java 中有效地将非均匀分布映射到集合的元素?