Je recherche des applications pratiques des machines à états finis comme les machines DFA, NFA, Moore, Mealy ...
Il serait utile que quelqu'un pointe vers des exemples du noyau Linux. Je sais que DFA est utilisé dans la correspondance de chaînes comme l'algorithme KMP.
Quelle est la signification des machines NFA, Moore et Mealy?
Réponses:
Chaque fois que vous effectuez une recherche (en particulier une «recherche de modèle») dans votre éditeur / outil préféré, le modèle est traduit en une certaine forme de machine à états finis, qui fait la correspondance.
La partie analyse lexicale de votre compilateur / interprète (oui, même votre shell) est à nouveau un automate fini qui correspond aux mots clés et autres jetons reconnus par le langage.
Tout distributeur automatique est un automate fini qui accepte des pièces de différentes dénominations et reconnaît quand le montant correct a été entré (OK, les distributeurs automatiques d'aujourd'hui ont probablement un petit processeur à l'intérieur pour l'ajout, mais le résultat final est le même).
la source
(les concepts de) DFA / NFA ont des applications dans le domaine des compilateurs et dans la construction d'analyseurs. Ils sont également utilisés pour identifier des chaînes selon des expressions régulières (c'est-à-dire en recherchant des "modèles" sur le Web ou sur des bases de données)
Les machines Moore / Mealy sont des DFA qui sont également sortis à tout moment de l'horloge. Ceux-ci ont BEAUCOUP d'applications. En fait, tout processeur, ordinateur, téléphone portable, horloge numérique et même votre machine à laver ont une sorte de machine à états finis, qui le contrôle.
Je devrais peut-être préciser: tout "ordinateur" est essentiellement une machine à états finis.
la source
Une application majeure est la modélisation de systèmes. Essentiellement, les systèmes logiciels simples peuvent être modélisés comme des machines à états finis. (Par logiciel simple, j'entends des langues qui peuvent être représentées à l'aide d'expressions régulières). Il existe de nombreux systèmes "simples", les distributeurs automatiques en sont des exemples (comme indiqué par vzn).
En trouvant l'intersection de deux machines à états finis, vous pouvez concevoir de manière très simple des systèmes concurrents qui échangent des messages par exemple. Par exemple, le feu de circulation est un système qui se compose de plusieurs sous-systèmes (les différents feux de circulation) qui fonctionnent simultanément.
Jetez un œil à ces exemples: http://www.site.uottawa.ca/~bochmann/SEG-2106-2506/Notes/LTSA-examples/examples/
Vous aurez besoin d'un analyseur LTSA pour exécuter ces exemples. http://www.doc.ic.ac.uk/ltsa/
la source
Voici une très bonne référence en ligne sur les FSM et la théorie connexe, 75p, avec de nombreux diagrammes. a de nombreuses applications après la section de théorie du milieu, et aussi dans de nombreux exercices avec des exemples d'applications, par exemple p485:
ch12. Machines à états finis par Keller, Harvey Mudd college, CS60 textbook / CS, intro to abstraction
les applications sont extrêmement diverses. par exemple du livre:
sec 12.4 Constructions EE par exemple
Les FSM sont également utilisés dans la détection de la parole pour trouver des phonèmes , l'un des principaux points d'application de cette excellente bibliothèque en ligne qui contient plus de détails dans les pages de manuel et la documentation: bibliothèque FSM en ligne AT&T . voir la section "Bibliothèque FSM et applications de traitement de la parole" (qui répertorie également quelques "applications" plus abstraites / théoriques)
etc!
la source
J'utilise des machines d'état lors de l'écriture de pilotes de périphériques. Attention, les grosses machines à états peuvent devenir lourdes. Pensez à utiliser cet ensemble de macros ( https://www.codeproject.com/Articles/37037/Macros-to-simulate-multi-tasking-blocking-code-at)… de cette façon, les transitions deviennent si simples que vous ne le faites pas même besoin d'un diagramme d'état. En effet, les macros vous permettent d'écrire le code de votre machine d'état comme s'il s'agissait d'un code structuré. J'ai écrit la bibliothèque d'émetteurs-récepteurs de Cisco pour le Nexus 7000 en utilisant ces macros.
la source
En pratique, vous la verrez explicitement comme une variable d'état entière (généralement appelée «état») qui représente une machine à états très grossière représentant les actions pouvant être appelées par l'utilisateur d'un objet. Il s'agit généralement d'une énumération avec des valeurs telles que: {non initialisé, initialisé, ..., arrêté}. Les machines à états sont souvent explicites lors de l'analyse des données et seront signifiées par une instruction switch dans une boucle while où en haut de la boucle, le caractère suivant est obtenu. En particulier, si l'analyse a une grammaire régulière, un FSM exact sans autres fonctionnalités est souvent utilisé. Si vous êtes dans un langage qui prend en charge les appels de queue, les FSM sont généralement présentés par récursivité mutuelle (ce qui peut faire lire le code comme une spécification de pseudocode très claire). Une fonctionnalité très utile d'un FSM est la possibilité de fonctionner simultanément car il vous suffit de vous souvenir de l'état actuel, plutôt que d'une pile d'exécution entière. (ie: changement de contexte entre des millions d'instances de machines d'état).
la source