Сверхбыстрое автозаполнение с использованием бинарного поиска в отсортированном файле (300000 строк) - PullRequest
3 голосов
/ 15 сентября 2010

В моем приложении для Android я хочу иметь поле ввода с автозаполнением. Количество элементов будет около 300000. Лучшее решение, кажется, состоит в том, чтобы поместить элементы в файл (на SD-карте), по одному элементу в строке, каждая строка будет иметь одинаковое количество символов, чтобы я мог искать конкретный номер строки. , Если пользователь вводит что-то в текстовое поле, я выполняю бинарный поиск (через RandomAccessFile) файла и показываю предложения.

Я хочу, чтобы автозаполнение было очень быстрым (в идеале, до 100 мс, но я думаю, что это невозможно), какие оптимизации я могу сделать?

Обновление 1: Я преобразую вводимые пользователем символы в строчные английские символы (a-z) с пробелами. Таким образом, «A / B» будет преобразовано в «A B», а затем искать.

Uodate 2: Теперь я понял, что мне нужна дополнительная вещь - для поиска подстрок, начинающих слова.

Ответы [ 11 ]

0 голосов
/ 15 сентября 2010

Я также мог бы сделать что-то вроде этого (ниже предварительно обработанный файл):

aa - line 1
ab - line 17
.
.
zz - line 299819 

Если пользователь вводит что-то, начинающееся с aa, я бы прочитал строки 1 - 17 и последовательно поискал в них

...