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

fhu*_*cho 3 java optimization android binary-search

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

我希望自动完成能够超快(理想情况下不到100毫秒,但我想这是不可能的),我可以做什么优化?

更新1: 我将用户输入转换为带有空格的小写英文字符(az).因此'A/b'将转换为'ab'然后进行搜索.

Uodate 2: 我现在意识到我需要额外的东西 - 搜索单词起始子串.

Raz*_*zor 6

为什么不使用SQLite DB而不是文本文件?
在您的情况下,我认为您不能比便携式数据库更快地做任何事情.

  • 在内部,SQLite也使用二进制搜索.但SQLite将数据存储在btree中,这意味着与使用已排序的平面文件相比,需要的文件访问操作更少.而SQLite数据库很可能小于固定大小的平面文件. (4认同)

Rya*_*yan 6

你所寻找的东西叫做TRIE

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

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