Na verdade, a forma normal de Chomsky (CNF) não é necessária para executar o CYK, apenas a binarização. A binarização é essencial para preservar a complexidade cúbica da análise, embora essencial apenas em relação aos não terminais (NT). Porém, se você tiver regras incluindo apenas 2 não terminais e alguns terminais, o algoritmo CYK se tornará mais complexo para programar e explicar.
Como você diz, existem muitas maneiras de fazer a binarização. Alguns produzirão gramáticas menores que outros. Por exemplo
X -> B C D
Y -> B C E
pode ser binarizado como
X -> Z D
Y -> Z E
Z -> B C
economizando, assim, uma regra por fatoração, que pode economizar na computação e no tamanho do resultado.
Mas com outras regras, você pode querer fatorar o final das regras e não o começo.
Não estou familiarizado com o trabalho de Song, Ding e Lin , citado pela resposta de Rob Simmons . A idéia é interessante, mas eu me pergunto até que ponto ela pode ser comparada a outras maneiras de otimizar a computação. Eu não temo muito.
O ponto é que analisar os problemas apenas em relação a um algoritmo CKY puro parece um exercício acadêmico, mas caro, uma vez que existem outros tipos de otimização que podem melhorar significativamente a eliminação de análises de becos sem saída.
O CYK é apenas uma das variações mais simples de uma família de algoritmos que são todos criados no mesmo modelo de programação dinâmica, aparentemente. Estou dizendo aparentemente porque a versão mais simples desses algoritmos não é conhecida como programação dinâmica, mas como produto cruzado. É a antiga construção de uma gramática G de CF que gera a interseção entre a linguagem da gramática F e a linguagem regular de uma FSA A., devido a
Bar Hillel, Perles e Shamir (1961) , como observou Lang em 1995 .
Todo analisador de gráfico ou analisador de CF geral baseado em programação dinâmica pode ser visto como uma variante "otimizada" dessa construção de produtos cruzados, sendo a otimização usada principalmente para evitar cálculos inúteis do analisador. Mas o problema é sutil, pois evitar a computação inútil pode resultar na duplicação de outras úteis, o que pode ser pior.
Sendo de baixo para cima, o algoritmo CKY produz cálculos inúteis de análises parciais que não podem derivar do axioma da gramática.
Algoritmos como o analisador GLR (para citar um dos mais conhecidos, embora tenha sido publicada uma versão defeituosa), possuem algum conhecimento de cima para baixo que evitará muitos desses cálculos inúteis, possivelmente a custo. E existem muitas outras variantes com comportamento diferente em relação à economia em cálculos inúteis.
É com essas estratégias de otimização em mente que a estratégia de binarização deve ser analisada. Qual é o objetivo de otimizar o que pode ser um problema menor e ignorar técnicas mais poderosas.
A otimização do processo de análise também está intimamente ligada à "qualidade" da estrutura de análise obtida, que representa todos os possíveis análises e é frequentemente chamada de floresta de análise (compartilhada). Eu discuto isso em outra resposta .
Algumas dessas questões são discutidas na literatura. Por exemplo, por Billot e Lang analisam alguns aspectos da binarização com relação às estratégias de análise.