2013-04-15 13 views
5

私はCYK algorithmについて読んでいましたが、理解できない擬似コードの部分があります。全体の擬似コードは次のとおりです。CYKアルゴリズムの擬似コードを理解できません

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 

誰かがこれらの擬似コードについていくつかのヒントを与えるだろうか?

+0

@ syb0rg:私は意図的にインデントを残して、コードの大きな塊からコードの小さなスニペットを見つける方が簡単です。 – nhahtdh

+0

@nhahtdh修正済み(習慣をフォーマットする、申し訳ありません)。 – syb0rg

+0

@ syb0rg:小さなコードスニペットの字下げは少しオフです(元のコードからコピーして貼り付けるだけで済みます)。 – nhahtdh

答えて

3

擬似各生産R について

→ R B R C

P [J、K、B]及びP [j + kの場合、IK 、C]をP [j、i、A] = trueとする。

以下のように解釈されるべきである。 P [j、k、B]が真であるとする。つまり、位置jで始まるk文字から形成された文字列は、非終端記号R Bに由来することができます。 P [j + k、i-k、C]が真である場合にも、位置j + kで始まるi-k文字から形成された文字列は、非終端記号R Cから得られる。したがって、R ため → R B R Cは、位置jから始まるI文字から形成された文字列がR に由来することができるケースの製造です。

は、私はそれが各生産R について

としてその擬似コードを解釈するのに役立つかもしれないと思う → R B R C

もしP [J、K、B] = trueとP [j + k、ik、C] == trueの場合、P [j、i、A] = trueを設定する。

これは役に立ちます。

+0

インデックスA BとCが何であるかを明確にすることはできますか? – user2280838

+0

@ user2280838-アルゴリズムは、非終端記号R_1、R_2、...、R_nのすべてに番号を付けます。ここで、A、B、およびCは、生産R_A→R_B R_Cにおける非終端記号のインデックスである。たとえば、生産がS→T UでSがインデックス1、Tがインデックス2、Uがインデックス3の場合、A = 1、B = 2、C = 3となります。 – templatetypedef

+0

これは役に立ちますが、非終端記号としてA BとCが文法で複数回定義されている場合はどうなりますか?他の非終端記号によって区別されるのに役立つID値のインデックスの種類の割り当てですか? – user2280838

関連する問題