. Мне интересно, какой лучший подход должен был бы проверить, содержится ли общее имя в NSString в приложении iPhone. У меня есть отсортированный плоский текстовый файл ~ 5500 обычных американских имен, ограниченных новыми строками. NSString, которую я ищу для имени, не очень длинный, скорее всего, размер обычного предложения.Проверьте, что NSString содержит общее имя на iPhone.
Мой первоначальный план состоял в том, чтобы загрузить отсортированный список в память, а затем перебрать каждое слово в NSString, выполняющее двоичный поиск списка, чтобы определить, было ли это слово общим именем.
Мне лучше попытаться поместить этот список имен в CoreData или таблицу SQLite и выполнить запрос с этим? Я понимаю, что мне не пришлось бы загружать весь список в память, если бы я пошел по этому маршруту.
Я предполагаю, что эта ситуация является распространенной проблемой со словарными словарями для словесных игр, поэтому мне просто интересно, что лучше всего подходит для быстрого поиска. Благодаря!
Можете ли вы уточнить, что вы подразумеваете под «проверкой, содержится ли общее имя в NSString». Означает ли это, что «пользователь по имени Джон вступил», или это означает «Джон»? Другими словами, строка, которую вы проверяете, состоит только из имени, или имя должно быть найдено в строке, содержащей «другое вещество» помимо имени? Это может повлиять на выбранный подход. Кроме того, «как быстро» вам нужно это сделать? – johne
Это имя должно быть найдено в строке, которая содержит «другое вещество» помимо имени. Строка не длинная, стандартное предложение может составлять 50 - 100 символов. Хотелось бы как можно быстрее, но я понимаю, что есть компромисс с памятью. –
Ну, если скорость была проблемой, я бы, вероятно, построил DFA из ~ 5500 имен на лету. Вы можете сериализовать DFA в энергонезависимой памяти, если вам нужно. DFA должен быть знаком с Unicode, вероятно, с UTF8 для удобства.Тогда я бы, вероятно, использовал 'CFStringGetCStringPtr' /' CFStringGetBytes', чтобы захватить копию строки UTF8 и запустить DFA. Производительность будет ~ 'O (n)', где 'n' - размер строки для поиска. – johne