Automates finis et langages
Un algorithme est réalisé dans le but de résoudre un problème. Nous commençons donc logiquement par introduire une formalisation des problèmes en terme de langages, puis nous formalisons la notion d'algorithme par les automates finis.
Formalisation de la notion de problème
Les seuls problèmes abordés ici seront les problèmes de décision
. Ceux ci
admettent uniquement 2 réponses : oui noté ou non noté
.
Nous définissons alors une instance
d'un problème de décision qui pose la
question pour un élément particulier de . Tout instance admet une
réponse, qui est positive lorsque et négative lorsque
.
En informatique, il existe d'autres problèmes d'intérêt que les problèmes de décision. Cependant, tout problème peut s'exprimer sous la forme d'un problème de décision. Cette approche permet de définir une théorie du calcul dans un cadre simple et unique. C'est pourquoi nous nous plaçons dans ce cadre.
La notion de problèmes est indépendante de la notion d'algorithme. Un algorithme peut résoudre un problème, mais il ne le définit pas. Par ailleurs, un problème solvable l'est généralement par plusieurs algorithmes.
Les langages
Un algorithme est déterminé pour résoudre un problème donné. Cependant, tout question qui lui est soumise est une instance de ce problème. Il est donc nécessaire de disposer d'un encodage des instances de problèmes afin de les fourni aux algorithmes. D'une façon générale, une instance d'un problème est représentée par une séquence de symboles.
Un alphabet
est un ensemble fini et non vide de symboles, un alphabet
est généralement désigné par
Un mot
sur un alphabet est une séquence finie de symboles de
La longueur
d'un mot avec est définie par