Cerca exhaustiva

La cerca exhaustiva és un mètode de disseny d'algorismes que consisteix en mirar-se sistemàtica i intel·ligentment totes les possibles solucions a un problema donat.

Generalment els problemes que es resolen mitjançant aquesta tècnica són problemes d'optimització o combinatoris.

La tècnica consisteix en generar implícitament un arbre representant totes les possibles solucions i explorar-lo en profunditat, deixant de recórrer aquelles branques que corresponguin a «candidats a solució» que no compleixen les restriccions del problema donat. Nosaltres la veurem per backtracking.

Exemple. El problema de les «n» reines

Donat un tauler d'x caselles i  reines, cal situar-les de manera que no s'amenacin entre elles (segons les regles dels escacs). Vés aquí algunes opcions:

  1. Podem mirar totes les possibles configuracions i veure quines compleixen les restriccions del problema. Això són  combinacions; amb  això són  possibilitats.
  2. Podem limitar-nos a posar una única reina en cada línia. Això són  possibilitats; amb , .
  3. Podem posar una única reina en cada fila i columna. Això són  possibilitats; amb , .
  4. Podem posar una única reina en cada fila, columna i diagonal.

El problema amb aquestes propostes és que fins que no hem acabat de construir una configuració no es mira si les condicions es compleixen o no. Ja en podríem desestimar moltes mentre s'estan construint: utilitzem la tècnica del backtracking.

Una part important d'aquesta tècnica consisteix en determinar una manera per a representar les possibles configuracions (solucions) del problema. En el cas de les reines, ho farem amb una taula d' posicions, tal que  és la columna on va la reina i que al tauler anirà en .

Definim un vector -completable de la següent manera: sigui -completable, i . Les solucions al problema de les  reines són els vector -completables.

Observacions:

  1. (les dues darrers condicions cobreixen les diagonals).
  2. El vector ha de ser -completable i, a més, .
  3. Tots els vectors són -completables.
  4. Les solucions al problema són els vectors n-completables.
Exemple. El problema de la motxilla

«Una motxilla té lloc per a C unitats de pes. Tria d'entre  objectes amb pesos  i valor  la combinació d'objectes amb pes total inferior a C amb el valor màxim».