Аноним

Приближенное сравнение регулярных выражений: различия между версиями

Материал из WEGA
Строка 12: Строка 12:




Более формально: граф G составляют вершины f v i ; v 2 V; 0 < i < ng, такие, что vi является копией вершины v 2 V в графе Gi. Для каждого ребра u ! c v in E, c 2 £ U {e}, следующие ребра добавлятся к графу G:
Более формально: граф <math>\mathcal{G}</math> составляют вершины <math>\{v_i, v \in V, 0 \le i \le n \}</math>, такие, что <math>v_i</math> является копией вершины <math>v \in V</math> в графе <math>G_i</math>. Для каждого ребра <math>u \xrightarrow{c} v</math> в E, <math>c \in \Sigma \cup \{ \epsilon \}</math>, к графу <math>\mathcal{G}</math> добавляются следующие ребра:
ui ! vi ; с весом w(c !>• ) ; 0 < i < n ; ui !u i+1 ; с весом w(e !t i+1) ; 0 < i < n ; ui ! vi+1 ; с весом w(c !t i+1) ;    0 < i < n :


<math>u_i \to v_i</math> с весом <math>w(c \to \epsilon), 0 \le i \le n,</math>


Для простоты предположим, что G имеет начальное состояние s и уникальное конечное состояние f (это всегда можно организовать). По определению, самый короткий путь в G из s0 в fn дает наименьшее расстояние между T и строкой в L(R). Чтобы адаптировать граф к задаче AREM, меняем веса ребер между si и si+1 на ноль.
<math>u_i \to u_{i + 1}</math> с весом <math>w(\epsilon \to t_{i + 1}), 0 \le i < n,</math>


<math>u_i \to v_{i + 1}</math> с весом <math>w(c \to t_{i + 1}), 0 \le i < n.</math>


Таким образом, задача AREM сводится к вычислению кратчайших путей. Нетрудно заметить, что G можно топологически отсортировать так, чтобы все пути к вершинам в Gi вычислялись раньше всех путей к вершинам в Gi+1. Таким способом можно легко решить задачу нахождения кратчайших путей, для чего потребуется время O(mn log m) и память O(m). На самом деле, если ограничить задачу этим конкретным случаем сетевых выражений, которые являются регулярными выражениями без замыкания Клини, то G не имеет циклов, а вычисление кратчайших путей может быть выполнено за время O(mn) и за еще более короткое время в среднем [2].
 
Для простоты предположим, что G имеет начальное состояние s и уникальное конечное состояние f (это всегда можно организовать). По определению, самый короткий путь в <math>\mathcal{G}</math> из s0 в fn дает наименьшее расстояние между T и строкой в L(R). Чтобы адаптировать граф к задаче AREM, меняем веса ребер между si и si+1 на ноль.
 
 
Таким образом, задача AREM сводится к вычислению кратчайших путей. Нетрудно заметить, что <math>\mathcal{G}</math> можно топологически отсортировать так, чтобы все пути к вершинам в Gi вычислялись раньше всех путей к вершинам в Gi+1. Таким способом можно легко решить задачу нахождения кратчайших путей, для чего потребуется время O(mn log m) и память O(m). На самом деле, если ограничить задачу этим конкретным случаем сетевых выражений, которые являются регулярными выражениями без замыкания Клини, то G не имеет циклов, а вычисление кратчайших путей может быть выполнено за время O(mn) и за еще более короткое время в среднем [2].




4511

правок