31
Uždavinys “Egzaminas” Aut.: Linas Petrauskas

Uždavinys “ Egzaminas ”

  • Upload
    joella

  • View
    47

  • Download
    3

Embed Size (px)

DESCRIPTION

Uždavinys “ Egzaminas ”. Aut.: Linas Petrauskas. Kiekvienoje auditorijos eil ėje sėdi po vienodą skaičių studentų. Bet tuoj prasidės egzaminas. Studentai turi susėsti taip, kad kiekvienas sėdėtų priešais kito studento nugarą, o tarp vienoje eilėje sėdinčių būtų bent K laisvų vietų. - PowerPoint PPT Presentation

Citation preview

Page 1: Uždavinys “ Egzaminas ”

Uždavinys “Egzaminas”

Aut.: Linas Petrauskas

Page 2: Uždavinys “ Egzaminas ”

Kiekvienoje auditorijos eilėje sėdi po vienodą skaičių studentų.

Bet tuoj prasidės egzaminas. Studentai turi susėsti taip, kad kiekvienas sėdėtų priešais kito

studento nugarą, o tarp vienoje eilėje sėdinčių būtų bent K laisvų vietų.

Page 3: Uždavinys “ Egzaminas ”

Kaip studentai turi persėsti, kad būtų tenkinami šie reikalavimai, o savo vietą tektų pakeisti kuo mažiau studentų?

* Studentai negali prasilenkti ar pereiti į kitą eilę,

* Auditorijos matmenys iki 200x100.

Page 4: Uždavinys “ Egzaminas ”

Pavyzdys, kai K = 1.

(Savo vietą teks pakeisti mažiausiai 8 studentams.)

Page 5: Uždavinys “ Egzaminas ”

Pavyzdys, kai K = 2.

(Savo vietą teks pakeisti mažiausiai 9 studentams. Šiuo atveju yra vienintelis

būdas studentams susėsti.)

Page 6: Uždavinys “ Egzaminas ”

Iš anksto galime pasakyti, kurie studentai turės sėdėti toje pačioje

(vertikalioje) eilėje:

Page 7: Uždavinys “ Egzaminas ”

Nesunkiai galime ir suskaičiuoti, kiek kiekvienam studentų “frontui” “kainuotų”

pasislinkti iki kiekvienos galimos pozicijos (nepaisant

kitų “frontų”) – ši kaina lygi toje pozicijoje nesėdinčių to “fronto”

studentų skaičiui.

(Nesijaudinkit – tai paprastoji dalis ;)

Page 8: Uždavinys “ Egzaminas ”

1 2 3 4 5 6 7

3 2 5 5 5 5 5

5 5 4 2 4 5 5

5 5 5 5 2 4 4

Page 9: Uždavinys “ Egzaminas ”

Tai čia aišku... Bet kaip spręsti uždavinį?

Godi idėja...

Page 10: Uždavinys “ Egzaminas ”

...nebūtinai pateikia optimalų sprendinį.

8 studentai pakeičia vietą.

7 studentai pakeičia vietą.

Page 11: Uždavinys “ Egzaminas ”

* Teisingą atsakymą gautume išbandę visus variantus;

* Perrinkimas užtrunka daug laiko.* Naudosime DINAMINĮ

PROGRAMAVIMĄ.

Page 12: Uždavinys “ Egzaminas ”

Pastebėkime, kad jei žinotume, kur turi susėsti paskutinis studentų “frontas”, liktų išspręsti labai panašų, tik mažesnį uždavinį.

Page 13: Uždavinys “ Egzaminas ”

* Kita vertus, jei mokėtume spręsti mažesnį uždavinį, tai padėtų išspręsti didesnįjį.

* Pradėsime nuo paties mažiausio uždavinio.

* Paeiliui spręsime vis didesnį uždavinį, kol pagaliau rasime viso uždavinio sprendimą.

Page 14: Uždavinys “ Egzaminas ”

1 2 3 4 5 6 73 2 5 5 5 5 55 5 4 2 4 5 55 5 5 5 2 4 4

Pavyzdys, K = 1

Page 15: Uždavinys “ Egzaminas ”

Paprasčiausias uždavinys – yra tik pirmasis “frontas” studentų ir tik viena vertikali eilė.

Page 16: Uždavinys “ Egzaminas ”

Sprendimas elementarus – visus susodinti į pirmą eilę.

Tokio sprendimo “kaina” = 3.

Page 17: Uždavinys “ Egzaminas ”

Didesnis uždavinys – tai vienas studentų “frontas” ir dvi vertikalios eilės.

Geriausio sprendimo “kaina” = 2.

