En fait, la forme normale de Chomsky (CNF) n'est pas nécessaire pour exécuter CYK, seulement une binarisation. La binarisation est essentielle pour préserver la complexité cubique de l'analyse, bien qu'elle ne soit essentielle qu'en ce qui concerne les non-terminaux (NT). Mais alors, si vous avez des règles comprenant seulement 2 non-terminaux et certains terminaux, l'algorithme CYK devient plus complexe à programmer et à expliquer.
Comme vous le dites, il existe de nombreuses façons de procéder à la binarisation. Certains donneront des grammaires plus petites que d'autres. Par exemple
X -> B C D
Y -> B C E
peut être binarisé comme
X -> Z D
Y -> Z E
Z -> B C
économisant ainsi une règle par factorisation, ce qui peut économiser sur le calcul et sur sa taille de résultat.
Mais avec d'autres règles, vous souhaiterez peut-être factoriser la fin des règles plutôt que le début.
Je ne connais pas le travail de Song, Ding et Lin , cité par la réponse de Rob Simmons . L'idée est intéressante mais je me demande dans quelle mesure elle peut être comparée à d'autres moyens d'optimiser le calcul. Je ne crains pas tellement.
Le fait est que l'analyse des problèmes uniquement par rapport à un algorithme CKY pur semble un exercice un peu académique mais coûteux, car il existe d'autres types d'optimisation qui peuvent considérablement améliorer l'élimination des analyses sans issue.
CYK n'est qu'une des variantes les plus simples d'une famille d'algorithmes qui sont tous construits sur le même modèle de programmation dynamique, apparemment. Je dis apparemment parce que la version la plus simple de ces algorithmes n'est pas connue comme programmation dynamique, mais comme produit croisé. C'est l'ancienne construction d'une grammaire CF G qui génère l'intersection du langage de la grammaire CF F et du langage régulier d'un FSA A., due à
Bar Hillel, Perles et Shamir (1961) , comme l'a fait remarquer Lang en 1995 .
Tous les analyseurs graphiques ou les analyseurs CF généraux basés sur une programmation dynamique peuvent être considérés comme une variante "optimisée" de cette construction multi-produits, l'optimisation étant principalement utilisée pour éviter des calculs inutiles de l'analyseur. Mais le problème est subtil car éviter les calculs inutiles peut entraîner la duplication de ceux utiles, ce qui peut être pire.
De bas en haut, l'algorithme CKY produit des calculs inutiles d'analyses partielles qui ne peuvent pas dériver de l'axiome de la grammaire.
Des algorithmes comme l' analyseur GLR (pour n'en nommer que l'un des plus connus, bien qu'une version imparfaite ait été publiée), ont des connaissances descendantes qui éviteront de nombreux calculs inutiles de ce type, éventuellement à un coût. Et il existe de nombreuses autres variantes avec un comportement différent en ce qui concerne les économies sur les calculs inutiles.
C'est avec ces stratégies d'optimisation à l'esprit que la stratégie de binarisation doit être analysée. Quel est l'intérêt d'optimiser ce qui peut être un problème mineur et d'ignorer les techniques plus puissantes.
L'optimisation du processus d'analyse est également étroitement liée à la «qualité» de la structure d'analyse obtenue, qui représente toutes les analyses possibles, et est souvent appelée forêt d'analyse (partagée). J'en discute dans une autre réponse .
Certaines de ces questions sont discutées dans la littérature. Par exemple, Billot et Lang analysent certains aspects de la binarisation en ce qui concerne les stratégies d'analyse.