Фон:
Моя группа CSS360 пытается создать приложение для Android, которое будет включать функцию автозаполнения поиска. Данные, которые мы будем искать, содержат около 7000 записей и будут храниться в базе данных SQLite на самом телефоне. Наиболее очевидный подход состоит в том, чтобы выполнить линейный поиск в базе данных после каждого символа, который вводит пользователь, а затем вернуть список предложений, которые являются потенциальными буквенными расширениями пользовательского запроса. Тем не менее, кажется, что это будет довольно неэффективно, и мы искали лучшие альтернативы. В другом из моих сегодняшних занятий мой инструктор кратко обсудил структуру данных три и упомянул, что она часто используется для хранения целых словарей. Записи в три могут быть получены в логарифмическом времени (в отличие от линейного времени для обычного старого массива), поэтому нам кажется, что это отличный инструмент для использования! К сожалению, мы уже над головой над этим проектом, и никто из нас не знает, как это сделать. Все, кого мы когда-либо кодировали на сегодняшний день, являются базовыми консольными приложениями, которые обучают нас основам программирования. Мы все пытаемся изучить платформу Android в течение недели, просматривая видео с YouTube, и отличаемся базой данных от одного парня из нашей группы, у которого есть опыт работы с SQL. Мы могли бы серьезно использовать некоторые указатели!
Вопросы:
- Можно ли при создании дерева предварительно заполнить всю структуру? IE: сгенерировать строку кода для каждого используемого узла, чтобы вся структура уже была в памяти при запуске программы? Я думаю, что это избавит нас от необходимости восстанавливать всю базу данных из базы данных при каждом запуске программы. Если так, есть ли простой способ вставить эти тысячи строк кода в нашу программу? IE: Какой-то сценарий, который преобразует файлы базы данных в гигантский текстовый файл команд Java, который можно скопировать и вставить в Eclipse?
- Будут ли значительные издержки, если мы будем искать в базе данных напрямую, вместо того, чтобы использовать какой-то внутренний список или структуру данных? Должны ли мы копировать имена из базы данных и искать их внутри программы для нашей функции автозаполнения?
- Если это окажется слишком технически сложным для нас, и мы вынуждены прибегнуть к обычному линейному поиску, будет ли заметно снижена производительность?
- Наши текущие планы заключаются в том, чтобы запускать функцию автозаполнения каждый раз, когда пользователь вводит символ, и затем ждать возврата функции, прежде чем позволить им продолжить ввод. Единственные программы, которые кто-либо из нас написал, пока работают синхронно. Что нам нужно знать, чтобы сделать эту функцию асинхронной? Учитывая наши способности новичка и требования, которые мы уже должны выполнить, это будет слишком технически сложным для нас?