【发布时间】:2013-04-07 00:53:17
【问题描述】:
我正在阅读有关CYK algorithm 的信息,其中一部分伪代码我无法理解。整个伪代码是:
let the input be a string S consisting of n characters: a1 ... an.
let the grammar contain r nonterminal symbols R1 ... Rr.
This grammar contains the subset Rs which is the set of start symbols.
let P[n,n,r] be an array of booleans. Initialize all elements of P to false.
for each i = 1 to n
for each unit production Rj -> ai
set P[i,1,j] = true
for each i = 2 to n -- Length of span
for each j = 1 to n-i+1 -- Start of span
for each k = 1 to i-1 -- Partition of span
for each production RA -> RB RC
if P[j,k,B] and P[j+k,i-k,C] then set P[j,i,A] = true
if any of P[1,n,x] is true (x is iterated over the set s, where s are all the indices for Rs) then
S is member of language
else
S is not member of language
这些部分是我很困惑的:
for each production RA -> RB RC
if P[j,k,B] and P[j+k,i-k,C] then set P[j,i,A] = true
有人能提供一些关于这些伪代码的提示吗?
【问题讨论】:
-
@syb0rg:我故意留下缩进,以便更容易从大块代码中找到较小的sn-p代码。
-
@nhahtdh 已修复(格式化习惯,抱歉)。
-
@syb0rg:小代码sn-p的缩进有点不对(你可以从原始代码复制粘贴)。
标签: java algorithm parsing cyk