Когда я взглянул на проблему Google Code Jam Qualification Round 2009:: Alien Language, простая идея состоит в том, что вы генерируете все возможные строки из шаблона и удерживаете его в списке, а затем проверяете и подсчитываете согласованные строки. Этот алгоритм прост, прямолинейный, но он потребляет невероятно большую оперативную память, и ваш ноутбук, несомненно, умрет.Python - почему регулярное выражение гораздо эффективнее, чем поиск в списке?
Другой способ решить эту проблему - заменить "()"
на "[]"
для использования регулярного выражения. Python встроенный re.match()
и string.replace()
занял менее нескольких секунд, чтобы пройти большой тест. Теперь вопрос, почему регулярное выражение гораздо более мощное?
В моем понимании может быть определен механизм, такой как функция yield
, которая позволяет генерировать «генератор» - итерабельный и однопроходный. Но это моя догадка.
Поиск через regexp не требует генерации всех возможных строк, которые могли бы соответствовать регулярному выражению .. это то, что суть вашего вопроса? –
@AndrewMagee, как это реализовано? Такие документы, как https://docs.python.org/2/library/re.html#, не объяснили. – ankJM173
Идея DFA будет полезна здесь. https://en.wikipedia.org/wiki/Deterministic_finite_automaton – Ray