Быстро фильтрация строкового набора подстрокой?

Это:

var txt=new RegExp(pattern,attributes);

эквивалентно этому:

var txt=/pattern/attributes;

См. http://www.w3schools.com/jsref/jsref_obj_regexp.asp .

9
задан mackenir 19 August 2009 в 11:01
поделиться

6 ответов

Статья в Википедии перечисляет несколько способов индексирования подстрок. У вас есть:

13
ответ дан 4 December 2019 в 12:19
поделиться

Да, вы можете, например, создать индекс для всех комбинаций символов в строках. Строка вроде «hello» будет добавлена ​​в индексы для «he», «el», «ll» и «lo». Для поиска строки «ад» вы должны получить индекс всех строк, которые существуют во всех индексах «он», «эль» и «ll», а затем просмотреть их в цикле для проверки фактического содержания в строках.

2
ответ дан 4 December 2019 в 12:19
поделиться

Если вы можете предварительно обработать коллекцию, вы можете делать много разных вещей.

Например, вы можете построить дерево, включающее суффиксы всех ваших строк, а затем использовать это для очень быстрое соответствие.

1
ответ дан 4 December 2019 в 12:19
поделиться

Если вы собираетесь многократно искать один и тот же текст, то, вероятно, стоит использовать суффиксное дерево . При правильном применении вы можете добиться линейной обработки по времени для большинства проблем со строками. Если нет, то на практике вы не сможете добиться большего успеха, чем Рабина-Карпа , который основан на хешировании и линейен по ожидаемому времени.

Существует множество свободно доступных реализаций. суффиксные деревья. См., Например, эту реализацию C или для Java,

1
ответ дан 4 December 2019 в 12:19
поделиться

На самом деле ничего жизнеспособного, нет, если только у вас нет дополнительных априорных знаний о ваших данных и / или поисковом запросе - например, если вы ищете только совпадения в начиная с ваших строк, тогда вы можете отсортировать строки и смотреть только на те, которые находятся в границах вашего поискового запроса (или даже сохранить их в двоичном дереве и смотреть только на те ветви, которые могут совпадать). Точно так же, если ваши потенциальные условия поиска ограничены, вы можете запустить все возможные поиски по строке, когда она изначально вводится, а затем просто сохранить таблицу, в которой совпадают термины, а какие нет.

Помимо подобных вещей, просто итерация - вот и все.

0
ответ дан 4 December 2019 в 12:19
поделиться

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

Если это где-нибудь, то вам в значительной степени нужно перебрать весь список, если только вы не list настолько велик, и запрос выполняется достаточно часто, поэтому стоит создать более сложное решение для индексации.

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

0
ответ дан 4 December 2019 в 12:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: