title: Problème de recherche
text: # 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^,^,:$
  
  * un ensemble d'états,
  * un état de départ,
  * un état-cible ou état-test,
  * une fonction booléenne qui permet de savoir un état donné est l'état-cible,
  * une fonction successeur,
  * 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.
  
  ## 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.
  