Algoritmai ir duomenų struktūros (ADS)

Slides:



Advertisements
Similar presentations
. Graži legenda (Paulo Coelho) Vyras keliavo su savo arkliu ir šuniuku. Kai jie ėjo pro milžinišką medį, į jį trenkė žaibas, ir visi trys žuvo.
Advertisements

VERSLO ĮMONĖS APLINKOS SOCIOEKONOMINIŲ INDIKATORIŲ DAUGIAKRITERINIS VERTINIMAS PROF. HAB. DR. ALGIS ŽVIRBLIS.
Atstovo įgaliojimai Atstovaujam asis Automobilio pardavėjas Atstovas Įgaliojimas pirkti automobilį iki Lt. Atstovas sudaro automobilio pirkimo-pardavimo.
©Ian Sommerville 2000 Software Engineering, 6th edition. Chapter 20 Slide 1 Struktūrinis Testavimas.
1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos.
The-Island Ištraukos iš Paulo Coelho knygos „Alchemikas“
Sauga ir sveikata darbe rūpi visiems. Tai svarbu jums ir įmonei. Visos Europos nuomonių apklausa apie saugą ir sveikatą darbe Pavyzdys, skirtas 36-ioms.
Lietuvos vardo kilmė Žmogus, nepažįstantis savo tautos namų – Tėvynės žemės, kurioje nuo seno tėvai ir protėviai gyveno, - nėra savo krašto pilietis! Įsisąmoninkime.
Muzikos ženklų karuselė
NORĖDAMI PAKEISTI SKAIDRĖS STILIŲ – SPUSTELĖKIT E DEŠINIUOJU PELĖS KLAVIŠU ANT SKAIDRĖS FONO IR PASIRINKITE > LAYOUT ARBA DARBALAUKI O ĮRANKIŲ JUOSTOJE.
Vaizdinė užduotis. Kuriose iš šių valstybių galima pamatyti tokius gyvenamuosius namus? Jemene Tanzanijoje Mongolijoje Indonezijoje A B C D 1.
Duomenų struktūros KTU1 / 47 Kontrolinis – 2014 spalio d. Kontrolinis – tai teorinių žinių apie Java kalbos struktūras patikrinimas Bus vykdomas:
Network address translation Tinklo adresų vertimas
Populiariausios kompiuterinės programos
Kaip parašyti testavimo planą?
SYSTEM OF PROGRAMMING BUDGET
Algoritmai ir duomenų struktūros (ADS)
Regresijos determinuotumas
Smart none of us are as smart as all of us. smart none of us are as smart as all of us.
LKTA XXI-oji tarptautinė konferencija
Funkcijos R.
Daugiakalbė naudotojo sąsaja (Multilingual User Interface)
Darbą parengė: Viktorija Drūteikaitė IT2
Robert Andruškevič AT27D.   Tai yra operacinė sistema, daugiausia naudojama išmaniuosiuose telefonuose, nors ją galima įdiegti ir kituose mobiliuosiuose.
Kiek Kainuoja GigaFlopas? arba Trimačio Vaizdo Spartintuvai
STATISTINĖS IŠVADOS ATSITIKTINUMO ĮVERTINIMAS
CC BY-SA mascil consortium 2014
Algoritmai ir duomenų struktūros (ADS)
POPULIACIJŲ GENETIKA.
Rikiavimo - Rūšiavimo algoritmai
Algoritmai ir duomenų struktūros (ADS)
Ernestas Kaukėnas MIF IT 3grupė
Atliko: Jokūbas Rusakevičius VU MIF PS 3k 3g
Logika a.
JavaScript kalbos apžvalga
By Rita Vickienė MEITT, Vilnius, Lithuania 2010 m. liepos 6 – 16 d.
Lekt. Tomas G. Lipnevičius
Windows API Tėvų kontrolė (angl. Parental Controls)
Informacija kaip naudotis skaidrių demonstravimu (SLIDE SHOW) 
Nijolė Kriščiūnienė PASCAL Nijolė Kriščiūnienė
Duomenų valdymas.
Įvadas į Java programavimo kalbą
Gijos (Threads) Java kalboje
Kas yra arduino ? Parengė:Karolis Šumskis ir Mokytoja ekspertė Elena Šišenina.
Duomenų struktūros ir algoritmai
Saulius Ragaišis VU MIF
Failai ir jų tvarkymas.
Simple Network Management Protocol Paprastas tinklo valdymo protokolas
INTERAKTYVIŲ UŽDUOČIŲ KŪRIMO PROGRAMA
Šlapimo nelaikymo korekcija: Vilniaus miesto Universitetinės ligoninės patirtis Dr. Gediminas Mečėjus I-ji Lietuvos uroginekologijos draugijos konferencija,
Antrosios kartos interneto technologijos
Regresijos determinuotumas
Windows Portable Devices
Tekstiniai uždaviniai
Mikroprocesorius 2.
Saulius Ragaišis, VU MIF
Saulius Ragaišis, VU MIF
Windows Resource Protection (IŠTEKLIŲ APSAUGA)
3-4 klasei Matematika Trupmenos Jurgita Grajauskienė Spec
Programų sistemų testavimas
Langų kūrimas.
Studijų pasirinkimas Lietuvoje ir užsienyje: ką svarbu žinoti?
Daugelio dokumentų sąsaja (angl. Multiple document interface)
Asmeninis programų kūrimo procesas (PSP)
Windows Ribbon Framework
Klaviatūra.
Kompiuterijos mokslo edukaciniai tyrimai
Pranešėjas Jurij Kuznecov
Presentation transcript:

