Hoofdstuk 14.1 Algoritmen: Zoeken in een netwerk.

Slides:



Advertisements
Verwante presentaties
KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Advertisements

Van domeinklasse tot implementatie
Het type int Tekenen met Java operatoren
Klassen en objecten.
Computervaardigheden en Programmatie Universiteit AntwerpenObjecten 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 6: Controle structuren
Hoofdstuk 2 Hallo, C# !.
Hoofdstuk 10 Overerving.
Array nDeclaratie nCreatie nOpvragen nWijzigen nLengte String [ ] a; a = new String[10]; ……a[5]…… a[5] = ……; …a.Length… …is eigenlijk overbodig! List a;
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 8 Objecten en klassen.
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Oefeningen Hoofdstuk 3.
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
Opgave 2a nMet een InputStream lees je bytes uit een binare file nMet een Reader lees je characters uit een tekstfile.
Hoofdstuk 9 Objecten en klassen.
Java GUI nJava is platform-onafhankelijk nLook&feel past zich aan aan het platform new FileDialog(……).show();
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
KINN 2010 OOP O Object O Georiënteerd P Programmeren.
Constructoren Genesis 1:1 Aarde a1 = new Aarde(“Adam”, “Eva”);
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
Hoofdstuk 10.3 Tekst-editor: MDI-interface Dialogen Files lezen Abstracte klassen.
Polymorphisme en Interfaces: inleiding
Hoofdstuk 3 Methoden om te tekenen.
Hoofdstuk 8 Keuze verplicht…. Opdrachten voorwaardelijk uitvoeren opdracht wordt alleen uitgevoerd als voorwaarde geldt if (temperatuur
Hoofdstuk 12 Ontwerp van programma’s. Ontwerp van de GUI nStandaard in Applets: alle met add toegevoegde componenten komen naast elkaar (totdat de regel.
Opgave 1a ncompiler: vertaalt broncode naar machine-uitvoerbare code ninterpreter: voert broncode direct uit.
Hoofdstuk 3 Tekenen en rekenen.
Hoofdstuk 4 Nieuwe methoden. Tekenen g.drawRect(20,60,40,40); g.drawLine(20,60,40,40); g.drawLine(40,40,60,60); g.drawRect(70,60,40,40); g.drawLine(70,60,90,40);
Reader en Writer Stream FileStream MemoryStream NetworkStream BufferedStream GZipStream CryptoStream TextWriter StreamWriter StringWriter BinaryWriter.
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Eerste deeltentamen nNagekeken werk ligt voor in de zaal nNeem je eigen werk mee: in het college wordt het besproken nVragen over de beoordeling: in de.
1e Deeltentamen nNagekeken werk ligt voor in de zaal (alfabetisch op achternaam) nNeem het even mee, de uitwerking wordt in het college besproken nDiscussies.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Herhaling: He who does not learn from history, is doomed to repeat it.
Opbouw van het Netwerk void Lees (string filenaam ) { while ( (regel=sr.ReadLine()) != null ) { string [] r = regel.Split(" ", StringSplitOptions.RemoveEmpty.
Eigen klassen maken A new way of thinking.. Wat? Zie voorbeeld. Zie voorbeeld.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
Bestanden Lezen Schrijven Afbeeldingen. Bestandstypen.txt.png eigen.
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Objectgeoriënteerd Programmeren (2)
…is eigenlijk overbodig!
2e Deeltentamen Nagekeken werk ligt voor in de zaal (alfabetisch op achternaam) Neem het even mee, de uitwerking wordt in het college besproken Discussies.
1e Deeltentamen Nagekeken werk ligt voor in de zaal (alfabetisch op achternaam) Neem het even mee, de uitwerking wordt in het college besproken Discussies.
Gameprogrammeren: Objecten en geheugen
Reader en Writer leest en schrijft bytes leest string en char
Letterfrequentie turven
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Methoden
Gameprogrammeren: Tiles in Tick Tick
Declaratie Declaratie reserveert geheugenruimte
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
OOS Object geOrienteerd Software-ontwerp - 5
Gameprogrammeren: Game Basics
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
Practicum: schets-editor
Gameprogrammeren: Tiles en File I/O in Tick Tick
Game: omgaan met tijd (Jewel-Jam)
Gameprogrammeren: Klassen en objecten
‘Inleiding objectgeoriënteerd programmeren met PHP’ ‘Inleiding’
Implementatie Zoekboom
Object Communication (Jewel Jam)
Transcript van de presentatie:

Hoofdstuk 14.1 Algoritmen: Zoeken in een netwerk

Routeplanner nKlik startpunt nKlik eindpunt nProgramma bepaalt route nKlik nieuw startpunt... start eind start nSpoorwegkaart:

Modellering nZoek de “beste” route elk traject heeft “kosten”; route met laagste totaalprijs is de beste nOpbouw van het netwerk staat in een file, met: uvoor elke stad: naam en coördinaten uvoor elke weg: 2 steden, en de kosten stad Amersfoort stad Amsterdam stad Apeldoorn weg Amersfoort Apeldoorn43 weg Amsterdam Hilversum29 weg Hilversum Amersfoort 16

Specificatie nBij eerste muisklik: aangewezen stad is het beginpunt toon die in blauw nBij tweede muisklik: aangewezen stad is eindpunt bereken de route, en toon die in rood nBij klik buiten een stad: telt niet mee en 3e, 5e, 7e... en 4e, 6e, 8e...

Opdeling in klassen nInteractieve interface class NetApplet extends Applet implements MouseListener nBelangrijke object-typen class Stad class Weg class Pad class Netwerk nElke klasse krijgt: ueen constructor-methode ueen methode teken om zichzelf te tekenen u...

Klasse-ontwerp wat is... wat kan... en hoe ? een object object- variabelen methode- headers methode- bodies

De klasse NetApplet class NetApplet extends Applet implements MouseListener { Netwerk netwerk; Stad stad1; Pad pad; “het” netwerk de “blauwe” stad of null het “rode” pad of null Button b; TextField t; Scrollbar s; we tekenen alles zelf!

De klasse Netwerk class Netwerk { Stad [ ] steden; Collection wegen; alle steden op de kaart we gaan per stad alle uitgaande wegen bewaren Collection steden;

De klasse Stad class Stad { String naam; Collection wegen; int x, y; Utrecht

De klasse Weg class Weg { Stad doel; int kosten;

De klasse Pad class Pad { List steden; Stad hier; Pad rest; int kosten; null

Methoden van Stad class Stad {String naam; int x, y; Collection wegen; Stad ( { } void teken (Graphics gr) { } naam =s; x = x0; y = y0; String s, int x0, int y0 ) wegen = new LinkedList ( ); gr. fillRect (x-5, y-5, 10, 10 ); gr. drawString (naam, x+6, y ); Utrecht

Methoden van Weg class Weg {Stad doel; int kosten; Weg ( { } void teken (Graphics gr) { } doel =s; kosten = k; Stad s, int k ) gr. drawLine ( bron.x, bron.y, doel.x, doel.y );, Stad bron ) wordt niet getekend

Methoden van Pad class Pad { Stad hier; Pad rest; int kosten; Pad ( { } void teken (Graphics gr) { } hier = s; rest = r; kosten = k; Stad s, Pad r, int k ) hier. teken (gr); totale kosten van het pad if (rest != null) kosten += rest.kosten; if (rest != null) { } rest. teken (gr); gr.drawLine( hier.x, hier.y, rest.hier.x, rest.hier.y );

Methoden van Netwerk class Netwerk { Collection steden; Netwerk ( ) { } void teken (Graphics gr) { } steden = new LinkedList ( ); for ( Stad s : steden ) { } s. teken (gr); for ( Weg w : stad.wegen ) w.Teken (gr)

Methoden van NetApplet class NetApplet { Netwerk netwerk; Stad stad1; Pad pad; init ( ) { } void paint (Graphics gr) { } netwerk = new Netwerk(); stad1=null; pad=null; netwerk. teken (gr); if (pad != null) pad. teken(gr); if (stad1 != null) stad1. teken(gr); gr. setColor (Color.red); gr. setColor (Color.blue);

Opbouw van het Netwerk nLees een file met regels zoals: stad Almelo stad Amersfoort stad Amsterdam stad Apeldoorn stad Arnhem weg Arnhem Zutphen29 weg Zutphen Deventer16 weg Deventer Zwolle31 weg Amsterdam Weesp14 weg Weesp Hilversum15 weg Hilversum Amersfoort 16 commando locatie kosten

Opbouw van het Netwerk void lees (BufferedReader input) { while ( (regel=input.readLine()) != null ) { Scanner sc = new Scanner(regel); String command = sc.nextToken(); if (command.equals (“stad”)) { } else { String naam = sc.next( ); int x = sc.nextInt( ); int y = sc.nextInt( ); this. bouwStad (naam, x, y ); this.bouwWeg( sc. next (), sc. next (), sc. nextInt ()); } } } throws Exception

Opbouw van het Netwerk void bouwStad (String naam, int x, int y) { } Stad st = new Stad(naam, x, y); void bouwWeg (String van, String naar, int kosten) { } steden. add (st); Stad st1 = this. vindStad (van); Stad st2 = this. vindStad (naar); st1. bouwWeg (st2, kosten); st2. bouwWeg (st1, kosten); Netwerk’s Stad’s void bouwWeg(Stad doel, int k) { } wegen. add ( new Weg(doel, k) ); class Stad {

Opbouw van het Netwerk Stad vindStad (String naam) { } for ( Stad st : steden ) { } if ( st.naam. equals (naam) ) return st ; return null ; Stad vindStad (int x, int y ) { } for ( Stad st : steden ) { } if ( return st ; return null ; x-st.x <5 && y-st.y <5 ) Math.abs ( )

Interactie in Net class NetApplet extends Applet implements MouseListener { Netwerk netwerk; Stad stad1; Pad pad; public void mousePressed (MouseEvent e) { } e.getX(), e.getY()netwerk. vindStad( );Stad s = if (stad1==null) else stad1 = s; pad = netwerk. zoekPad (stad1, s ); this. repaint (); { stad1 = null; } if ( s != null ) { } eerste klik of tweede klik?

Het zoek-algoritme maak een stapel van nog-niet-complete, maar veelbelovende paden Pad zoekPad (Stad begin, Stad eind) { Stack paden; paden = new Stack ();

Het zoeken begint... Pad pad; pad = new Pad(begin, null, 0); null 0 hij is niet groot... maar wel veelbelovend! paden. push (pad);

Onderzoek paden uit stapel... while ( ! paden.empty() ) { } Pad pad = paden. pop(); if (pad.hier==eind) return pad; beter = new Pad( paden. push(beter); pad. hier. wegen for ( Weg weg : ) { } weg.doel, pad, weg.kosten); return null;

Pas op: for ( Weg weg : pad.hier.wegen ) { } beter = new Pad( paden. push(beter); weg.doel, pad, weg.kosten); één van de wegen kom je net vandaan! niet in een kringetje zoeken! if ( ! pad. bevat (weg.doel) ) { }

while (... ) { pad =... if (compleet) return pad; for (...) if ( !kring ) paden.push(...) } return null; Niet de eerste oplossing, maar de beste zoeken! while (... ) { pad =... if (compleet) return pad; for (...) if ( !kring ) paden.push(...) } return null; beste = null; return beste; beste=pad;if (beter) beste=pad; && !zinloos)

Uitwerking nWat is “beter” ? nWat is “niet zinloos” ? if ( beste==null || pad.kosten < beste.kosten ) beste = pad; if ( beste==null || pad.kosten + weg.kosten < beste.kosten ) paden.push (new Pad (...) );

Verbetering van het algoritme nDe meest veelbelovende eerst onderzoeken nDus in volgorde van afstand tot naar pushen wegen = new TreeSet ( naar ); wegen.addAll(pad.hier.wegen); class Stad implements Comparator { { int compare( Weg a, Weg b) { return afstand(b.doel, this) – afstand(a.doel, this); } ordenen qua afstand tot doel

Routezoeker compleet!