Page 18: Uždavinys “ Egzaminas ”

Kai studentų frontų yra vienas, o eilės trys, vis tiek optimalu pirmąjį frontą sodinti antroje eilėje.

Priešingu atveju būtų gaunama didesnė kaina.

Geriausio sprendimo “kaina” = 2.

Page 19: Uždavinys “ Egzaminas ”

1 2 3 4 5 6 7

3 2 5 5 5 5 5

5 5 4 2 4 5 5

5 5 5 5 2 4 4

Pažymėkime f[i, j] – i-ojo fronto pasodinimo į j-ąją eilę kainą.

(Lentelė viršuje.)

Pažymėkime D[i, j] – optimalią pirmųjų i frontų susodinimo į pirmąsias j eilių

kainą.

Page 20: Uždavinys “ Egzaminas ”

Mus dominantis atsakymas yra D[n, s], kur n yra frontų skaičius, o s – auditorijos eilių

(vertikalių) skaičius.

Jau išmokome optimaliai susodinti pirmojo fronto studentus bet kokiame kiekyje eilių:

D[1, 1] := f[1, 1];

for i := 2 to s do

D[1, i] := min(D[1, i-1], f[1, i]);

Page 21: Uždavinys “ Egzaminas ”

Pereikime prie didesnio uždavinio – nagrinėkime pirmuosius du studentų frontus. Jiems prireiks

mažiausiai 3 vertikalių eilių. (K = 1)

Page 22: Uždavinys “ Egzaminas ”

Toks uždavinys taip pat turi tik vieną sprendinį:

Geriausia pirmųjų 2 frontų susodinimo kaina pirmose 3 eilėse:

D[2, 3] = D[1, 1] + f[2, 3] = 3 + 4 = 7

Page 23: Uždavinys “ Egzaminas ”

Kaip susodinti pirmuosius 2 frontus susodinti pirmosiose 4 vertikaliose eilėse. D[2, 4] = ?

Renkamės iš 2 variantų:

D[2, 4] = D[2, 3] = 7 ?

D[2, 4] = D[1, 2] + f[2, 4] = 4 ?

Renkamės pigesnį variantą, t. y. antrąjį.

D[2, 4] = D[1, 2] + f[2, 4] = 2 + 2 = 4

Page 24: Uždavinys “ Egzaminas ”

Pagal tą pačią taisyklę renkamės ir toliau.D[2, 5] = D[2, 4], t. y. penkiose pirmosiose

eilėse pirmuosius du frontus studentų optimalu susodinti taip pat kaip ir keturiose.

Page 25: Uždavinys “ Egzaminas ”

Pirmiesiems trims frontams studentų reikia mažiausiai 5 vertikalių eilių. (K = 1)

Tokio susodinimo kaina:

D[3, 5] = D[2, 3] + f[3, 5] = 9

Page 26: Uždavinys “ Egzaminas ”

Sodindami 3 frontus pirmosiose 6 eilėse renkamės iš 2 variantų:

D[3, 6] = D[3, 5] = 9 ?

D[3, 6] = D[2, 4] + f[3, 6] = 8?

Renkamės pigesnį variantą, taigi, antrąjį.

D[3, 6] = D[2, 4] + f[3, 6] = 4 + 4 = 8

Page 27: Uždavinys “ Egzaminas ”

Pagal tą patį algoritmą tęsiame ir randame uždavinio sprendimą:

Optimali susėdimo kaina D[3, 7] = 8

Page 28: Uždavinys “ Egzaminas ”

Apibrendrinus:

D[1, 1] := f[1, 1];for j := 2 to s do D[1, j] := min(D[1, j-1], f[1, j]);

for i := 2 to n do begin p := (i – 1) * (K + 1) + 1; D[i, p] := D[i - 1, p – k - 1] + f[i, p]; for j := p + 1 to s do D[i, j] := min(D[i, j – 1], D[i – 1, j – k – 1] + f[i,

j]);end;

Page 29: Uždavinys “ Egzaminas ”

1 2 3 4 5 6 7

3 2 5 5 5 5 5

5 5 4 2 4 5 5

5 5 5 5 2 4 4

Lentelė f:

Lentelė D:

1 2 3 4 5 6 7

3 2 2 2 2 2 2

7 4 4 4 4

9 8 8

Page 30: Uždavinys “ Egzaminas ”

Lentelė D:

1 2 3 4 5 6 7

3 2 2 2 2 2 2

7 4 4 4 4

9 8 8

Reikalingą studentų susodinimą randame grįždami nuo paskutiniojo langelio iki pirmosios eilutės.

Page 31: Uždavinys “ Egzaminas ”

(pabaiga)