c# - 集合中的有效和确定性排名项目?
问题描述
我在 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 的元素并且它们无法移动。这可以通过不频繁地重新计算整个集合的堆栈等级来避免,但我现在犹豫要不要实现它,因为这看起来太多了。
我想知道除了更改数十亿个项目之外是否还有其他算法解决方案,或者这个问题是否有一个众所周知的名称来自己找到合适的解决方案。
解决方案
推荐阅读
- php - PHP MYSQL:打印二维数组
- oracle - 调用带参数的plsql过程
- php - 未捕获(承诺中)错误:无法在 react-laravel 中获取流 ${err}
- javascript - 为什么发送 Multipart/form-data 不起作用
- c# - EF6 提供者模型的自定义/开源实现
- node.js - 如何将所有猫鼬文档从一个集合复制到同一数据库中的另一个集合
- json - MongoDB,将元素数据类型从数字字符串转换为大型集合的数字(3kk)
- java - 需要在java中打印最大元素列
- python - 在我的第一个函数之后如何调用我的第二个函数?
- android - 适用于 Android 电视应用程序的 Xamarin 表单