Яка складність щодо довжини рядка, необхідна для виконання порівняння регулярних виразів для рядка?
Яка складність щодо довжини рядка, необхідна для виконання порівняння регулярних виразів для рядка?
Відповіді:
Відповідь залежить від того, що саме ви маєте на увазі під "регулярними виразами". Класичні регулярні вирази можуть бути скомпільовані у детерміновані кінцеві автомати, які можуть відповідати рядку довжини N
в O(N)
часі. Деякі розширення мови регулярних виразів змінюють це на гірше.
Ви можете знайти такий документ, що цікавить: Відповідність регулярних виразів може бути простою та швидкою .
необмежений - ви можете створити регулярний вираз, який ніколи не закінчується, на порожньому вхідному рядку.
Якщо ви шукаєте жорсткі асимптотичні межі на RegEx (без урахування самого виразу), тоді їх немає. Як зазначає Алекс, ви можете створити регулярний вираз, який є O (1), або регулярний вираз, який є Omega (нескінченність). Як чисто математичний алгоритм, механізм регулярних виразів буде надто складним для виконання будь-якого формального асимптотичного аналізу (крім того, що такий аналіз в основному був би ні до чого).
Швидкість зростання певного виразу (оскільки це, насправді, є алгоритмом, у будь-якому випадку) буде набагато більш значущою, хоча і не обов'язково простішою для аналізу.