Algoritmai ir duomenų struktūros (ADS) 9 paskaita Saulius Ragaišis, VU MIF saulius.ragaisis@mif.vu.lt 2010-04-09

Modeliavimo programos pavyzdys Sąlyga: savitarnos parduotuvė dirba T laiko vienetų; joje yra N kasų; kiekvienu laiko momentu su tikimybe M (%) ateina klientas; jo apsipirkimo laikas yra atsitiktinis, bet ne didesnis nei A; baigęs pirkti, jis stoja į eilę prie atsitiktinės kasos; jo aptarnavimo prie kasos laikas yra atsitiktinis, bet ne didesnis nei B. Rasti: kiek reikia turėti parduotuvės vežimėlių, kad jų nepritrūktų (daroma prielaida, kad aptarnavus klientą prie kasos, jo vežimėliu iš karto  gali naudotis naujas klientas).

Programos parametrų failas 500 modeliavimo laikas 5 kasu skaičius 50 kliento atėjimo tikimybė (%) 40 maksimalus kliento apsipirkimo laikas 10 maksimalus kliento aptarnavimo prie kasos laikas

Eilėje saugomų duomenų tipas unit QueueData; interface type QueueDataType = ...; implementation end.

ADT Eilė unit Queue; interface uses QueueData; type QueueType = ...; procedure createQueue (var queue : QueueType); function isEmptyQueue (const queue : QueueType) : boolean; function isFullQueue (const queue : QueueType) : boolean; procedure enQueue (var queue : QueueType; data : QueueDataType; var err : boolean); procedure deQueue (var queue : QueueType; var data : QueueDataType; var err : boolean); procedure firstInQueue (const queue : QueueType; var data : QueueDataType; var err : boolean); function lengthOfQueue(const queue : QueueType) : integer; procedure destroyQueue (var queue : QueueType); implementation

Programa program Shop; uses QueueData, Queue; const PARAMS_FILE_NAME = 'params.txt'; MAX_CASH_DESKS = 10; MAX_ACTIVE_CLIENTS = 20; { Global variables } var errors : boolean; simulationTime, noOfCashDesks, newClientProbability, maxBuyingTime, maxCashingTime : integer; procedure loadParams; ... { Program variables } var time, maxNoOfShoppingCarts, usedShoppingCarts, noOfActiveClients, i, j, k : integer; cashingTime : QueueDataType; activeClients : array[1..MAX_ACTIVE_CLIENTS] of integer; cashDesks : array[1..MAX_CASH_DESKS] of QueueType; cashingLeft : array[1..MAX_CASH_DESKS] of integer; begin loadParams; if errors then exit; ...

