Изменения

Перейти к: навигация, поиск
(Отмена правки 17695) Ладно, хрен с тобой
Если входная грамматика однозначна, то время выполнения алгоритма Эрли для слова длины <tex>n</tex> составляет <tex>O(n^2)</tex>.
|proof=
По лемме 1 в Орагнизуем каждый список разбора <tex>I_j</tex> таким образом, чтобы по любому символу <tex>jx \in \Sigma \cup N</tex>-том списке в итоге будет содержаться , можно было за <tex>O(j1)</tex> получить список тех и только тех ситуаций, а по лемме 2 алгоритм попытается добавить содержащихся в список принадлежащую ему ситуацию ровно один раз, т.е. соответствующие строчки кода выполнятся для <tex>jI_j</tex>-того списка суммарно , которые имеют вид <tex>O([A \rightarrow \alpha \cdot x \beta, j)]</tex> раз.
Заметим, чтобы избежать «холостых» итераций во внутреннем цикле правила Время построения <tex>(2)I_0</tex>, необходимо организовать списки <tex>I_k</tex> таким образом, чтобы по любому символу <tex>x \in (\Sigma \cup N)</tex>, можно было за <tex>O(1)</tex> получить список тех и только тех ситуаций, содержащихся в <tex>I_k</tex>, которые имеют вид <tex>[A \rightarrow \alpha \cdot x \beta, j]</tex> (например, этого можно добиться с помощью [[Хеширование#Хеш-таблица|хеш-таблицы]])не зависит от входной строки.
Таким образомРассмотрим <tex>I_j, \, j > 0</tex>.# При включении ситуаций по правилу <tex>(1)</tex> необходимо лишь просмотреть предыдущий список и для каждого его элемента выполнить константное число операций.# Рассмотрим правило <tex>(2)</tex>. Можно считать, что внутри цикла <tex>(*)</tex> рассматриваются те и только те ситуации, поскольку списков которые удовлетворяют условию (так как список таких ситуаций можно по нетерминалу получить за <tex>O(1)</tex>). Тогда каждая такая ситуация будет добавлена в список и, исходя из леммы 2, попытка добавления будет единственной. А так как по лемме 1 всего в списке <tex>I_j</tex> находится <tex>nO(j)</tex>ситуаций, то суммарно за все итерации внешнего цикла while внутри цикла <tex>(*)</tex> будет рассмотрено <tex>O(j)</tex> ситуаций.# Так как грамматика фиксирована, то при применении правила <tex>(3)</tex> при рассмотрении любой ситуации количество включаемых ситуаций не превосходит некоторой константы, поэтому для каждой рассмотренной ситуации будет выполнено <tex>O(1)</tex> операций.Таким образом, на построение списка <tex>I_j</tex> будет потрачено <tex>O(j)</tex> операций. Тогда время работы алгоритма составляет <tex>O(n^2)</tex>.
}}
==Литература==
*А. Ахо, Дж. Ульман. Теория синтакcического анализа, перевода и компиляции. Том 1. Синтакcический анализ.

Навигация