【发布时间】:2017-05-03 08:36:41
【问题描述】:
我应该使用哪种数据结构来保持按给定权重排序的元素?我需要在每个元素生成特定权重的集合中添加元素,但该权重不包含(未计算)在元素本身内;它是由元素之外的其他人计算的。此外,权重不需要存储(但如果需要也可以),它只是一个插入参数,用于将元素放置在正确的位置。
我的具体用例是对音乐曲目进行排序。我有一个曲目列表和一个适用于每个曲目的规则列表。我遍历每个轨道,然后规则列表在给定当前轨道的情况下生成一个“分数”。给定生成的分数,我想将曲目添加到“集合”中,这样我就可以选择得分最高的第一首曲目。
我看不到在 Java 中使用哪种数据结构。我必须自己实施一个新的吗?我最好的猜测是一种堆数据结构,但我不知道具体是哪一种。
编辑: 重量在开始时只计算一次。我无法提供“比较器”,因为它将比较曲目,并且我无法在“compareTo 方法”上计算它们的分数。 该算法可能如下所示:
public Track determineNext() {
MyStructure<Track> trackScores;
for (Track track : tracks) {
int score = 0;
for (Rule rule : rules) {
score += rule.applyScoreOn(track);
}
trackScores.add(track, score);
}
return trackScores.first();
}
希望你能明白。
【问题讨论】:
-
“重量”多久计算一次?能改变吗?如果是,什么时候重新计算?
-
如果权重不会改变,SortedSet: docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html 可能是你需要的,但它取决于如何访问数据。
-
你可以使用计算得到的分数for
compareTo()方法吗?这看起来完全地类似于实现PriorityQueue的那种东西。
标签: java data-structures heap