Programa (2) while not errors and (time < simulationTime) do { Main simulation loop } begin inc(time); { Get new client } if random(100) <= newClientProbability then { New client should be added to active clients } inc(noOfActiveClients); if noOfActiveClients > MAX_ACTIVE_CLIENTS then writeln('Number of active clients become too big ( >', MAX_ACTIVE_CLIENTS, ' ).'); errors := true; break; end; activeClients[noOfActiveClients] := time + random(maxBuyingTime) + 1; { New client gets a shopping cart } inc(usedShoppingCarts); if usedShoppingCarts > maxNoOfShoppingCarts then maxNoOfShoppingCarts := usedShoppingCarts; { Check active clients who finished buying } ... { Check queues at cash desks } ... end; { Main simulation loop }

Programa (3) { Check active clients who finished buying } j := 0; for i := 1 to noOfActiveClients do begin if activeClients[i] > time then inc(j); activeClients[j] := activeClients[i]; end else k := random(noOfCashDesks) + 1; cashingTime := random(maxCashingTime) + 1; enQueue(cashDesks[k], cashingTime, errors); if errors then writeln('The queue of cash desk becomes too long.'); break; end; if lengthOfQueue(cashDesks[k]) = 1 then cashingLeft[k] := cashingTime + 1; dec(noOfActiveClients);

Programa (4) { Check queues at cash desks } for k := 1 to noOfCashDesks do if lengthOfQueue(cashDesks[k]) > 0 then begin dec(cashingLeft[k]); if cashingLeft[k] = 0 then deQueue(cashDesks[k], cashingTime, errors); if errors then writeln('Program error: trying to dequeue.'); break; end; firstInQueue(cashDesks[k], cashingTime, errors); cashingLeft[k] := cashingTime;

Programa (5) Pilnas programos tekstas bus pateiktas internete. { Output simulation results } writeln('Max number of shopping carts is ', maxNoOfShoppingCarts); { Clearing data structues } for i := 1 to MAX_CASH_DESKS do destroyQueue(cashDesks[i]); end. Pilnas programos tekstas bus pateiktas internete.

Programos vykdymas D:\MIF\A&DS\_Pvz>shop_a Max number of shopping carts is 244 Pagrindinės programos pradžioje pridėjus: Randomize; D:\MIF\A&DS\_Pvz>shop_r Max number of shopping carts is 257 Max number of shopping carts is 256 Max number of shopping carts is 267 Max number of shopping carts is 251 Ar programos rezultatai teisingi?

Apibendrinimas Visada vertėtų pavertinti, ar programos rezultatai prasmingi. Modeliavome 500 laiko vienetų, o kliento atėjimo tikimybė yra 50%. Taigi per visą laiką turėtų ateiti apie 250 klientų. O programa sako, kad tiek vežimėlių ir reikia. Kyla įtarimas, kad vežimėliai neatlaisvinami... Patikrinus, pasirodo, kad programoje praleistas inc(usedShoppingCarts);

Grafai Grafas – aibių pora (V, L). V – viršūnių (vertex) aibė, L – briaunų (edge) aibė Briauna – atkarpa, jungianti dvi grafo viršūnes. Pografis (subgraph) – poaibis grafo briaunų bei jų viršūnių.

Grafai (2) Dvi viršūnės yra gretimos arba kaimyninės (adjacent), jei jos sujungtos briauna. Viršūnės Vi ir Vj yra kaimyninės, jei egzistuoja Bk=(Vi, Vj). Pvz.: A kaimyninės viršūnės yra B ir D. Plokščias arba planarinis grafas – tai grafas, kuri galima nupiešti plokštumoje (bent vienu būdu) taip, kad nė viena pora briaunų nesikirstų.

Grafai (3) Kelias (path) tarp viršūnių – briaunų seka, prasidedanti vienoje viršūnėje ir besibaigianti kitoje viršūnėje. Paprastas kelias (simple path) – kelias, per kiekvieną jam priklausančią viršūnę einantis tik po vieną kartą. Pvz., kelias ADCBCE nėra paprastas kelias, nes per viršūnę C eina du kartus. Ciklas (cycle) – paprastas kelias, kuris prasideda ir baigiasi toje pačioje viršūnėje. Pvz., ABCDA.

