Изменения

Перейти к: навигация, поиск
Время работы для однозначной грамматики
Если входная грамматика однозначна, то время выполнения алгоритма Эрли для слова длины <tex>n</tex> составляет <tex>O(n^2)</tex>.
|proof=
Орагнизуем каждый список разбора По лемме 1 в <tex>I_jj</tex> таким образом, чтобы по любому символу <tex>x \in \Sigma \cup N</tex>, можно было за -том списке в итоге будет содержаться <tex>O(1j)</tex> получить список тех и только тех ситуаций, содержащихся а по лемме 2 алгоритм попытается добавить в список принадлежащую ему ситуацию ровно один раз, т.е. соответствующие строчки кода выполнятся для <tex>I_jj</tex>, которые имеют вид -того списка суммарно <tex>[A \rightarrow \alpha \cdot x \beta, O(j])</tex>раз.
Время построения Заметим, чтобы избежать «холостых» итераций во внутреннем цикле правила <tex>I_0(2)</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>O(j)n</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ический анализ.

Навигация