Quantcast
Channel: RainCT – eurion.net
Viewing all articles
Browse latest Browse all 23

Apunts d’Estructures de Dades i Algorismes: Cerca exhaustiva

$
0
0

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'\(n\)x\(n\) caselles i \(n\) 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 \(n^2 \choose n\) combinacions; amb \(n=8\) això són \({64 \choose 8} = 4426165368\) possibilitats.
  2. Podem limitar-nos a posar una única reina en cada línia. Això són \(n^n\) possibilitats; amb \(n=8\), \(8^8 = 16777216\).
  3. Podem posar una única reina en cada fila i columna. Això són \(n!\) possibilitats; amb \(n=8\), \(8! = 40320\).
  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'\(n\) posicions, tal que \(v[i]\) és la columna on va la reina i que al tauler anirà en \((i, v[i])\).

Definim un vector \(k\)-completable de la següent manera: sigui \((k-1)\)-completable, i \(\forall i\ tal\ que\ 1 \le i \le k-1, v[i] \ne v[k], i + v[i] \ne k + v[k], n – v[i] + i \ne n – v[k] + k\). Les solucions al problema de les \(n\) reines són els vector \(n\)-completables.

Observacions:

  1. \(i \ne j, \forall 1 \le i, j \le k, v[i] \ne v[j], v[i] + i \ne v[j] + j,\) \(n – 1 – v[i] + i \ne n – 1 – v[j] + j\) (les dues darrers condicions cobreixen les diagonals).
  2. El vector ha de ser \((k – 1)\)-completable i, a més, \(\forall 1 \le i \le k – 1, v[i] \ne v[k], v[i] + i \ne v[k] + k, n – 1 – v[i] + i \ne n -1 – v[k] + k\).
  3. Tots els vectors són \(1\)-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 \(n\) objectes amb pesos \(p[i], …, p[n]\) i valor \(v[i], …, v[n]\) la combinació d'objectes amb pes total inferior a C amb el valor màxim».


No comments
© Siegfried-Angel Gevatter Pujals, 2011. | Permalink | License | Post tags: , , ,


Viewing all articles
Browse latest Browse all 23

Trending Articles