如何解决在登录时间内搜索多个条目
| 我必须编写一个程序来创建一个通讯录,该程序可以在具有大量记录的多个字段上提供搜索功能。二进制搜索是一个选项,但棘手的部分是用户可以搜索四个字段(firstName,lastName,phoneNumber,City)中的任何一个。因此,没有可以对列表进行排序的特定列。该程序还应该以对数时间返回搜索结果。 现在,我创建了一个通用的arraylist解决方法
一种稍微占用内存的方法是建立四个并行的二进制搜索树(或四个“ 0”,它们的比较器一次比较一个字段)。这样,您可以在任何树上进行搜索,以找到具有O(lg n)时间的特定字段的节点。
, 使用数据库并定义所需的索引。
如果您不能使用数据库,则进行排序和搜索。您可以在所需的任何字段上按O(log n)时间排序。然后,您可以在已排序的字段上搜索O(log n)时间。不是在生产环境中执行此操作的方法,而是作为一项任务,您可以声明:“总时间复杂度:O(log n)。”
, 使用4棵树和一个arraylist存储它。
4棵树仅应考虑索引。您不必将每个字符串的全部存储在树中,只需存储足够的字符串即可将其与其余字符串区分开(即,将字符存储在节点上,并且当有足够的字符串时,您将到达叶子)前缀以标识字符串)。通过用“跳过n个字母”节点注释树可以有点聪明,这样当子树中的所有字符串在接下来的n个字母相等时,您就不会存储内部节点。
然后,数组列表存储记录。
在树的叶子处,您只需将索引存储到arraylist中。
如果正确执行此操作,则使用350,000 * 2 * 4(整数字节)+ X〜= 3MB + X其中X是文件的大小,您的系统肯定有这么多吗?您甚至可以将数据保留在文件中并索引到文件中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。