用于在数据结构中查找书籍的搜索功能
search function for finding books in a datastructure
我想实现一个尽可能高效的搜索过滤器,用于管理我的“图书馆”中的书名。搜索应按如下方式进行:
用户输入书名的前 b 个字母。将被退回
以输入的字母序列开头的 n 本书名。 k是一个
指定应输出多少书名的预设常量。这意味着
如果 n ≤ k,则输出 n 个书名的按字母顺序排序的列表。
我目前面临的主要问题是我不知道应该选择什么数据类型以及我应该在什么数据结构上实现它,因为我需要它尽可能高效。
接下来的问题是,如果我为此使用数组,我肯定会选择排序数组,对吗?
非常感谢任何帮助,我不是要求实施。
这是一个非常好的 trie 候选者。在每次击键时,您都会确切地知道有多少本书以该前缀开头。这是一个线性操作。因此,搜索 n
个字符的前缀需要 O(n)
时间。在一个简单的 trie 实现中,要获取书名,您需要遍历以前缀开头的其余路径,但这也可以通过在 trie 的每个节点处放置指向以该前缀开头的书名的指针来补救前缀(换句话说,从该节点继续)。您也可以提前对这些指针进行排序。
因此,搜索所有以长度前缀 n
开头的标题并返回标题的整个操作将是 O(n + m)
,其中 m
是标题的数量这个前缀。
我想实现一个尽可能高效的搜索过滤器,用于管理我的“图书馆”中的书名。搜索应按如下方式进行:
用户输入书名的前 b 个字母。将被退回 以输入的字母序列开头的 n 本书名。 k是一个 指定应输出多少书名的预设常量。这意味着 如果 n ≤ k,则输出 n 个书名的按字母顺序排序的列表。
我目前面临的主要问题是我不知道应该选择什么数据类型以及我应该在什么数据结构上实现它,因为我需要它尽可能高效。
接下来的问题是,如果我为此使用数组,我肯定会选择排序数组,对吗?
非常感谢任何帮助,我不是要求实施。
这是一个非常好的 trie 候选者。在每次击键时,您都会确切地知道有多少本书以该前缀开头。这是一个线性操作。因此,搜索 n
个字符的前缀需要 O(n)
时间。在一个简单的 trie 实现中,要获取书名,您需要遍历以前缀开头的其余路径,但这也可以通过在 trie 的每个节点处放置指向以该前缀开头的书名的指针来补救前缀(换句话说,从该节点继续)。您也可以提前对这些指针进行排序。
因此,搜索所有以长度前缀 n
开头的标题并返回标题的整个操作将是 O(n + m)
,其中 m
是标题的数量这个前缀。