CYK算法CYK算法(英語:Cocke–Younger–Kasami algorithm,縮寫為CYK algorithm)是由約翰·科克,Younger和嵩忠雄共同研究出来大约发表于1965年的一个算法,它是一个用来判定任意给定的字符串 是否属于一个上下文无关文法的算法。普通的回溯法(backtracking)在最坏的情况下需要指数时间才能解决这样的问题,而CYK算法只需要多项式时间就够了( , n 为字符串 w 的长度)。CYK算法采用了动态规划的思想。 对于一个任意给定的上下文无关文法,都可以使用CYK算法来计算上述问题,但首先要将该文法转换成乔姆斯基范式。 相关参数定义
算法描述简介通过由下而上的方法计算 这个集合,如果 ,那么就说明 是被上下文无关文法 接受的字符串。 因为 是一个乔姆斯基范式,当且仅当有下面描述的情况时 :
伪代码FOR i:= 1 TO n DO FOR l:= 1 TO n-1 FOR i:= 1 TO n-l DO FOR k:= i TO i+l-1 DO IF THEN accept ELSE reject 扩展CYK算法简介对于上述CYK算法作一个小改动,也就是说记住每次的k,就可以自动产生一个由该上下文无关语言的推导树。 伪代码FOR i:= 1 TO n DO FOR l:= 1 TO n-1 FOR i:= 1 TO n-l DO FOR k:= i TO i+l-1 DO IF THEN accept ELSE reject 通过对下面的方法递归运行就可以生成推导树。 Tree(X,i,j): IF i=j THEN RETURN 选择一个 k 使 选择 Y 和 Z 使 RETURN Tree(X,Tree(Y,i,k),Tree(Z,k+1,j)) 例子给定一个乔姆斯基范式的上下文无关文法 ,其中规则 P 如下: 问:字符串 bbabaa 能不能通过该文法产生? CYK算法可以通过一个表格来运算,表中 i 列 j 行表示由哪几个非终结符可以产生字字符串 。
如果在表格的最左下角一格中有文法的开始非终结符 S ,那么字符串 bbabaa 就能由上面给出文法 G 产生。 参考文献
外部链接 |
Index:
pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve
Portal di Ensiklopedia Dunia