Вопрос

Вот очень и прямой вопрос:Сколько времени займет локальный поиск в массиве из 200–300 строк?А что насчет удаленного доступа?

Это было полезно?

Решение

Поиск?В каком смысле?

Если вы просто работаете:

[myStringArray containsObject:searchString];

тогда 200-300 строк можно будет найти за несколько микросекунд.

Если вы ищете:

BOOL found = NO
for (NSString *string in myStringArray)
{
    if ([string rangeOfString:searchString].location != NSNotFound)
    {
        found = YES;
         break;
    }
}

Тогда она почти полностью зависит от длины каждой строки, но для строк длиной менее нескольких десятков символов она примерно такая же, как и предыдущая скорость поиска.

Удаленный поиск — это совсем другое дело, но для такой операции это колоссальная трата времени.Он полностью основан на задержке сети.Учитывая средний пинг в 250 мс, среднее время удаленной операции составляет около полсекунды или более только потому, что столько времени занимает генерация сетевых пакетов, отправка по сети, ожидание приема удаленного сервера, ожидание удаленного сервера. сервер для обработки, дождитесь ответа и проанализируйте его.

Если бы этот вопрос был окольным способом:должен ли я просто получить все 30 строк и выполнить поиск локально - тогда:да, ищите локально.В целом:локальный поиск выполняется быстрее до тех пор, пока время, необходимое для загрузки всех результатов, не станет обременительным (в случае 3G я обычно считаю 50 КБ максимальным для быстрой прозрачной загрузки).

Другие советы

Если вы ищете алфавитные строки, а время поиска слишком велико, вы можете попробовать преобразовать список строк в DAWG (ориентированный ациклический граф слов, который легко найти в Google).Я проделал это для очень длинного списка (около 170 000 слов) и получил коэффициент улучшения 18 000.

джрдонер

микросекунды.это очень быстро.Я тоже был удивлён, когда узнал об этом :p

Это касается локального поиска строк.

Я реализовал структуру данных Trie для индексации строк для быстрый автодополнение.http://en.wikipedia.org/wiki/Три

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top