Другая теоретическая информация, представляющая интерес.
Для ясности предположим стандартное определение регулярного выражения
http://en.wikipedia.org/wiki/Regular_language
из теории формального языка. Практически это означает, что единственное здание
Материалом являются символы алфавита, операторы конкатенации, чередования и
Закрытие Клини, а также единица и нулевые константы (которые появляются для
теоретико-групповые причины). Вообще это хорошая идея не перегружать этот термин
несмотря на повседневную практику в сценариях языков, которая приводит к
неясности.
Существует конструкция NFA, которая решает проблему соответствия для регулярного
Выражение r и входной текст t в O (| r | | t |) времени и O (| r |) пространстве, где
| - | это функция длины. Этот алгоритм был дополнительно улучшен Майерсом
http://doi.acm.org/10.1145/128749.128755
к временной и пространственной сложности O (| r | | t | / log | t |) с помощью автоматных списков узлов и парадигмы четырех русских. Эта парадигма, кажется, названа в честь четырех русских парней, которые написали новаторскую статью, которая не
онлайн. Тем не менее, парадигма иллюстрируется в этой вычислительной биологии
конспект лекции
http://lyle.smu.edu/~saad/courses/cse8354/lectures/lecture5.pdf
Я нахожу забавным назвать парадигму числом и
национальность авторов вместо фамилий.
Проблема соответствия для регулярных выражений с добавленными обратными ссылками
NP-полная, подтвержденная Aho
http://portal.acm.org/citation.cfm?id=114877
путем сокращения от задачи покрытия вершин, которая является классической NP-полной задачей.
Чтобы детерминистически сопоставить регулярные выражения с обратными ссылками, мы могли бы
использовать возврат (не в отличие от двигателя регулярного выражения Perl), чтобы отслеживать
возможные подслова входного текста t, которые могут быть назначены переменным в
р. Есть только O (| t | ^ 2) подслов, которые могут быть назначены на любую переменную
в г. Если в r есть n переменных, то возможны O (| t | ^ 2n)
задания. После того, как назначение подстрок переменным зафиксировано,
проблема сводится к простому совпадению регулярного выражения. Следовательно
сложность наихудшего случая для сопоставления регулярных выражений с обратными ссылками
O (| т | ^ 2n)
.
Обратите внимание, что регулярные выражения с обратными ссылками еще не
Полнофункциональное регулярное выражение.
Взять, к примеру, символ "все равно", кроме любого другого
операторы. Есть несколько полиномиальных алгоритмов, решающих, является ли набор
Шаблоны соответствуют входному тексту. Например, Кучеров и Русинович
http://dx.doi.org/10.1007/3-540-60044-2_46
определить шаблон как слово w_1 @ w_2 @ ... @ w_n, где каждый w_i - это слово (не регулярное выражение), а "@" - это символ переменной длины "не волнует", не содержащийся ни в w_i. Они выводят алгоритм O ((| t | + | P |) log | P |) для сопоставления набора шаблонов P с входным текстом t, где | t | длина текста, а | P | длина всех слов в P.
Было бы интересно узнать, как сочетаются эти меры сложности и что
является мерой сложности проблемы сопоставления для регулярных выражений с
обратные ссылки, «пофиг» и другие интересные особенности практического
регулярные выражения.
Увы, я не сказал ни слова о Python ...:)