Endlicher Automat in c++, Der Zustand
Ein endlicher Automat besteht aus einem Eingabealphabet, Eine Menge von Zuständen, sowie eingehende- und/oder ausgehende Kanten zwischen den einzelnen Zuständen. Diese Kanten werden auch als Zustandsübergänge bezeichnet.
In der Theoretischen Informatik werden diese Maschinen verwendet, um zu prüfen ob ein gegebenes Wort gültig ist. Also ob durch die einzelnen Zustandsübergänge alle Buchstaben eines Wortes erreicht werden können.
In diesem Beitrag wird mithilfe der Programmiersprache c++ die Zustandsklasse State erstellt, die einen Zustand (condition) und demnächst Ein- und Ausgehende Kanten beinhaltet (incoming, outgoing).
Ein Zustand stellt die Basis eines endlichen Automaten dar und dient als Grundlage für die nächsten Beiträge.
Hier werden als Beispiel zwei Zustände A und B erstellt ohne Zustandsübergänge. Doch das wird sich noch ändern, denn wir wollen ja prüfen können, ob ein gegebenes Wort gültig ist.
#include <iostream>
#include <vector>
class State {
private:
std::string _condition;
std::vector<State> _incoming, _outgoing;
public:
State(std::string condition) : _condition(condition) {
_incoming = std::vector<State>();
_outgoing = std::vector<State>();
}
void addIncomingEdge(State& state){
_incoming.push_back(state);
}
void addOutgoingEdge(State& state){
_outgoing.push_back(state);
}
std::string getCondition() const {
return _condition;
}
std::vector<State> getIncomingEdges() const {
return _incoming;
}
std::vector<State> getOutgoingEdges() const {
return _outgoing;
}
};
int main(){
State s1 = State("A");
State s2 = State("B");
}
Klingt interessant, obwohl ich keine Ahnung habe.