Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Trình biên dịch] Số trạng thái DFA sau xác định hoá

    Bước xác định hoá (subset construction, hay powerset construction) biến một ε\varepsilonε-NFA thành DFA tương đương, trong đó mỗi trạng thái DFA tương ứng với một tập con trạng thái của NFA.

    Cho một ε\varepsilonε-NFA có nnn trạng thái đánh số từ 000 đến n−1n-1n−1 và mmm cạnh chuyển (mỗi cạnh dạng (u,v,c)(u,v,c)(u,v,c), với ccc là một ký hiệu, hoặc chữ E cho chuyển epsilon), và trạng thái bắt đầu sss. Thực hiện subset construction như sau: trạng thái DFA đầu tiên là D0=closure({s})D_0 = \text{closure}(\{s\})D0​=closure({s}) (bao đóng epsilon của {s}\{s\}{s}). Với mỗi trạng thái DFA DDD đã sinh ra và mỗi ký hiệu ccc (không tính E) từng xuất hiện trong đồ thị NFA, tính

    D′=closure(⋃u∈D{v:(u,v,c) laˋ một cạnh}).D' = \text{closure}\Big(\bigcup_{u \in D} \{ v : (u,v,c) \text{ là một cạnh}\}\Big).D′=closure(⋃u∈D​{v:(u,v,c) laˋ một cạnh}).

    Nếu D′D'D′ khác rỗng và chưa từng xuất hiện trước đó, D′D'D′ trở thành một trạng thái DFA mới. Quá trình lặp lại cho đến khi không còn trạng thái DFA mới nào được sinh ra.

    Hãy đếm số trạng thái DFA có thể đến được (kể cả D0D_0D0​), không tính trạng thái bẫy ứng với tập rỗng (khi D′=∅D' = \emptysetD′=∅ thì không có chuyển nào được tạo ra tại DDD ứng với ccc đó, và trạng thái này không được tính vào kết quả).

    Ví dụ: NFA có n=2n=2n=2 trạng thái, một cạnh (0,1,a)(0,1,a)(0,1,a), bắt đầu từ s=0s=0s=0. Ta có D0={0}D_0=\{0\}D0​={0}; xét ký hiệu a: từ D0D_0D0​ ta được D1={1}D_1=\{1\}D1​={1}, thêm vào; từ D1D_1D1​ không có chuyển a nào (vì {1}\{1\}{1} không có cạnh đi ra) nên dừng. Tổng cộng có 222 trạng thái DFA: D0D_0D0​ và D1D_1D1​.

    • Định dạng đầu vào:

      Dòng 1: hai số nguyên nnn và mmm.

      mmm dòng tiếp theo, mỗi dòng ba giá trị uuu, vvv, ccc (0≤u,v<n0 \le u,v < n0≤u,v<n; ccc là một ký hiệu, hoặc chữ E cho epsilon).

      Dòng cuối cùng là một số nguyên sss (0≤s<n0 \le s < n0≤s<n) — trạng thái bắt đầu của NFA.

    • Định dạng đầu ra:

      In ra một số nguyên duy nhất là số trạng thái DFA có thể đến được sau khi thực hiện subset construction (không tính trạng thái bẫy tập rỗng).

      Với ví dụ ở trên, kết quả in ra là:

      2
      

    Ví dụ:

    Đầu vào:

    2 1
    0 1 a
    0
    

    Đầu ra:

    2
    

    Đầu vào:

    1 0
    0
    

    Đầu ra:

    1
    

    Đang tải editor...