deterministic finite-state automaton
Főnév
deterministic finite-state automaton (tsz. deterministic finite-state automatons)
A Deterministic Finite-State Automaton (röviden: DFA, magyarul: determinista véges állapotú automata) egy formális modell, amely egy adott bemeneti karakterláncról (string) képes eldönteni, hogy az egy adott nyelvhez tartozik-e vagy sem. A DFA az automataelmélet egyik alapfogalma, és szoros kapcsolatban áll a reguláris nyelvekkel.
🧠 Alapgondolat
A DFA egy olyan gép, amely:
Minden pillanatban egy állapotban van, és egy adott bemeneti karakter alapján egyetlen következő állapotba lép tovább.
Nincs több választás — minden bemenetre egyértelmű, hogy mi történik.
🧾 Formális definíció
Egy DFA egy 5-ös tuple:
M = (Q, Σ, δ, q₀, F)
ahol:
| Jelölés | Jelentés |
|---|---|
Q |
Az összes állapot véges halmaza |
Σ |
A bemeneti ábécé (karakterek halmaza) |
δ |
Az átmenetfüggvény: δ(q, a) → q' |
q₀ |
A kezdőállapot, ahol indulunk |
F |
Az elfogadó állapotok halmaza (F ⊆ Q) |
🧮 Működési elv
- A gép indul az
q₀állapotból. - Egyesével beolvassa a bemenet karaktereit.
- Minden karakterre a
δfüggvény alapján lép egy másik állapotba. - Ha a bemenet végére érve egy elfogadó állapotban (
q ∈ F) van, akkor elfogadja a szót, különben elutasítja.
🔁 Példa
Nyelv: Minden szó, ami pontosan két darab a betűt tartalmaz (ábécé: {a, b})
DFA állapotok:
| Állapot | Jelentés |
|---|---|
q0 |
még nem láttunk a-t |
q1 |
láttunk 1 a-t |
q2 |
láttunk 2 a-t (elfogadó állapot) |
q3 |
több mint 2 a → elutasító állapot |
Átmenetek (δ):
| Állapot | bemenet | Következő állapot |
|---|---|---|
q0 |
a |
q1 |
q0 |
b |
q0 |
q1 |
a |
q2 |
q1 |
b |
q1 |
q2 |
a |
q3 |
q2 |
b |
q2 |
q3 |
a/b |
q3 |
Elfogadó állapot: q2
📦 Alkalmazások
| Terület | Példa |
|---|---|
| Fordítók | Lexikai elemzés (pl. tokenek felismerése) |
| Szövegfeldolgozás | Regex motorok mögött |
| Hálózatok | Protokoll-állapotok kezelése |
| Játékfejlesztés | NPC viselkedési logika modellezése |
| Digitális áramkörök | Szinkron automata viselkedésmodellezés |
✅ Tulajdonságai
| Tulajdonság | DFA |
|---|---|
| Determinisztikus? | ✅ Igen |
| Véges számú állapot? | ✅ Igen |
| Nondeterminizmust tartalmaz? | ❌ Nem |
| Átváltható reguláris kifejezésre? | ✅ Igen |
| Támogat üres átmenetet (ε)? | ❌ Nem |
| Átlagos futásidő | O(n), ahol n a bemenet hossza |
⚖️ DFA vs NFA
| Tulajdonság | DFA | NFA |
|---|---|---|
| Egyértelmű átmenet | ✅ | ❌ több lehetséges |
| Üres átmenet (ε) | ❌ | ✅ |
| Bonyolultság | Gyorsabb futás | Egyszerűbb tervezés |
| Átalakítható másikká | Igen | Igen |
Fontos: minden NFA-nak van megfelelő DFA-ja (bár lehet exponenciálisan több állapottal).
🧪 C++ vázlat – DFA osztály
class DFA {
int currentState;
unordered_map<int, unordered_map<char, int>> transition;
int startState;
unordered_set<int> acceptingStates;
public:
DFA(int start, unordered_set<int> accepting) : startState(start), currentState(start), acceptingStates(accepting) {}
void addTransition(int from, char input, int to) {
transition[from][input] = to;
}
bool run(const string& input) {
currentState = startState;
for (char c : input) {
if (transition[currentState].count(c) == 0) return false;
currentState = transition[currentState][c];
}
return acceptingStates.count(currentState) > 0;
}
};
✅ Összefoglalás
A DFA egy formális eszköz, amelyet reguláris nyelvek elfogadására használnak. Minden bemenetre determinált viselkedést mutat, így gyors és kiszámítható. Alkalmazása a számítástudomány és a nyelvfeldolgozás számos területén központi jelentőségű.
- deterministic finite-state automaton - Szótár.net (en-hu)
- deterministic finite-state automaton - Sztaki (en-hu)
- deterministic finite-state automaton - Merriam–Webster
- deterministic finite-state automaton - Cambridge
- deterministic finite-state automaton - WordNet
- deterministic finite-state automaton - Яндекс (en-ru)
- deterministic finite-state automaton - Google (en-hu)
- deterministic finite-state automaton - Wikidata
- deterministic finite-state automaton - Wikipédia (angol)