Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2008-11-14 10:16:27.
Revizia anterioară   Revizia următoare  

Probleme de acoperire

(Categoria Algoritmi, autor Cosmin Negruşeri)

În acest articol vom prezenta o serie de probleme apărute la concursurile de programare care au o tematică similară şi anume acea de acoperire în plan. În general acest tip de probleme sunt NP complete, dar pentru cazurile particulare prezentate problemele sunt rezolvabile.

Problema 1 (Olimpiada de informatică, Bucureşti, etapa pe sector, 1995 şi [1])

Se dă un pătrat de latură 2<sup>$n$</sup> care se împarte în pătrate disjuncte de latură 1. Unul dintre aceste pătrate se elimină. Se cere acoperirea suprafeţei rămase cu piese de forma:

Soluţie:

Prima întrebare care ne vine în minte este dacă aria ce trebuie acoperită este divizibilă cu 3. Aria este 4n – 1 = (4 – 1)(4n-1 + 4n-2 + … + 4 + 1), deci este multiplu de trei. Să trecem acum la ideea rezolvării.
Împărţim pătratul în patru pătrate de dimensiuni egale. Unul dintre ele are un pătrat lipsă, facem ca celelalte trei pătrate să aibă şi ele un pătrat lipsă prin plasarea unei piese care sa acopere câte un colţ al fiecăruia dintre cele trei pătrate rămase dupa cum observăm în figură.

Astfel am redus problema la patru noi probleme de dimensiuni mai mici.

Se vede clar acum, cum prin metoda divide et impera putem să acoperim întreg pătratul cu piesele cerute.

Problema 2 (lot 2001 şi [1])

Se dă un pătrat de latură 6N + 1 care se împarte în pătrate disjuncte de latură 1. Unul dintre aceste pătrate se elimină. Se cere acoperirea suprafeţei rămase cu piese de forma:

Soluţie:

Să vedem întâi cum rezolvăm cazul minim în care N = 1.

În aceste trei figuri am epuizat toate cazurile pentru table de dimensiune 7 unde lipseşte un pătrat. În fiecare desen am lăsat un pătrat de latură doi liber pentru a trata astfel cele patru cazuri în care pătrăţelul lipsă ar face parte din acest pătrat deodată, recurgând şi la rotaţiile acestor soluţii acoperim toate cazurile posibile pentru pătrăţelul lipsă. Menţionăm că cele trei soluţii au fost găsite cu uşurinţă de mână de autor.
Să presupunem că ştim cum să acoperim un pătrat de latură 6N + 1. Să vedem acum cum acoperim un pătrat de latură 6N + 7. În acest nou pătrat putem plasa într-un colţ de al lui un pătrat de latură 6N + 1, care are un pătrăţel lipsă. Pătratul acesta îl ştim acoperi şi după cum arată şi figura următoare ne mai rămâne să acoperim două dreptunghiuri de dimensiuni 6 × 6n, respectiv 6n x 6 şi un pătrat de latură 7 cu patrăţelul din colţ lipsă. Dreptunghiurile le putem acoperi cu dreptunghiuri de dimensiuni 2 × 3 formate din câte două piese, iar pătratul de 7 × 7 cu un colţ lipsă este un caz pentru N = 1 al problemei noastre.