Алгоритмы. Регулярные выражения. Оценка сложности
Под катом продолжение рассуждение на тему анализа регулярных выражений.
Просто чтобы понять задачу приведу некоторые цифры по использованным мной подходам. Например, в том что касается метрик (метрика — это неправильный термин, никак от него не отвыкну, на самом деле тут не метрики, а дискретные значения в заданном диапазоне используемые при оценке), то их использование сильно варьируется от данных и выражений, это как раз то что я писал про предварительную оценка входного потока и про предварительное индексирование самих выражений по метапризнакам.
Так в выражениях используемых в Скиуре фильтр только по двум метрикам даёт отсев примерно 80% всех выражений и ускорение в проверке ими от 2.5 до 4 раз. Причём там есть что оптимизировать на уровне реализации, но в любом случае оценки от 2.5 до 4 будут вполне корректны. Почему не в 5 раз? Потому как сами движки регулярных выражений, на самом деле, некоторые проверки в себя включают, но там они заведомо медленнее так как необходимо знать детали реализации и где именно в них проверки закладываются чтобы понять их эффективность. Добавлю что в данном случае метрики выражениям прописывались вручную, так как разработка алгоритма их извлечения это само по себе непростая задача.
Но даже это ускорение в 2.5 — 4 раза — это очень мало. Чрезвычайно мало поскольку, к примеру, при 10 000 регулярных выражениях ускорение в 4 раза будет 2500 выражений что невероятно много и дорого для потоковой обработки и для каких-то более менее осмысленных сравнений необходимо уметь сокращать выборку до 0.5-1%. К слову об опечатках — там это достигается, но достигается за счёт того что правила фильтрации построены не на отсеве всех неподходящих, а на поиске подходящих с возможностью рассечения вариантов очередной метрикой на каждом из уровней и построением дерева решений.
И некоторые усреднённые цифры с оговоркой частного случая как выражений так и входного потока:
* при проверке 2-мя метриками полностью отсеивается до 77% всех входных данных;
* для 24.9% входных данных отсеивается до 80% всех выражений;
* для 0.01 отсеивается около 30% регулярных выражений.
Итого при проверке веб страницы из которой извлечено 2103 строки коллекцией из 171 одного регулярного выражения производится не более чем 9115 проверок при 359613 возможных. Иначе говоря фильтр позволяет сократить перебор значений в 40 раз. Но, вернувшись назад к значению в ускрение в 2.5-4 раза, можно быть уверенными что дело не только в количестве сравнений, но и в их стоимости и видно что фильтры отсеивают, в основном, «дешёвые сравнения», а «дорогие» наоборот оставляют. Это ещё одна причина для сбора статистики сравнений и мониторинге производительности сравнения.
Если перейти от задач которые интересны мне как-то классификация с помощью РВ к задачам практического толка как то фильтрация контента или правила IDS, то там ещё сложнее поскольку там не проверка участка на соответствие правилу, а поиск.
Но то что универсальное решение существует — я уверен.
Поделиться в соц. сетях
Microsoft Translate
Рубрики
- BI (3)
- CEP (1)
- IBM (13)
- Novell (6)
- WTF (1)
- apple (3)
- blogging (61)
- couchdb (3)
- data.gov.ru (250)
- datasets (104)
- diagramming (11)
- e-Government (927)
- eGov (946)
- google (33)
- gtd (5)
- links (65)
- linux (19)
- microsoft (47)
- not so wtf yet (3)
- opengovdata.ru (198)
- opensource (56)
- productivity (2)
- saas (4)
- second life (2)
- security (6)
- semweb (15)
- sun (13)
- virtualization (16)
- vista (2)
- web (223)
- web 2.0 (108)
- wikileaks (1)
- yahoo (11)
- Без рубрики (4)
- Енот Поискун (17)
- Общественное благо (12)
- алгоритмы (73)
- алгоритмы (51)
- аналитика (19)
- антисео (5)
- бывает и такое (8)
- виртуализация (21)
- вопросы (20)
- госзаказ (172)
- идеи (29)
- из жизни (95)
- инновации (27)
- интересные проекты (7)
- информация (108)
- книги (2)
- метапост (1)
- открытое государство (51)
- открытые данные (10)
- поиск (93)
- почти несерьёзно (16)
- размышления (127)
- расшифровка реальности (10)
- робототехника (1)
- руководство проектами (3)
- скиур (19)
- социальные сети (45)
- социоранк (9)
- стандарты (22)
- стоит почитать (21)
- футуристика (1)
- электронное государство (945)
- юзабилити (25)
- юмор (14)
Метки
антиспам госзакупки гослюди госуслуги датасеты дебаты извлечение информации инновации кузьминов метаданные навальный открытое государство открытые данные поиск почти без иронии публичность раскрытие информации расшифровка реальности систематизация социоранг социоранк стартапы форматы файлов футуристика #belyh #rucamp #socamp 94-ФЗ antispam apps4russia icamp icamp2009 md5 ogp open government searchme semweb sha1 ssl usability






