【发布时间】:2017-07-21 22:13:32
【问题描述】:
我有一个项目列表,每个项目都有一个与之相关的等级。
Item 1, Rank=1
Item 2, Rank=2
Item 3, Rank=3
Item 4, Rank=4
Item 5, Rank=5
我想设计一种方法来处理项目的重新排名,而对其他项目的排名变化很小或没有变化。
我想到的一个解决方案是利用小数并使用 Java 的双变量类型。因此,例如,如果我在 item2 和 item3 之间移动 item5,这将是输出 -
Item 1, Rank=1
Item 2, Rank=2
Item 5, Rank=2.5
Item 3, Rank=3
Item 4, Rank=4
等等,
Item 1, Rank=1
Item 2, Rank=2
Item 4, Rank=2.25
Item 5, Rank=2.5
Item 3, Rank=3
此解决方案有效,但在某个点之后(在同一位置移动约 55 次,我达到双变量限制,我可能不得不在该点重置所有等级)
我只是想知道是否有更好的方法来解决这个问题?
有几件事要记住。
- 我需要将此数据结构存储在数据库(项目、排名)中,并且我将构建一个 Web 服务,该服务根据排名按排序顺序获取所有项目,因此我将进行数据库调用以对所有项目进行排序按排名字段。
- 我将使用 Java,所以我只能处理 Java 变量。
【问题讨论】:
-
看看github.com/mixonic/ranked-model - 我知道这是 ruby/rails 而不是 java,但你可以看看它们的实现并做一些笔记。他们在等级之间使用非常大的空间来实现他们能够在不改变整个等级的情况下改变事物的目标。
-
你使用什么数据结构?一旦迭代到所需的索引,链接列表允许 O(1) 插入列表。然后您可以使用列表中项目的结构位置来指示排名。
-
我其实也想到了那个解决方案。但话又说回来,我只是扩大我的范围,稍后我会达到极限。感谢您将我指向 github....:)
-
@4castle - 所有这些物品对象都存储在数据库中。我必须将链接存储在数据库中,以防项目必须像持久链表一样工作。您对我如何优化它有什么建议吗?
-
好的。嗯,你能分享的信息越多,你就能得到更好的建议。
标签: java algorithm sorting ranking rank