Введение
Алгоритм разбора для контекстно-свободных грамматик
In computer science, the Cocke–Younger–Kasami algorithm (alternatively called CYK, or CKY) is a parsing algorithm for context free grammars published by Itiroo Sakai in 1961. The algorithm is named after some of its rediscoverers: John Cocke, Daniel Younger, Tadao Kasami, and Jacob T. Schwartz. It employs bottom up parsing and dynamic programming. The standard version of CYK operates only on context free grammars given in Chomsky normal form (CNF). However any context free grammar may be algorithmically transformed into a CNF grammar expressing the same language
The importance of the CYK algorithm stems from its high efficiency in certain situations. Using big O notation, the worst case running time of CYK is , where is the length of the parsed string and is the size of the CNF grammar This makes it one of the most efficient parsing algorithms in terms of worst case asymptotic complexity, although other algorithms exist with better average running time in many practical scenarios.
В информатике алгоритм Кокке — Янгер — Касами (также называемый CYK или CKY) — это алгоритм разбора для контекстно-свободных грамматик, опубликованный Итиро Сакаи в 1961 году. Алгоритм назван в честь некоторых из тех, кто его заново открыл: Джона Кокка, Дэниела Янгер, Тадао Касами и Джейкоба Т. Шварца. Он использует восходящий разбор и динамическое программирование. Стандартная версия CYK работает только с контекстно-свободными грамматиками, представленными в нормальной форме Чомского (CNF). Однако любая контекстно-свободная грамматика может быть алгоритмически преобразована в грамматику CNF, выражающую тот же язык.
In computer science, the Cocke–Younger–Kasami algorithm (alternatively called CYK, or CKY) is a parsing algorithm for context free grammars published by Itiroo Sakai in 1961. The algorithm is named after some of its rediscoverers: John Cocke, Daniel Younger, Tadao Kasami, and Jacob T. Schwartz. It employs bottom up parsing and dynamic programming. The standard version of CYK operates only on context free grammars given in Chomsky normal form (CNF). However any context free grammar may be algorithmically transformed into a CNF grammar expressing the same language
The importance of the CYK algorithm stems from its high efficiency in certain situations. Using big O notation, the worst case running time of CYK is , where is the length of the parsed string and is the size of the CNF grammar This makes it one of the most efficient parsing algorithms in terms of worst case asymptotic complexity, although other algorithms exist with better average running time in many practical scenarios.
Важность алгоритма CYK обусловлена его высокой эффективностью в определенных ситуациях. Используя нотацию «большое O», наихудшее время выполнения CYK составляет , где — длина разбираемой строки, а — размер грамматики CNF. Это делает его одним из наиболее эффективных алгоритмов разбора с точки зрения асимптотической сложности в наихудшем случае, хотя существуют и другие алгоритмы с лучшим средним временем выполнения во многих практических сценариях.
In computer science, the Cocke–Younger–Kasami algorithm (alternatively called CYK, or CKY) is a parsing algorithm for context free grammars published by Itiroo Sakai in 1961. The algorithm is named after some of its rediscoverers: John Cocke, Daniel Younger, Tadao Kasami, and Jacob T. Schwartz. It employs bottom up parsing and dynamic programming. The standard version of CYK operates only on context free grammars given in Chomsky normal form (CNF). However any context free grammar may be algorithmically transformed into a CNF grammar expressing the same language
The importance of the CYK algorithm stems from its high efficiency in certain situations. Using big O notation, the worst case running time of CYK is , where is the length of the parsed string and is the size of the CNF grammar This makes it one of the most efficient parsing algorithms in terms of worst case asymptotic complexity, although other algorithms exist with better average running time in many practical scenarios.
Стандартная форма
Алгоритм динамического программирования требует приведения контекстно-свободной грамматики к нормальной форме Чомски (CNF), поскольку он проверяет возможность разбиения текущей последовательности на две подпоследовательности. Любая контекстно-свободная грамматика, не порождающая пустую строку, может быть представлена в CNF, используя только правила вывода вида , , и , где – стартовый символ.
В прозе
В неформальном изложении, этот алгоритм рассматривает каждую возможную подстроку входной строки и устанавливает значение "истина", если подстрока длины, начинающаяся с позиции, может быть сгенерирована из нетерминала. После рассмотрения подстрок длины 1, он переходит к подстрокам длины 2 и так далее. Для подстрок длиной 2 и более, он рассматривает каждый возможный способ разбиения подстроки на две части и проверяет, существует ли правило продукции, такое что левая часть правила совпадает с первой частью подстроки, а правая часть – со второй. Если это так, он отмечает, что правило продукции соответствует всей подстроке. После завершения этого процесса, входная строка генерируется грамматикой, если подстрока, содержащая всю входную строку, соответствует стартовому символу.
Создание дерева анализа
Вышеописанный алгоритм является распознавателем, который определяет лишь принадлежность предложения к данному языку. Его можно легко расширить до парсера, строящего дерево разбора, сохраняя узлы дерева разбора в качестве элементов массива вместо логической единицы (1). Узел связывается с элементами массива, которые использовались для его построения, таким образом формируя древовидную структуру. Если требуется построить только одно дерево разбора, в каждом элементе массива достаточно одного такого узла. Однако, если необходимо сохранить все деревья разбора для неоднозначного предложения, в элементе массива следует хранить список всех возможных способов получения соответствующего узла в процессе парсинга. Для этого иногда используется дополнительная таблица B[n,n,r], содержащая так называемые обратные указатели. В результате получается общий лес возможных деревьев разбора, где общие части деревьев используются повторно для различных вариантов разбора. Этот общий лес можно рассматривать как неоднозначную грамматику, генерирующую только разобранное предложение, но с той же неоднозначностью, что и исходная грамматика, и с теми же деревьями разбора, за исключением простого переименования нетерминалов, как показано в .
Анализ неконтекстных грамматических систем
Как отмечает , недостатком всех известных преобразований в нормальную форму Чомского является то, что они могут привести к нежелательному увеличению размера грамматики. Размер грамматики определяется как сумма размеров её правил вывода, где размер правила равен единице плюс длина его правой части. Обозначая размер исходной грамматики как , увеличение размера в худшем случае может варьироваться от до , в зависимости от используемого алгоритма преобразования. Для использования в обучении Ланге и Лейс предлагают незначительное обобщение алгоритма CYK, "не снижая при этом эффективность алгоритма, ясность его изложения или простоту доказательств".
Анализ взвешенных грамматических знаков без контекста
Также можно расширить алгоритм CYK для разбора строк, использующих взвешенные и стохастические контекстно-свободные грамматики. Веса (вероятности) в этом случае хранятся в таблице P вместо булевых значений, поэтому P[i,j,A] будет содержать минимальный вес (максимальную вероятность) того, что подстрока от i до j может быть выведена из нетерминала A. Дальнейшие расширения алгоритма позволяют перечислять все варианты разбора строки в порядке возрастания веса (убывания вероятности).
Численная стабильность
Когда вероятностный алгоритм CYK применяется к длинной строке, вероятность разделения может стать очень малой из-за перемножения большого количества вероятностей. Эту проблему можно решить, суммируя логарифмы вероятностей вместо перемножения самих вероятностей.
Алгоритм Валианта
В худшем случае время работы алгоритма CYK составляет , где n — длина разбираемой строки, а |G| — размер грамматики в форме нормального представления (CNF) G. Это делает его одним из наиболее эффективных алгоритмов для распознавания общих контекстно-свободных языков на практике. предложил расширение алгоритма CYK. Его алгоритм вычисляет ту же таблицу разбора, что и алгоритм CYK, однако он показал, что для выполнения этого вычисления можно использовать алгоритмы эффективного умножения матриц, состоящих из 0 и 1. Применение алгоритма Копперсмита — Винограда для умножения этих матриц дает асимптотическое время работы в худшем случае . Однако скрытая в нотации «Большое О» константа настолько велика, что алгоритм Копперсмита — Винограда целесообразен только для матриц, которые слишком велики для обработки на современных компьютерах, и этот подход требует вычитания, поэтому он подходит только для задачи распознавания. Зависимость от эффективного умножения матриц нельзя полностью избежать: доказал, что любой анализатор для контекстно-свободных грамматик, работающий за время , может быть эффективно преобразован в алгоритм вычисления произведения матриц с элементами 0 и 1 за время , а Abboud и др. расширили это утверждение на грамматики постоянного размера.
as the CYK algorithm; yet he showed that algorithms for efficient multiplication of matrices with 0 1 entries can be utilized for performing this computation. Using the Coppersmith–Winograd algorithm for multiplying these matrices, this gives an asymptotic worst case running time of However, the constant term hidden by the Big O Notation is so large that the Coppersmith–Winograd algorithm is only worthwhile for matrices that are too large to handle on present day computers , and this approach requires subtraction and so is only suitable for recognition. The dependence on efficient matrix multiplication cannot be avoided altogether: has proved that any parser for context free grammars working in time can be effectively converted into an algorithm computing the product of matrices with 0 1 entries in time , and this was extended by Abboud et al. to apply to a constant size grammar.