Đề bài:Viết chương trình loại bỏ ký hiệu vô sinh ?
input: văn phạm phi ngữ cảnh có ký hiệu vô sinh
output: văn phạm phi ngữ cảnh không còn ký hiệu vô sinh
Mong mọi người giúp em!
Hỏi về code loại bỏ ký hiệu vô sinh trong văn phạm phi ngữ cảnh?
“Kí hiệu vô sinh”. Đề nghị giải thích ý nghĩa.
kí hiệu vô sinh là gì vậy bạn. Google dịch ra hay sao ấy nhỉ
https://www.sanfoundry.com/automata-theory-cfg-eliminating-useless-symbols/ ?
Useless symbols có 2 loại:
- Như vòng lặp vô tận
- Ko thể dẫn xuất ra được
Là kí hiệu mà từ nó không dẫn ra chuỗi ký hiệu kết thúc cũng như không được dẫn ra từ kí hiệu bắt đầu văn phạm.
Cho mình xin mẫu 1 sentence có ký hiệu này xem nào, nhớ bôi đỏ nó lên nhé.
Nếu đề là English bạn cứ post nguyên văn, nhiều lúc bạn giải thích tiếng Việt nó còn tối nghĩa hơn ấy.
Xét văn phạm có các luật sinh sau:
S \rightarrow AB \: | \: a \: | \: b
A \rightarrow a
Áp dụng bổ đề 1, ta thấy không có ký hiệu kết thúc được nào dẫn ra từ B nên ta loại bỏ B và luật sinh S \rightarrow AB. Tiếp tục, áp dụng bổ đề 2 cho văn phạm:
S \rightarrow a \: | \: b
A \rightarrow a
Ta thấy chỉ có S xuất hiện trong dạng câu. Vậy ({S}, {a}, {S \rightarrow a}, S) là văn phạm tương đương với văn phạm đã cho và không có ký hiệu vô ích.
BỔ ĐỀ 2: (Dùng loại bỏ các biến không được dẫn ra từ ký hiệu bắt đầu văn phạm)
Nếu G (V, T, P, S) là CFG thì ta có thể tìm được CFG G’ (V’, T’, P’, S) tương
đương sao cho mỗi X \in V’ \cup T’ tồn tại \alpha, \beta \in (V’ \cup T’)^* để S \Rightarrow^* \alpha X \beta.Chứng minh:
Tập V’ \cup T’ gồm các ký hiệu xuất hiện trong dạng câu của G được xây dựng bởi giải thuật lặp như sau:
- Đặt V’ = {S}; T’ = \emptyset;
- Nếu A \in V’ và A \rightarrow \alpha_1 \: | \: \alpha_2 \: | \dots | \: \alpha_n là các luật sinh trong P thì thêm tất cả các biến của \alpha_1, \alpha_2, \dots , \alpha_n vào V’ và các ký hiệu kết thúc của \alpha_1, \alpha_2, \dots, \alpha_n vào T’.
- Lặp lại giải thuật cho đến khi không còn biến hoặc ký hiệu kết thúc nào được
thêm vào nữa.Dễ thấy, X \in V’ \cup T’ thì tồn tại \alpha, \beta \in (V’ \cup T’)^* để S \Rightarrow^* \alpha X \beta, trong đó P’ là tập hợp tất cả các luật sinh của P chỉ chứa các ký hiệu thuộc (V’ \cup T’).
Ta dễ dàng chứng minh L(G’) = L(G) .