algorithm - 在排名(排序)列表上执行前缀搜索的有效方法?

标签 algorithm sorting kotlin data-structures

我有一个很大的列表,其中包含一些按概率排序的元素:

data class Element(val value: String, val probability: Float)

val sortedElements = listOf(
    Element("dddcccdd", 0.7f),
    Element("aaaabb", 0.2f),
    Element("bbddee", 0.1f)
)

现在我需要在此列表上执行前缀搜索,以查找以一个前缀开头的项目,然后以下一个前缀开头,依此类推(元素仍然需要按概率排序)

val filteredElements1 = sortedElements
                                  .filter { it.value.startsWith("aa") }

val filteredElements2 = sortedElements
                                  .filter { it.value.startsWith("bb") }

通过某个前缀过滤的元素的每个“请求”都需要 O(n) 时间,这在大型列表的情况下太慢了。

如果我不关心元素的顺序(它们的概率),我可以按字典顺序对元素进行排序并执行二分搜索:排序需要 O(n*log n) 时间,每个请求 -- O(log n) 时间。

有什么方法可以加快这些操作的执行速度,同时又不丢失元素的排序(概率)?也许有某种特殊的数据结构适合这个任务?

最佳答案

您可以阅读有关 Trie 数据结构的更多信息 https://en.wikipedia.org/wiki/Trie 这对您的用例来说可能非常有用。

Leetcode对此有另一个非常详细的解释,你可以在这里找到https://leetcode.com/articles/implement-trie-prefix-tree/

希望这有帮助

关于algorithm - 在排名(排序)列表上执行前缀搜索的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57480219/

相关文章:

c - 加密性能

java - 输入为int数组,获取所有子集

php - PrestaShop 对类别中的多个字段进行排序

kotlin - 如何在kotlin中的主要构造函数参数上添加注释

java - 获取对 Kotlin 函数的引用作为 Java 方法

algorithm - 从理论上知道您需要多强大的微 Controller 来运行您的程序?

java - 在Java中将对象插入到四叉树中

java - 尝试按字母顺序显示数组时出错

javascript - 根据评分对表进行排序

android - Realm + Moshi | @JsonClass无法应用于[class],RealmObject不是Kotlin typepublic