Algorithme de CYK

L'algorithme Cocke-Jeune-Kasami (CYK) (alternativement appelé le CKY) détermine si a la corde peut être produite par un donné la grammaire indépendante du contexte et, si oui, comment elle peut être produite. Ceci est connu comme analysant la corde. L'algorithme est un exemple de la programmation dynamique .

La version standard de CYK identifie des langues définies par des grammaires indépendantes du contexte écrites sous la forme normale (CNF) de Chomsky de . Puisque n'importe quelle grammaire indépendante du contexte peut être convertie en CNF sans trop de difficulté, CYK peut être employé pour identifier n'importe quelle langue sans contexte. Il est également possible de prolonger l'algorithme de CYK pour manipuler quelques grammaires indépendantes du contexte qui ne sont pas écrites dans CNF ; ceci peut être fait pour améliorer l'exécution, bien qu'au coût de rendre l'algorithme plus dur pour comprendre.

La complexité asymptotique de temps du de pire cas de CYK est le Θ (n3), où le n est la longueur de la corde analysée. Ceci lui fait un (en ces termes) des algorithmes les plus efficaces pour identifier n'importe quelle langue sans contexte. Cependant, il y a d'autres algorithmes qui exécuteront mieux pour certains sous-ensembles des langues sans contexte.

L'algorithme

L'algorithme de CYK est un fond de vers le haut d'algorithme de et est important théoriquement, puisqu'il peut employer pour montrer de manière constructive que le problème d'adhésion de pour des langues sans contexte est le que l'on peut décider.

L'algorithme de CYK pour le problème d'adhésion est comme suit : Le a laissé entrer la corde se composent des lettres du n , un de 1… un n de de . Le a laissé que la grammaire contiennent la borne et le non terminal r du r de du R du R 1 de symboles…. Cette grammaire contient le sous-ensemble Rs qui est l'ensemble de symboles de début. Le a laissé P être un choix de booleans. Initialiser tous les éléments de P à faux. pour chaque i = 1 à n pour chaque production d'unité de Rj - > ai, le réglé P = rectifient. pour chaque i = 2 à n -- Longueur d'envergure pour chaque j = 1 à n-i+1 -- Début d'envergure pour chaque k = 1 à i-1 -- Cloison d'envergure pour chaque production RA de - > RB RC si P et puis de P réglé P = rectifient Le si de P est vrai (x est réitéré au-dessus de l'ensemble s, où s sont tous les index pour Rs) La corde du alors est membre de langue La corde d'autre du n'est pas membre de langue

Officieusement

En termes sans cérémonie, cet algorithme considère chaque subsequence possible de l'ordre des mots et place P pour être vrai si le subsequence des mots à partir d'I de la longueur j peut être produit de Rk. Une fois qu'il a considéré des subsequences de la longueur 1, il continue aux subsequences de la longueur 2, et ainsi de suite. Les subsequences de la longueur 2 et plus grand, il considère chaque cloison possible du subsequence dans deux parts, et vérifie pour voir s'il y a un certain → Q R de la production P tels que Q assortit la première partie et R assortit la deuxième cloison. Si oui, il enregistre P en tant qu'assortiment du subsequence entier. Une fois que ce processus est complété, la phrase est identifiée par la grammaire si le subsequence contenant la phrase entière est assorti par le symbole de début.

Prolongation d'algorithme

Il est simple de prolonger l'algorithme ci-dessus pour déterminer non seulement si une phrase est dans une langue, mais pour construire également un analyser l'arbre , par le stockage des noeuds de l'arborescence soumise à une analyse comme éléments de la rangée, au lieu des booleans. Depuis les grammaires étant reconnues peut être ambigu, il est nécessaire de stocker une liste de noeuds (à moins qu'on souhaite sélectionner seulement un possible analysent l'arbre) ; le résultat final est alors une forêt de possible analysent des arbres. Une formulation alternative utilise une deuxième table B des soi-disant backpointers de .

Il est également possible de prolonger l'algorithme de CYK pour analyser des cordes using pesé par et des grammaires indépendantes du contexte stochastiques de des poids que de (probabilités) sont alors stockés dans la table P au lieu des booleans, ainsi P contiendra le poids minimum (probabilité maximum) que la sous-chaîne d'I à j peut être dérivé de l'A. D'autres prolongements de l'algorithme laissent tous analyse d'une corde à énumérer de le plus bas au poids le plus élevé (le plus haut à la plus basse probabilité).

Voir également

Analyseur d'Earley de
Analyseur de Packrat de

.

Random links:Xavière Tiberi | Je veux tenir votre main | Acianthus | Tockington | Passage de monarque | Algoritmo_de_CYK