1 / 15

Praktikumiülesanded

Praktikumiülesanded. Aines Algoritmid ja andmestruktuurid. Praktikumiülesanne 1. Tähtaeg: 15.09.08. Realiseerida Shelli meetod arvujärjendi sorteerimiseks. Modifitseerida programm Keerukus.java d emonstreerimaks graafikuna selle meetodi

cirila
Download Presentation

Praktikumiülesanded

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Praktikumiülesanded Aines Algoritmid ja andmestruktuurid

  2. Praktikumiülesanne 1 Tähtaeg: 15.09.08 Realiseerida Shelli meetod arvujärjendi sorteerimiseks. Modifitseerida programm Keerukus.java demonstreerimaks graafikuna selle meetodi keerukust, võrdluses sorteerimise piste- ja standardmeetodiga Arrays.sort. Märkus. Programmis tuleb (kommentaarina) esitada viit allikale, kust on leitud Shelli meetodi programm või algoritm.

  3. Praktikumiülesanne 2 Tähtaeg: 22.09.08 Igas ülesandes [2}-§1 6, 7, 8, 9a esinevad kaks funktsiooni. Tähistame neid vastavalt f(n) ja g(n). Modifitseerida programm Keerukus.java selliselt (iga ülesande jaoks eraldi), et ekraanil kujutataks neli graafikut: funktsiooni f graafik funktsiooni g graafik funktsiooni f/g graafik funktsiooni g/f graafik Mida saab järeldada sellest, et funktsioon f/g on (paistab olevat) tõkestatud? Mida saab järeldada sellest, et funktsioon g/f on (paistab olevat) samuti tõkestatud? Märkus. Funktsioonide f ja g graafikute paremaks ekraanile manamiseks võib neid korrutada sobiva konstandiga. Keerukuse uurimise kontekstis ei muuda see midagi.

  4. Praktikumiülesanne 3 Tähtaeg: 29.09.08 3.1. Realiseerida loendamismeetod Javas: static void loendSort(int[] a, int k){ // Antud: järjend a, // mille elemendid on mittenegatiivsed ja väiksemad kui k // Tulemus: a sorteeritud mittekahanevalt … } Testiotstarbelises peameetodis kontrollida, et see meetod töötab õigesti, kui a on suvaline (pikkusega mõniteist), a on juba järjestatud mittekahanevalt, a on järjestatud mittekasvavalt, a on kaheelemendiline, a on üheelemendiline. 3.2 Kirjutada arvujärjendi sorteerimise meetod kombinSort(int[] a), mis võimaluse korral rakendab loendamismeetodit loendSort; kui see ei ole aga võimalik, siis rakendab süsteemset meetodit Arrays.sort. Demonstreerida selle meetodi ajalise keerukuse graafikut võrdluses pistemeetodi ja süsteemse meetodiga Arrays.sort, kui järjendite elemendid on juhuarvud a) vahemikus 0 .. 1000, b) vahemikus 0 .. 10000, c) vahemikus 0 .. 100000.

  5. Praktikumiülesanne 4 Tähtaeg: 06.10.08 Olgu graafi kujutusviis ja manipuleerimismeetodid määratud nii, nagu abipaketis ee.ut.kiho.aa.graaf Märkus 1. Laadige abipaketi viimane versioon aadressilt http://www.cs.ut.ee/~kiho/ads/fall08/abipakett/ Märkus 2. Avaldistes Graaf.sisestadaTabelist(fnimi) g.väljastadaTabelina(fnimi) new GraafiJoonistaja(fnimi) on fnimi kas faili(tee) täisnimi või faili lihtnimi (ei sisalda eraldajat \ või /). Viimasel juhul täiendatakse automaatselt lihtnimi täisnimeks, lisades ette jooksva kaustatee. 4.1. Koostada Java meetod, mis teisendab antud graafi G = (V, E) orienteerimata graafiks: kui ja , siis lisatakse (sama nimega) kaar . 4.2. Koostada Java meetod graafi tippude topoloogilise järjestuse leidmiseks algoritmi [1]-joonis 6.2 järgi. 4.3. Realiseerida Java meetodina eeldusgraafi analüüsimise algoritm [1]-joonis 6.4. Märkus. Algoritmis [1]-joonis 6.4 on eksitavad ja ülearused tulemuse kirjelduse kaks viimast rida: --- kui tipp v ei ole … --- siis v.d … Ülesannete 4.2 ja 4.3 lahendused saata ühe Java-programmina (manuses) aadressil Juri.Kiho@ut.ee.

  6. Praktikumiülesanne 5 Tähtaeg: 13.10.08 5.1. Koostada Java meetod, mis antud graafi ja selle kahe tipu a ning b korral leiab ja väljastab kõik teed tipust a tippu b. Vt ka http://www.cs.ut.ee/~kiho/ads/fall08/demo/ … programm YksTee.algjava. 5.2. Realiseerida Java-meetodina Dijkstra algoritm lühimate teede leidmiseks ([1]-joonis 6.6). Vt ka http://www.cs.ut.ee/~kiho/ads/fall08/demo/ … programm Otseteed.algjava

  7. Praktikumiülesanne 5.2 Juhiseid lahendamiseks • Ettevalmistus (Dijkstra meetodi testimiseks). • Tehke graaf (nt fail graafKaaremargenditega.txt), • kus kaaremärgendiks on kaare pikkus (sõne kujul), nt • 1) [30;30] 1 --> 2 2 --> 6 • 2) [70;70] 4 --> 3 5 --> 4 • 3) [123;131] 1 --> 5 • 4) [57;156] 1 --> 5 • 5) [165;208] 13 --> 10 1 --> 7 • 6) [176;79] 11 --> 9 • 7) [246;173] 1 --> 6 1 --> 10 • 8) [414;167] 1 --> 7 10 --> 12 • 9) [350;112] 1 --> 11 1 --> 8 • 10) [354;279] 1 --> 12 • 11) [401;46] • 12) [533;282] • Graafi tabel-esituses paikneb kaaremärgend vastava noole ees. Seega nt • 2) [70;70] 4 --> 3 5 --> 4 • Tähendab, et tipust nr 2 väljub kaks kaart: • märgendiga “4” tippu nr 3 ja märgendiga “5” tippu nr 4.

  8. Praktikumiülesanne 5.2 Juhiseid lahendamiseks • b) Lühima tee leidmine kõigi teede leidmise programmi abil. • Muutke programmis 5.1 tee väljastamise meetodit selliselt, et väljastataks ka väljastatava tee pikkus (teel olevate kaarte pikkuste summa), nt • Leitud teed on: • pikkus = 20 1 2 3 5 10 12 • pikkus = 30 1 2 3 5 7 6 9 8 12 • pikkus = 9 1 2 3 5 7 10 12 • pikkus = 21 1 2 4 5 10 12 • pikkus = 31 1 2 4 5 7 6 9 8 12 • pikkus = 10 1 2 4 5 7 10 12 • pikkus = 17 1 6 9 8 7 10 12 • pikkus = 24 1 6 9 8 12 • Tulemusest nähtub, et lühimaks on tee pikkusega 9:1 2 3 5 7 10 12 • Sama tulemuse peab andma hiljem koostatav ja silutav Dijkstra meetod.

  9. Praktikumiülesanne 5.2 Juhiseid lahendamiseks c) Enne Dijkstra algoritmi programmeerimist lahendage küsimus, mil viisil hoida tippude hulka Q ja kuidas sellest võtta välja tipp, mille väli .d on parajasti kõige väiksema väärtusega. Näiteks (sobib küll esialgu, kuid pole parim võimalus): Vector <Tipp> q = new Vector <Tipp> (); // hulk Q Meetod: static Tipp võttaVähim(Vector <Tipp> q) { // Antud: vektorist q võetakse välja tipp. mille väli .d on minimaalne // Tulemus: tagastatakse välja võetud tipp … }

  10. Praktikumiülesanne 5.2 Juhiseid lahendamiseks II. 5.2 lahenduse ligikaudne üldskeem import ee.ut.kiho.aa.graaf.*; import java.util.*; // Vector class Main { public static void main(String[] args){ String antud = "graafKaaremargenditega.txt"; String tulem = "graafTeedTulem.txt"; new GraafiJoonistaja(antud); Graaf g = Graaf.sisestadaTabelist(antud); int n = g.n(); // tippude arv for( int i = 0; i <= n -1; i++ ) { g.tipp(i).seadaVäli("eellane", "-"); } dijkstra(g, g.tipp(0)); väljastadaTee(g, g.tipp(n-1)); g.väljastadaTabelina(tulem); new GraafiJoonistaja(tulem); } static void dijkstra(Graaf g, Tipp a) { .. Vector <Tipp> q = new Vector <Tipp> (); // Q int n = g.n(); for( int i = 1; i <= n-1; i++ ) { Tipp v = g.tipp(i); v.seadaVäli("d", "999999");//lõpmatus } a.seadaVäli("d", "0"); q.add(a); // q <== a ... } static Tipp võttaVähim(Vector <Tipp> q) { // Antud: vektorist q võetakse välja tipp. mille d on minimaalne // Tulemus: tagatatakse välja võetud tipp Tipp tulem = null; ... q.remove(tulem); return tulem; } static void väljastadaTee(Graaf g, Tipp lõpp) { ... } }

  11. Praktikumiülesanne 6 Tähtaeg: 20.10.08 6.1. Realiseerida Java meetoditena kahendpuu läbimise algoritmid ([1]-joonis 2.1). Töötlemisprotseduuriks P olgu tipu märgendi väljastamine konsoolile. 6.2. Koostada ja siluda kahendpuule vastava puu konstrueerimise meetod. Võib eeldada, et antud kahendpuu juurel on ainult vasak alluv. Vt ka ([1]-lk 28 ja http://www.cs.ut.ee/~kiho/ads/fall08/demo/ … programm PuuKahendpuuks.algjava Märkus. Eelnevalt laadida abipaketi viimane versioon aadressilt http://www.cs.ut.ee/~kiho/ads/fall08/abipakett/

  12. Praktikumiülesanne 7 Antakse individuaalülesandena pärast seda, .kui on arvestatud praktikumiülesanne 5. Tähtaeg: lahendus esitada kahe nädala jooksul pärast individuaalülesande kättesaamist.

  13. Praktikumiülesanne 8 Tähtaeg: 10.11.08 Realiseerida kahendotsimise puu klass ja vastav testklass aadressil http://www.cs.ut.ee/~kiho/ads/fall08/demo/PrYl8/ leiduvate skeemide Kop ja Main kohaselt. Vt ka [1]-lk 28-33. Märkus. Eelnevalt laadida abipaketi viimane versioon aadressilt http://www.cs.ut.ee/~kiho/ads/fall08/abipakett/ Alamülesanded lahendada järjekorras: 8.1. Lõpetada ja siluda meetod private void lisada(Tipp t, int r) (Testimistegevused on juba lisatud peaklassi Main skeemi.) 8.2. Lõpetada ja siluda meetod private Tipp otsida(Tipp t, int k) Peaklassi Main lisada vajalikud testimistegevused.

  14. Praktikumiülesanne 8 Alamülesanded 8.3. Lõpetada ja siluda meetodid private void eemaldada(Tipp t, int k) private String eemaldadaJärglane(Tipp p) Peaklassi Main lisada vajalikud testimistegevused. 8.4. Lõpetada ja siluda teine konstruktor public Kop(int[] a, boolean kesk) ja selles rakendatav meetod private void lisadaKeskelt(int[] a, int i, int j) Peaklassi Main lisada vajalikud testimistegevused. 8.5. Lõpetada (tasakaalustamisel rakendatav) meetod private int lisadaMassiivi(Tipp t, int[] a, int i) ja testida meetod public void tasakaalustada() Peaklassi Main lisada vajalikud testimistegevused. Praktikumiülesande 8 lahendus – kaks programmi, klass Kop ja peaklass, saata aadressil Juri.Kiho@ut.ee

More Related