更改结果集的排序顺序'公平'

时间:2012-03-15 20:15:57

标签: .net sql algorithm

假设我有一大组数据,其中每个数据都有几个可搜索列(例如颜色,高度,宽度等),这样用户就可以发出“所有红色项目”或“所有绿色项目宽度”等搜索50岁以下。

是否有一个既定的算法可以让我根据相同搜索条件已经返回结果集中给定项目的次数来改变结果集的排序顺序?我正在寻找某种“公平”算法,以便我可以均匀地分配在该集合中早期查看结果集中任何给定项目的频率。换句话说,结果集中的每个项目应该具有与结果集中第一个项目相同的概率。

此外,对于给定的用户/会话,必须维护结果集的排序顺序,使得集合内的分页,附加排序或进一步过滤首先会遵循算法的“公平性”排序顺序,然后应用任何其他搜索过滤器。

我将在一个带有C#后端和SQL 2008数据库的MVC.NET网站上实现它。特定于平台的解决方案当然是受欢迎的,但总的来说,我想知道是否存在已建立的算法。我还发现用于描述问题的词汇量是有限的,所以我甚至可以在网上搜索的任何指针都会有所帮助。

从某种意义上说,我希望每次查询时都会随机对项目进行排序,我希望在该用户会话的生命周期中保留该特定的“随机性”

1 个答案:

答案 0 :(得分:2)

  

从某种意义上说,我希望每次查询时都会随机对项目进行排序,我希望在该用户会话的生命周期中保留该特定的“随机性”

听起来您可能会在登录(或会话创建)时生成随机种子,将其存储在用户的会话中,然后在每次混洗结果时使用该种子创建新的Random。这可能是最简单的方式。

另一方面,如果查询结果发生变化,它将不会保留顺序。例如,如果值ABCDE最终为“ABDCE”,那么如果查询被更改为排除A,则相同的种子可以轻松地将“BCED”作为混洗版本。