Есть ли у Lua патологические паттерны с экспоненциальным временем выполнения?
Известно, что регулярные выражения, реализованные рекурсивным способом (вместо NFA/DFA), могут в некоторых случаях требовать экспоненциального времени выполнения. Шаблоны Lua реализуются с помощью рекурсивного средства сопоставления (они позволяют возвращать данные), но они менее мощны, чем регулярные выражения (забывая шаблон%b).
Могут ли паттерны Lua экспоненциально работать? И без возврата (любое вхождение шаблона%0, %1, %2...)? Если это так, я буду признателен за некоторые примеры.
1 ответ
Да, шаблоны Луа могут занять экспоненциальное время. Попробуйте запустить:
string.find('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
'a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?'
.. 'a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
Они по-прежнему могут работать достаточно быстро, если вы будете придерживаться простых шаблонов, поэтому я попробую протестировать некоторые реальные примеры на ваших собственных данных.