Problème de recherche

En informatique théorique, et plus particulièrement en théorie de la complexité et en théorie de la calculabilité, un problème de recherche est un problème algorithmique associé à une relation binaire. Si R est une relation binaire telle que pour tout (R) ⊆ Γ+ et T une machine de Turing, alors T implante R si:

  • Si x est tel qu'il existe un y vérifiant R(x, y) alors T accepte l'entrée x en produisant un résultat  z tel que  R(x, z) (s'il y a plusieurs  y, T n'est astreint à n'en trouver qu'un seul)
  • Si x est tel qu'il n'existe aucune  y tel que R(x, y) alors T rejette l'entrée x

De manière intuitive, un problème de recherche consiste à trouver, s'il existe, un objet "y" associé à un objet "x". On considère qu'un algorithme résout le problème si pour tout x, pour lequel un résultat existe, une occurrence est produite en résultat.

De tels problèmes se rencontrent fréquemment en théorie des graphes, en cherchant par exemple certains couplage, cliques, ensemble indépendant, etc.

À noter que le graphe d'une fonction est une relation binaire.

Toute relation R peut être vue comme un problème de recherche et on dit qu'une machine de Turing qui implante R résout le problème de recherche. Tout  problème de décision est la restriction d'un problème de recherche qui consiste à assimiler "oui" à "un résultat existe" et "non" à "aucun résultat n'existe": 

La définition d'un problème de recherche peut être généralisée à des relations n-aires en utilisant un encodage adéquat.

Définition

Un problème de recherche est défini par[1],[2],[3]:

une fonction booléenne qui permet de savoir un état donné est l'état-cible
une application d'un état vers l'ensemble des états possibles

Objectif

Trouver une solution lorsqu’un algorithme n'est pas fourni, mais lorsqu'on a que la spécification de la solution[4].

Méthode de recherche

  • algorithme de recherche générique: soit un graphe, un ensemble de nœuds de départ, et de nœuds d'arrivée, on explore de manière incrémentale les chemins du graphe depuis les nœuds de départ.
  • Maintenir une liste de chemin "frontière" depuis les nœuds de départ qui ont déjà été explorés.
  • Au fur et à mesure, la frontière s’étend aux nœuds non explorés jusqu'à ce qu'un état cible soit trouvé.
  • La façon dont la frontière s'étend dépend du choix de la stratégie de recherche[4].
   Entrée: un graphe,
       un ensemble d'états de départ,
       Une fonction booléenne goal(n) qui renvoie si n est un état cible.
   frontière := {s : s est un nœud de départ};
   Tant que frontière n'est pas vide:
       sélectionner et retirer le chemin <n0, ..., nk> de la frontière;
       Si goal(nk)
           renvoyer <n0, ..., nk>;
       Pour tous les voisins n de nk
           rajouter <n0, ..., nk, n> à la frontière;
   Fin Tant que

Notes et références

  1. Kevin Leyton-Brown, « Graph Search »
  2. State-Space Search: Algorithms, Complexity, Extensions, and Applications, Weixiong Zhang
  3. Theoretical Aspects of Local Search, Wil Michiels, Emile Aarts,Jan Korst
  4. Kevin Leyton-Brown, « Graph Search », ubc (consulté le )

Voir aussi

  • Portail de l'informatique théorique
Cet article est issu de Wikipedia. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.