java - 在排序文件中使用二进制搜索超快速自动完成(300000 行)

标签 java android optimization binary-search

在我的 Android 应用程序中,我想要一个具有自动完成功能的输入字段。项目数量约为 300000。最好的解决方案似乎是将项目放入文件中(在 sdcard 上),每行一个项目,每行将具有相同数量的字符,以便我可以查找特定的行号.如果用户在文本字段中输入内容,我将二进制搜索(通过 RandomAccessFile)文件并显示建议。

我希望自动完成超快(最好在 100 毫秒以下,但我想这是不可能的),我可以做哪些优化?

更新 1: 我会将用户输入转换为带空格的小写英文字符 (a-z)。所以 'A/b' 将被转换为 'a b' 然后进行搜索。

Uodate 2: 我现在意识到我需要额外的东西 - 搜索以单词开头的子字符串。

最佳答案

你要找的是 TRIE

http://forums.sun.com/thread.jspa?threadID=5295936

在计算机科学中,trie 或前缀树是一种有序的树数据结构,用于存储关联数组,其中键通常是字符串。与二叉搜索树不同,树中没有节点存储与该节点关联的键;相反,它在树中的位置显示了它关联的键。一个节点的所有后代都有一个与该节点关联的字符串的公共(public)前缀,并且根与空字符串关联。值通常不与每个节点相关联,仅与叶子和一些与感兴趣的键对应的内部节点相关联。

关于java - 在排序文件中使用二进制搜索超快速自动完成(300000 行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3719127/

相关文章:

java - 可见性和排序之间的关系/区别是什么?

c++ - 仅设置 1 位的整数检测优化

java - 创建子数组时出错

java - JTextFields 自动调整大小

java - 为什么默认对象的 hashCode 在不同的设备上返回不同的值?

java - 我尝试纠正这个问题,但我做不到

android - 将 EditText imeOptions 设置为 actionNext 无效

c++ - 如何使用右移避免运算符除法

optimization - 支持向量机原始形式实现

java - PowerLoom - 无法找到或加载主类 edu.isi.powerloom.PowerLoom