Upload
stamos
View
51
Download
6
Embed Size (px)
DESCRIPTION
Slide 1 of 316. Uždavinys “LENKTYN Ė S” 2007, Daugai Vilius Visockas. Turinys. Uždavinio sąlygos pristatymas “ Paprastas ” uždavinio sprendimas “ Advance d ” uždavinio sprendimas Kaip nereikėjo daryti Tiesioginė lenktynės transliacija. S ąlygos pristatymas. Lenktyniauja N ma šinų. - PowerPoint PPT Presentation
Citation preview
Lenktynės
Uždavinys“LENKTYNĖS”
2007, DaugaiVilius Visockas
Slide 1 of 316
Lenktynės
Turinys
• Uždavinio sąlygos pristatymas
• “Paprastas” uždavinio sprendimas
• “Advanced” uždavinio sprendimas
• Kaip nereikėjo daryti
• Tiesioginė lenktynės transliacija
Lenktynės
Uždavinio lenktynės sprendimas
0
10
20
30
40
50
60
70
80
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31
Lenktynės
Sąlygos pristatymas
• Lenktyniauja N mašinų.
• Jos važiuoja įvairiais grečiais.
• Jos startuoja skirtingu laiku.
• Norime sužioti kaip išsidėstys po K pirmųjų lenkimų.
• Nėra dviejų lenkimų vienu metu
• Po K lenkimų visos mašinos bus jau išvažiavusios
Lenktynės
Paprastas sprendimas(bet teisingas)
Lenktynės
Sprendimas (1)
• Nagrinėti visas galimas mašinų poras (N x N), skaičiuoti jų lenkimosi laiką, laikus surikiuoti ir išrinkti K-jo lenkimo laiką.
• Apskaičiuoti kiekvienos mašinos nuvažiuotą atstumą po K-ojo lenkimo.
• Surikiuoti mašinas pagal nuvažiuotą atstumą.
Lenktynės
Kaip nereikėjo spręsti (cont.)
1. “Vienos minutės” sprendimas
Daroma prielaida, kad per vienutę minutę
įvyksta ne daugiau nei vienas lenkimas, nors
sąlygoje pasakyta, kad tiesiog nėra jokių dviejų
lenkimų vienu metu.
Lenktynės
Kaip nereikėjo spręsti (cont.)
Bėgiko ir vežlio paradoksas: bėgikas niekada neaplenks vėžlio!
Lenktynės
Sprendimasnaudojant Heap duomenų struktūrą
Lenktynės
Faktai
• Įmanomas daugiausiai vienas lenkimas imant bet kokią mašinų porą.
• Lenkimo tarp dviejų mašinų gali ir nebūti.
• Jei mašinos važiuoja vienodu greičiu, lenkimo nebus niekada.
• Lenkimas bus tik tada, jei viena mašina važiuoja greičiau už kitą ir išvažiuoja vėliau.
Lenktynės
Sprendimas naudojant heap’ą.• Susirikiuojame mašinas pagal išvykimo laiką
Pastaba. skaičius - mašinos numeris
1
laikasstartas greitis
1000 500
300 500
200 600
900 200
1200 300
2
3
4
5
Lenktynės
Sprendimas naudojant heap’ą.
3 2 4 1 5
• Tikriname ar gretimos mašinų poros lenkiasi.
• Jeigu lenkiasi, lenkimo įvykį dedame į heap’ą.
Lenktynės
Kas tas
“HEAP’as” ???
Paspauskite čia ir sužinosite kas yra heapas!
Lenktynės MAGIC BUTTON X
Lenktynės MAGIC BUTTON X
Lenktynės
Heap’as
• Duomenų struktūra, gebanti– Greitai surasti mažiausią elementą– Ištrinti/Pašalinti elementą.
Puikiai pritaikomas Dijikstros algoritmui.
Lenktynės
Heap’as2
9 6
10 15 8
Heap’as – pilnas dvejetainis medis
Kiekvienas iš vaikų yra didesnis už tėvą
Lenktynės
Heap’asElemento įterpimas (1)
2
9 6
10 15 8
Pirmas elementas dedamas pirmoje laisvoje vietoje.
Lenktynės
Heap’asElemento įterpimas (2)
2
9 6
10 15 8 1
Pirmas elementas dedamas pirmoje laisvoje vietoje.
Lenktynės
Heap’asElemento įterpimas (3)
2
9 6
10 15 8 1
Kad būtų išlaikytos heap’o savybės, reikia lyginti jį su tėvu.
Jei naujas narys mažesnis – sukeičiame.
Lenktynės
Heap’asElemento įterpimas (4)
2
9 1
10 15 8 6
Kartojame lyginimą sukeistam elementui.
Einam link medžio viršūnės – panašiai kaip rikiavimas įterpimu.
Lenktynės
Heap’asElemento įterpimas (5)
1
9 2
10 15 8 6
Lenktynės
Heap’asElemento įterpimas (6)
1
9 2
10 15 8 6
Baigiame, kai:
• Prieiname medžio šaknį.
• Nebereikia sukeisti elementų.
Lenktynės
Heap’asElemento įterpimas
Lenktynės
Heap’asElemento įterpimas
2
9 6
10 15 8 1
Lenktynės
Heap’asElemento įterpimas
2
9
610 15 8
1
Lenktynės
Heap’asElemento įterpimas
1
9 2
10 15 8 6
Baigiame, kai:
• Prieiname medžio šaknį.
• Nebereikia sukeisti elementų.
Lenktynės
Heap’asMažiausio elemento išėmimas
Lenktynės
Heap’asMažiausio elemento išėmimas
1
9 2
10 15 8 6
Visada šakninė viršūnė, pagal jo savybes.
Mažiausias elementas
Mažiausia elementą įsimename, o vietoj jo įrašome paskutinį heap’o elementą.
Sumažiname heapo dydį.
Lenktynės
Heap’asMažiausio elemento išėmimas
1
9 2
10 15 8 6
Paskutinis elementas
Lenktynės
Heap’asMažiausio elemento išėmimas
6
9 2
10 15 8
Bet šakninė viršūnė dabar pažeidžia heap’o savybes.
Šakninė viršūnė (6) didesnė už 2.
Lenktynės
Heap’asMažiausio elemento išėmimas
6
9 2
10 15 8
Ją sukeisime su mažesne iš jos vaikų.
Lenktynės
Heap’asMažiausio elemento išėmimas
6
9 2
10 15 8
Jeigu sukeistam elementui vėl pažeistume heapo savybę, reiktų padaryti dar vieną sukeitimą.
Lenktynės
Heap’asMažiausio elemento išėmimas
6
9 2
10 15 8
Vėl turime heap’ą...
Lenktynės
? ?
?
?
?
Grįžti prie sprendimo
Lenktynės
Sprendimas naudojant heap’ą.
3 2 4 1 5
• Surikiuojame mašinas pagal starto laiką
• Tikriname ar gretimos mašinų poros lenkiasi.
• Jeigu lenkiasi, lenkimo įvykį dedame į heap’ą(raktas – apskaičiuotas lenkimosi laikas)
Ar trečia lenkia antrą?
Ar antra lenkia ketvirtą?
Ar ketvirta lenkia pirmą?
Ar pirma lenkia penktą?
Lenktynės
Sprendimas naudojant heap’ą.
3 2 4 1 5
• Paeiliui išiminėjame įvykius iš heap’o (K kartų), ir:
• Imituojame lenkimą: greitesnę mašina lenkia lėtesnę• Sukeičiame mašinas• Patikriname ar aplenktos mašinos nesiveja dar kita mašina
Jei taip, įvykį vėl dedame į heapą.
• Patikriname ar lenkusi mašina lenks dar kitąJei taip, įvykį vėl dedame į heapą.
Lenktynės
Tikrinimas ar mašina lenkia kitąKada A aplenks mašiną B? Tarkime tas laikas yra x, ir
A B
Starto laikas TA TB
Greitis GA GB
(x – TA) * GA = (x – TB) * GB;
x * GA – TA * GA = x * GB – TB * GB;
x * (GA - GB) = TA * GA – TB * GB;
x = (TA * GA – TB * GB) / (GA – GB)
Lenktynės
PastabosRealieji skaičiai.
Visiškai teisingame sprendime lenkimo laikas turėjo būti saugomas trupmenoje, nes lyginant realiuosius skaičius galima paklaida, ypač kai lenkimai yra labai artimi.
Lenktynės
Atvejų nagrinėjimas
• Mašinos juda vienodu greičiu.
WW Golf 1
WW Golf 1
• Mašinos niekada nelenkia viena kitos.
Lenktynės
Atvejų nagrinėjimas• Mašinos juda nevienodu greičiu.• Greitesnė mašina startuoja vėliau
WW Golf 1
Mercedes
• Mašinos niekada nelenkia viena kitos.
Lenktynės
Atvejų nagrinėjimas• Mašinos juda nevienodu greičiu.• Greitesnė mašina startuoja anksčiau
WW Golf 1
Mercedes
Greitesnė mašina lenkia lėtesnę
Lenktynės
Didžioji “Viliaus” taurė
Lenktynės
WW Golf 1
Mercedes
R
# Vilius has signed in.
9.25 [ Vilius ] Adomai, lenkimas :P
Lenktynės
WW Golf 1
Mercedes
R
# Vilius has signed in.
9.28 [ Vilius ] Adomai, tuoj kartos lenkimą!9.28 [ Adomas ] Joa, matau krč…
# Vilius has signed off
Lenktynės
# Vilius has signed off
[Vilius] 19:21 Jeigu turite klausimų, galiu atsakyti
[Vilius] 19:21 Aj tiesa...
# Vilius has signed off
# Vilius has signed in