Grafai (4) Jungus grafas (connected) – jei egzistuoja kelias tarp bet kurių viršūnių porų. Pilnas grafas (complete) – jei yra briauna tarp kiekvienos viršūnių poros. Aišku, kad pilnas grafas taip pat yra ir jungus, tačiau jungus grafas nebūtinai yra pilnas. Kiek briaunų gali būti tarp 2 viršūnių?

Grafai su svoriais Grafas su svoriais (weighted) – grafas, kurio briaunos turi skaitines reikšmes (svorius).

Lankas –briauna, turinti kryptį. Orientuoti grafai Lankas –briauna, turinti kryptį. Orientuotas grafas (directed) – grafas su lankais (visos briaunos turi kryptį). Kiek lankų gali būti tarp 2 viršūnių?

Orientuoti grafai (2) Pvz.: Knygų skolinimasis: A iš B pasiskolino 100 knygų, o B iš A pasiskolino 50 knygų. Visi apibrėžimai, kurie buvo taikomi neorientuotiems grafams, taip pat tinka ir orientuotam grafui. Pvz.: Orientuotas kelias yra seka lankų tarp dviejų viršūnių. Būtina pastebėti, kad orientuotame grafe galima situacija: A yra kaimynas B, bet B – nėra A kaimynas.

ADT Grafas Pagrindinės operacijos su grafais kaip ADT: Sukurti tuščią grafą. Įdėti/išmesti viršūnę. Įdėti/išmesti briauną tarp viršūnių V1 ir V2. Sužinoti (rasti), ar yra kelias tarp viršūnių V1 ir V2. Sužinoti (V1, V2) svorį. Pakeisti (V1, V2) svorį.

Yra du dažniausiai naudojami grafų realizavimo būdai: Grafo realizavimas Yra du dažniausiai naudojami grafų realizavimo būdai: kaimynystės matrica kaimynystės sąrašai Abiem atvejais patogiausia įsivaizduoti, kad viršūnės numeruojamos 1, 2 ir taip toliau iki N.

(dažniausiai nesimetriška matrica) Kaimynystės matrica Kaimynystės matrica grafui be svorių su N viršūnių yra N iš N loginis masyvas A toks, kad A[i, j] yra teisingas tada ir tik tada, kai egzistuoja briauna iš viršūnės ‘i’ į viršūnę ‘j’. Pagal susitarimą A[i, i] yra klaidingas. Įsidėmėtina, kad kaimynystės matrica neorientuotam grafui yra simetriška, tai yra A[i, j] = A[j, i]. Neorientuotas grafas Orientuotas grafas (simetriška matrica) (dažniausiai nesimetriška matrica)

Kaimynystės matrica (2) Kai turim grafą su svoriais, yra patogu, kad A[i, j] būtų briaunos iš viršūnės ‘i’ į viršūnę ‘j’ svoris. Tada A[i, j] žymima ∞, kai nėra briaunos iš viršūnės ‘i’ į viršūnę ‘j’. Be to, įstrižainės A[i, i] reikšmės lygios 0.

Kaimynystės sąrašai Kaimynystės sąrašas grafo iš N viršūnių, kurios numeruojamos 1, 2, …, N, susideda iš N sujungtų sąrašų. Jei grafas yra su svoriais, tai jie saugomi kartu su viršūnę. Pvz.:

Grafo realizacijų palyginimas Dvi dažniausiai naudojamos grafų operacijos yra: Duotos dvi viršūnės ‘i’ ir ‘j’; rasti, ar yra briauna iš ‘i’ į ‘j’. Rasti visas viršūnes, kurios yra kaimynės duotajai viršūnei Vi Jei grafas yra netoli pilno grafo, tai masyvas yra efektyvesnis už sąrašą. Jei briaunų mažai, tai lieka daug nepanaudotos vietos matricoje, kas yra minusas taupant, tuomet geriau sąrašas.

Klausimai ?