首页 > 解决方案 > 集合中的有效和确定性排名项目?

问题描述

我在 SQL 中有数十亿个项目的列表,可以由用户随机洗牌,通过将它们在列表中移动到另一个位置,我考虑使用简单的双除法解决方案:

Id,  Rank
1    10
2    20
3    30
4    40
5    50

现在用户将项目 id=3 移动到第一个位置,我根据他们的相邻项目执行项目排名重新计算(0 - 表示左侧没有相对,最大值 - 右侧没有相对):

Id,  Rank
3    (0+10)/2 = 5
1    10
2    20
4    40
5    50 

现在有一个错误 - 直到它达到双倍的 epsilon,它才会起作用,之后你会得到几个带有 epsilon 的元素并且它们无法移动。这可以通过不频繁地重新计算整个集合的堆栈等级来避免,但我现在犹豫要不要实现它,因为这看起来太多了。

我想知道除了更改数十亿个项目之外是否还有其他算法解决方案,或者这个问题是否有一个众所周知的名称来自己找到合适的解决方案。

标签: c#sql

解决方案


推荐阅读