uždavinys “ egzaminas ”
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 PresentationTRANSCRIPT
![Page 1: Uždavinys “ Egzaminas ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/1.jpg)
Uždavinys “Egzaminas”
Aut.: Linas Petrauskas
![Page 2: Uždavinys “ Egzaminas ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/2.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/3.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/4.jpg)
Pavyzdys, kai K = 1.
(Savo vietą teks pakeisti mažiausiai 8 studentams.)
![Page 5: Uždavinys “ Egzaminas ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/5.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/6.jpg)
Iš anksto galime pasakyti, kurie studentai turės sėdėti toje pačioje
(vertikalioje) eilėje:
![Page 7: Uždavinys “ Egzaminas ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/7.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/8.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/9.jpg)
Tai čia aišku... Bet kaip spręsti uždavinį?
Godi idėja...
![Page 10: Uždavinys “ Egzaminas ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/10.jpg)
...nebūtinai pateikia optimalų sprendinį.
8 studentai pakeičia vietą.
7 studentai pakeičia vietą.
![Page 11: Uždavinys “ Egzaminas ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/11.jpg)
* Teisingą atsakymą gautume išbandę visus variantus;
* Perrinkimas užtrunka daug laiko.* Naudosime DINAMINĮ
PROGRAMAVIMĄ.
![Page 12: Uždavinys “ Egzaminas ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/12.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/13.jpg)
* 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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/14.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/15.jpg)
Paprasčiausias uždavinys – yra tik pirmasis “frontas” studentų ir tik viena vertikali eilė.
![Page 16: Uždavinys “ Egzaminas ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/16.jpg)
Sprendimas elementarus – visus susodinti į pirmą eilę.
Tokio sprendimo “kaina” = 3.
![Page 17: Uždavinys “ Egzaminas ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/17.jpg)
Didesnis uždavinys – tai vienas studentų “frontas” ir dvi vertikalios eilės.
Geriausio sprendimo “kaina” = 2.
![Page 18: Uždavinys “ Egzaminas ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/18.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/19.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/20.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/21.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/22.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/23.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/24.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/25.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/26.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/27.jpg)
Pagal tą patį algoritmą tęsiame ir randame uždavinio sprendimą:
Optimali susėdimo kaina D[3, 7] = 8
![Page 28: Uždavinys “ Egzaminas ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/28.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/29.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/30.jpg)
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 ”](https://reader035.vdocuments.pub/reader035/viewer/2022081506/56813b93550346895da4c4a2/html5/thumbnails/31.jpg)
(pabaiga)