Περιττές καταστάσεις
Ένα πεπερασμένο αυτόματο μπορεί να έχει καταστάσεις, από τις οποίες δεν είναι δυνατό να φτάσουμε σε τελική κατάσταση και επομένως είναι άχρηστες. Τέτοιες καταστάσεις τις λέμε περιττές καταστάσεις. Συνήθως θέλουμε να τις αφαιρούμε, επειδή απλώς περιπλέκουν άσκοπα όλο το αυτόματο.
Παράδειγμα περιττών καταστάσεων
Έστω αυτό το πεπερασμένο αυτόματο:
Βλέπουμε ότι μόλις βρεθούμε στις καταστάσεις q4 ή q5, δεν θα καταφέρουμε ποτέ να φτάσουμε σε μία από τις τελικές καταστάσεις q1 ή q2. Τέτοιες καταστάσεις είναι λοιπόν περιττές και μπορούμε απλώς να τις αφαιρέσουμε, παίρνοντας έτσι ένα νέο αυτόματο, που όμως θα ήταν ισοδύναμο· θα αποδεχόταν την ίδια γλώσσα. Μετά τη διαγραφή των περιττών καταστάσεων το αυτόματο θα έμοιαζε ως εξής:
Θα αποδεχόταν μάλιστα την ίδια γλώσσα. Υπάρχουν όμως περιπτώσεις που είναι σκόπιμο να έχουμε κάποιες περιττές καταστάσεις – για παράδειγμα όταν κατασκευάζουμε πλήρες αυτόματο.
Ορισμός της περιττής κατάστασης
Έστω ένα πεπερασμένο αυτόματο A = ⟨Q, Σ, δ, q0, F⟩. Λέμε ότι μια κατάσταση q ∈ Q είναι περιττή, αν δεν υπάρχει καμία λέξη w ∈ Σ∗ και καμία κατάσταση qf ∈ F τέτοια ώστε
Πώς να αφαιρέσουμε τις περιττές καταστάσεις
Υποθέτουμε ότι στην είσοδο έχουμε αυτόματο A = ⟨Q, Σ, δ, q0, F⟩, που είναι ήδη χωρίς μη προσβάσιμες καταστάσεις. Θα βρίσκουμε σταδιακά τις καταστάσεις που οδηγούν σε τελικές καταστάσεις και μετά τις καταστάσεις που οδηγούν σε καταστάσεις που οδηγούν σε τελικές καταστάσεις και ούτω καθεξής. Έτσι παίρνουμε το σύνολο όλων των καταστάσεων που δεν είναι περιττές. Στην αρχή θέτουμε S0 = F. Θα κατασκευάζουμε τα επόμενα σύνολα Si για i ∈ ℕ∗ με αυτόν τον κανόνα:
Το τελικό σύνολο όλων των καταστάσεων που δεν είναι περιττές μπορούμε να το εκφράσουμε ως εξής:
Και το σύνολο των περιττών καταστάσεων ως
Με άλλα λόγια: αν ισχύει Si = Si + 1, τότε το σύνολο Q ∖ Si περιέχει τις περιττές καταστάσεις. Τη διαδικασία θα την παρουσιάσουμε σε αυτό το αυτόματο:
Πρώτα θέτουμε την ισότητα S0 = {q1, q2}. Στη συνέχεια κατασκευάζουμε το σύνολο S1 προσθέτοντας στο σύνολο S0 όλες τις καταστάσεις που οδηγούν σε μία από τις καταστάσεις του συνόλου S0. Προσθέτουμε έτσι τις καταστάσεις q0 και q3, επειδή από την q0 οδηγεί μετάβαση στην q1 και από την q3 οδηγεί μετάβαση στην q2. Παίρνουμε S1 = {q0, q1, q2, q3}. Επειδή S0 ≠ S1, συνεχίζουμε.
Κατασκευάζουμε το σύνολο S2. Ψάχνουμε λοιπόν όλες τις καταστάσεις από τις οποίες μπορούμε να φτάσουμε στο S1 και που δεν είναι ακόμη στο S1. Είναι μία μόνο, η q6, από την οποία μπορούμε να φτάσουμε στην κατάσταση q3. Παίρνουμε S2 = {q0, q1, q2, q3, q6}. Επειδή S1 ≠ S2, συνεχίζουμε.
Κατασκευάζουμε το σύνολο S3. Υπάρχει κάποια νέα κατάσταση, από την οποία μπορούμε να φτάσουμε σε κάποια από τις καταστάσεις του S2; Δεν υπάρχει, από τις καταστάσεις q4 και q5 δεν μπορούμε να φτάσουμε σε καμία από τις καταστάσεις του S2 και οι υπόλοιπες καταστάσεις είναι ήδη στο S2. Ισχύει λοιπόν S3 = {q0, q1, q2, q3, q6}. Επειδή S2 = S3, ο αλγόριθμος τελειώνει και το σύνολο S2 είναι το σύνολο των καταστάσεων που δεν είναι περιττές. Το σύνολο {q4, q5} είναι το σύνολο των καταστάσεων που είναι περιττές.
Τυπικά, το νέο ισοδύναμο αυτόματο χωρίς περιττές καταστάσεις κατασκευάζεται ως εξής. Έχουμε το αυτόματο A = ⟨Q, Σ, δ, q0, F⟩ και κατασκευάζουμε γι' αυτό ένα ισοδύναμο αυτόματο A′ = ⟨Q′, Σ, δ′, q0, F⟩ χωρίς περιττές καταστάσεις.
- ∀q ∈ Q′, a ∈ Σ: δ′(q, a) = δ(q, a), αν δ(q, a) ∈ Q′, αλλιώς το δ′(q, a) δεν ορίζεται
Πηγές
Κεφάλαια: Μη προσβάσιμες καταστάσεις, Περιττές καταστάσεις, Ελαχιστοποίηση αυτομάτου