Ios 如何有效地搜索有序列表?

Ios 如何有效地搜索有序列表?,ios,swift,sorting,search,Ios,Swift,Sorting,Search,我有一个函数,它预测正在键入的单词,并返回数组中的可能性。不幸的是,这些并没有按使用频率排序。所以我有一个10K有序单词的列表,按从最频繁到不频繁的顺序排列。比较数组和有序列表中的单词以返回最频繁的单词的有效方法是什么?(即它首先遇到的人?) 一位朋友告诉我使用二叉搜索树,但我真的不知道这对我有什么帮助。据我从中了解,只能使用数值。。我这样想是不是错了?有没有更好的方法来完成上述任务 提前感谢您可以使用二元搜索树,并将任何内容作为实际值。要实际使用树,请使用单词的频率作为数值。这实际上是一个很好

我有一个函数,它预测正在键入的单词,并返回数组中的可能性。不幸的是,这些并没有按使用频率排序。所以我有一个10K有序单词的列表,按从最频繁到不频繁的顺序排列。比较数组和有序列表中的单词以返回最频繁的单词的有效方法是什么?(即它首先遇到的人?)

一位朋友告诉我使用二叉搜索树,但我真的不知道这对我有什么帮助。据我从中了解,只能使用数值。。我这样想是不是错了?有没有更好的方法来完成上述任务


提前感谢

您可以使用二元搜索树,并将任何内容作为实际值。要实际使用树,请使用单词的频率作为数值。这实际上是一个很好的解决你问题的方法。树的每个节点都将包含这个单词和一个表示单词频率的数值

来帮助你成功


希望这能有所帮助。

你可以创建一个以单词为键、以频率为值的词典。然后迭代结果数组,使用字典获取每个项的频率值,并预测频率最高的项

我不会在这里使用普通的二进制搜索树。这是可能的——正如Taylor Kirkpatrick所说,你可以创建一个以单词作为键和频率的树,并使用它来查找每个结果单词的频率,方法与字典解决方案大致相同

问题是你不能保证一个简单的二叉树是平衡的。从声音上看,你的数据可能还可以,因为你的单词是按频率顺序排列的。最糟糕的情况是,如果单词是按字母顺序排列的,那么你的二叉树将与链表完全相同,它永远不会分支,因为每个节点都会连接到前一个节点的右侧。因此,搜索的计算复杂度将与迭代单词数组相同-O(n)而不是O(log2N)(这是二叉树的最佳情况)

当然,您可以在插入之前对单词列表进行随机分组,以防止出现这种情况。但在我看来,使用字典更容易。我不知道Swift字典的实际实现是什么(我们也不知道,直到他们在几个月内将其开源),但你可以认为它将在价值检索方面超过普通BT


我不知道这个问题的背景是什么——如果你正在学习CS,那么仅仅为了智力增长而实施BST可能是值得的——在这种情况下,只有10000个项目,你可能会发现性能差异最终非常小。但是,如果你是一个正在工作的程序员,试图解决一个问题,那么就采用字典法。

你把所有的单词都放进字典或集合中。就这样。字典如果您有与单词关联的数据,则设置为如果您没有数据并且只想知道单词是否在列表中

您可能需要使用一个

把你的单词表放进去。对于输入的每个字符,尽可能深入地遍历Trie,然后尽可能完整地显示叶节点的所有路径

因为像您这样的世界很可能是静态的,所以如果性能有问题,您可以在启动时预计算Trie并从磁盘/网络/任何东西加载