Backtracking

Ce este backtracking-ul?

Conceptul de backtracking, cum funcționează și când se folosește.

Ce este backtracking-ul?

Ce este backtracking-ul?

Backtracking-ul este o metodă de rezolvare a problemelor care construiește soluția pas cu pas, alegând la fiecare pas o valoare posibilă. Dacă la un moment dat ne blocăm, ne întoarcem la pasul anterior și încercăm altă valoare.

Notă: Gândește-te la un labirint: mergi înainte până te lovești de un zid, apoi te întorci și încerci altă direcție.

Cei 3 pași ai backtracking-ului

  • Alege o valoare pentru poziția curentă
  • Verifică dacă valoarea este validă (respectă condițiile)
  • Avansează la poziția următoare sau întoarce-te dacă nu mai ai valori valide

Ce trebuie să știi pentru BAC

La BAC, exercițiile de backtracking cer să generezi soluții care respectă anumite constrângeri — de exemplu, un anumit cost total, o anumită ordine a elementelor sau o anumită proprietate a cifrelor. Backtracking-ul încearcă toate variantele posibile și le păstrează doar pe cele care satisfac condițiile.

Notă: De obicei ți se dau primele câteva soluții generate și ți se cere să identifici o altă soluție sau să numeri ceva legat de ele.
Notă: Nu trebuie să scrii codul de backtracking la Subiectul I sau II. Trebuie doar să înțelegi ordinea în care soluțiile sunt generate și să le poți număra.

Cum se generează soluțiile

Backtracking-ul generează soluțiile în ordine sistematică, de la stânga la dreapta:

  • fixează prima poziție cu prima valoare posibilă
  • pentru fiecare valoare de pe prima poziție, parcurge toate valorile posibile pentru a doua poziție
  • și tot așa, până completează toate pozițiile

Asta înseamnă că soluțiile apar într-o ordine lexicografică (ca în dicționar).


Exemplu 1 — Testul 3, 2021

Se generează toate modalitățile de a selecta un grup de 4 muzee din {MAVA, MCA, MCFR, MNHCV, MNLR, MNT}.

Primele 5 soluții sunt:

  • (MAVA, MCA, MCFR, MNHCV)
  • (MAVA, MCA, MCFR, MNLR)
  • (MAVA, MCA, MCFR, MNT)
  • (MAVA, MCA, MNHCV, MNLR)
  • (MAVA, MCA, MNHCV, MNT)

Care este o soluție validă?

(MCA, MNHCV, MNLR, MNT)

De ce? Pentru că după ce se epuizează toate combinațiile care încep cu MAVA, backtracking-ul trece la MCA ca primul element, și generează în ordine toate combinațiile care încep cu MCA.


Exemplu 2 — Testul 1, 2021

Se generează toate numerele din intervalul [100,999] cu cifrele în ordine crescătoare, de paritate diferită pe poziții consecutive, cu suma egală cu 14.

Regulile de generare:

  • cifra 1 < cifra 2 < cifra 3
  • cifra 1 și cifra 2 au parități diferite
  • cifra 2 și cifra 3 au parități diferite
  • cifra 1 + cifra 2 + cifra 3 = 14

Backtracking-ul încearcă cifrele de la 1 la 9 pentru prima poziție, de la cifra1+1 la 9 pentru a doua, și așa mai departe.

| c1 | c2 | c3 | Par? | Sumă? |

|----|----|----|------|-------|

| 1 | 4 | 9 | impar-par-impar | 14 ✓ |

| 1 | 6 | 7 | impar-par-impar | 14 ✓ |

| 2 | 3 | 9 | par-impar-par | 14 ✓ |

| 3 | 4 | 7 | impar-par-impar | 14 ✓ |

| 3 | 6 | 5 | ordine? 5 < 6 | ✗ |

| 5 | 4 | 5 | ordine? 4 < 5 | ✗ |

| 5 | 6 | 3 | ordine? 3 < 6 | ✗ |

Numerele generate în ordine: 149, 167, 239, 347