首页 > 解决方案 > 具有不同权重的随机项目的无限滚动算法(显示给用户的概率)

问题描述

我有一个网络/移动应用程序,它应该显示一个无限滚动视图(项目列表的延续以动态方式定期加载),其中每个项目都有一个重量,与重量相比,重量越大其他项目的权重越高,应该是加载项目并将其显示在用户列表中的机会/概率,项目应该随机加载,只是项目在列表中的机会应该不同。

我正在寻找一种有效的算法/解决方案或至少可以帮助我实现这一目标的提示。

值得一提的几点:

希望我没有错过任何重要的事情。如果我这样做了,请告诉我。

标签: sqlalgorithmsortingrandomprobability

解决方案


以下是实施该解决方案的一些想法:

数据库表应该有一个列,其中每个条目都是一个生成的数字,如下所示:

  • 对数(R)/W,

其中——</p>

  • W 是记录的权重大于 0(它本身就是它自己的列),并且
  • R 是 (0, 1) 中的每个记录的均匀随机数

(另见 Arratia, R.,“关于统一随机整数的素数分解中的依赖量”,2002 年)。然后在需要时获取该列中具有最高值的记录。

但是请注意,SQL 没有生成随机数的标准方法;实现 SQL 的 DBMS 有自己的方法(例如RANDOM()PostgreSQL),但它们的工作方式取决于 DBMS(例如,比较 MySQLRAND()和 T-SQL NEWID())。


推荐阅读