2013-04-15 14 views
5

Tôi đã đọc về số CYK algorithm và có một phần của mã giả tôi không thể hiểu được. Toàn bộ giả là:Không thể hiểu mã giả 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 

Những bộ phận được mà tôi đang bối rối:

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 

một người nào đó sẽ đưa ra một số gợi ý về những giả?

+0

@ syb0rg: Tôi cố ý rời khỏi thụt đầu dòng, để dễ dàng xác định đoạn mã nhỏ hơn từ đoạn mã lớn. – nhahtdh

+0

@nhahtdh Đã sửa lỗi (định dạng thói quen, xin lỗi). – syb0rg

+0

@ syb0rg: Thụt lề của đoạn mã nhỏ hơn là một chút tắt (bạn chỉ có thể sao chép và dán từ mã gốc). – nhahtdh

Trả lời

3

Các giả

Đối với mỗi R sản xuất Một → R B R C:

nếu P [j, k, B] và P [j + k, ik , C] rồi đặt P [j, i, A] = true

Cần được diễn giải theo cách sau. Giả sử rằng đó là trường hợp P [j, k, B] là đúng. Điều đó có nghĩa là chuỗi được tạo thành từ các ký tự k bắt đầu từ vị trí j có thể bắt nguồn từ không có R B. Nếu đó cũng là trường hợp P [j + k, i - k, C] là đúng, thì chuỗi được hình thành từ các ký tự i - k bắt đầu từ vị trí j + k có thể được lấy từ không có chữ R C. Do đó, kể từ R Một → R B R C là một sản xuất, đó là trường hợp đó các chuỗi hình thành từ các nhân vật tôi bắt đầu ở vị trí j có thể được bắt nguồn từ R Một.

tôi nghĩ rằng nó có thể giúp giải thích rằng giả như

Đối với mỗi R sản xuất Một → R B R C:

nếu P [j, k, B] == true và P [j + k, ik, C] == true, sau đó thiết lập P [j, i, A] = true

Hope this helps!

+0

Bạn có thể làm rõ các chỉ số A B và C là gì không?? – user2280838

+0

@ user2280838- Thuật toán đánh số tất cả các chỉ số R_1, R_2, ..., R_n. Ở đây, A, B, và C xảy ra là các chỉ số của các nonterminals trong sản xuất R_A -> R_B R_C. Ví dụ, nếu việc sản xuất là S -> T U và S có chỉ số 1, T có chỉ số 2 và U có chỉ số 3, thì chúng ta sẽ có A = 1, B = 2 và C = 3. Điều đó có giúp ích gì không? – templatetypedef

+0

Nó sẽ giúp ích gì nhưng nếu A B và C như các thiết bị đầu cuối không được định nghĩa nhiều hơn một lần trong ngữ pháp? Việc gán phân loại chỉ mục của một giá trị ID có giúp phân biệt nó với các nontermin khác không? – user2280838