Implementatie Zoekboom

Slides:



Advertisements
Verwante presentaties

Advertisements

KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Hoofdstuk 8: Recursie.
Hoofdstuk 20: GEGEVENSSTRUCTUREN.
Van domeinklasse tot implementatie
Het ontwerpen van een klasse
Klassen en objecten.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 10: Omgaan met problemen.
Fibonacci & Friends Met dank aan Gerard Tel.
Inleidend probleem Data structuur (hiërarchie van classes)
Imperatief programmeren nProgramma bestaat uit nRunnen is opdrachten gegroepeerd in methoden één voor één uitvoeren te beginnen met main.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Datastructuren Sorteren, zoeken en tijdsanalyse
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Algoritme Inhoud: Definitie algoritme Recursieve algoritmes Opgaven
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.
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
Intermezzo: Queries op zoekbomen Datastructuren. Queries: hoe op te lossen We hebben: – Een zoekboom (gewoon, rood-zwart, AVL,…) – Een vraag / querie.
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 14.1 Algoritmen: Zoeken in een netwerk.
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 8: Gebruikersinterface © 2014, Gertjan Laan, versie 2.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
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.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Opbouw van het Netwerk void Lees (string filenaam ) { while ( (regel=sr.ReadLine()) != null ) { string [] r = regel.Split(" ", StringSplitOptions.RemoveEmpty.
Loops en errors Array's Random try catch for loop while loop do while loop.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
Bestanden Lezen Schrijven Afbeeldingen. Bestandstypen.txt.png eigen.
GUI & classes Een Gui in een class steken en het object gebruiken.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Informatie beoordelen If else Switch En Wiskunde.
Objectgeoriënteerd Programmeren (2)
…is eigenlijk overbodig!
Aanroep van een methode voert opdrachten uit in de body daarvan
ISensorEventListener
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Keuzeopdrachten
Hoofdstuk 9.2 Strings.
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Gameprogrammeren: Expressies
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Animatie
Gameprogrammeren: Methoden
vandaag èn vrijdag deadline maandag 12 dec.
Gameprogrammeren: Herhalingen
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Gameprogrammeren: Properties
OOS Object geOrienteerd Software-ontwerp - 5
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
Libraries, Platform Games
Gameprogrammeren: Recursie
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Modelleren en Programmeren voor KI Practicumopdracht 4: SAT Solver
Gameprogrammeren: Interfaces
Aanroep van een methode voert opdrachten uit in de body daarvan
Game: omgaan met tijd (Jewel-Jam)
Object Communication (Jewel Jam)
Eerste deeltentamen Nagekeken werk ligt voor in de zaal
Gameprogrammeren: Enemies in Tick Tick
Gameprogrammeren: Sprite sheets
Transcript van de presentatie:

Implementatie Zoekboom implementeert de interface class Boom : IColl { private string midden; 14 private Boom links, rechts; public bool Zoek(string s) { if (this==null) return false; Recursieve aanroep: de method roept zichzelf aan Recursieve aanroep: de method roept zichzelf aan if (s == this.midden) return true; if (s < this.midden) return links.Zoek(s); else return rechts.Zoek(s); } }

Analyse Benodigde tijd bij n elementen Ongeordende rij zoek n stappen voegtoe 1 stap Gesorteerde rij zoek 2log(n) stappen voegtoe n stappen De logaritmische zoektijd in een gesorteerde rij danken we aan het feit dat het zoekgebied in elke stap halveert. Bij zoeken in een zoekboom is dat ook zo: bij elke stap valt de helft af, dus de zoektijd is de logaritme van het aantal elementen in de boom. Omdat een element toevoegen aan een zoekboom op dezelfde manier verloopt als zoeken, kan ook het toevoegen in logaritmische tijd gebeuren. Dat is veel beter dan in een gesorteerde rij, waar het opschuiven van elementen veel tijd kost. Weliswaar kan het toevoegen in een ongeordende rij nog net iets sneller, maar daar duurt het zoeken juist weer erg lang. De zoekboom combineert dus de voordelen van de twee andere methoden. Zoekboom zoek 2log(n) stappen voegtoe 2log(n) stappen

Zoekboom wortel diepte 4 23 15 29 10 3 1 6 11 5 8 18 26 34 14 class Boom : IColl { private string midden; private Boom links, rechts; public int Diepte( ) { if (this==null) return 0; int d1 = links.Diepte(); int d2 = rechts.Diepte(); return 1+Math.Max(d1, d2); } public int Totaal( ) { if (this==null) return 0; int t1 = links.Totaal(); int t2 = rechts.Totaal(); return t1 + t2 + this.midden; } }

Propositie- Formule } /\ /\ \/ not /\ not /\ x \/ z y y z x y interface IFormule { Propositie- Formule string ToString(); void Verzamel(ISet<string>); bool Waarde(Valuatie v); } class ... : IFormule {...} /\ /\ \/ not /\ not /\ x \/ z y y z x y

SatSolver class Program { static void Main( ) { while (true) { try { String invoer = Console.ReadLine(); Iformule formule = Parser . ParseFormule (invoer); Valuatie valuatie = Solver . Vervulbaar (formule); if (valuatie==null) Console.WriteLine( "UNSAT" ); else Console.WriteLine( "SAT\n" + valuatie . ToString () ); } catch (Exception e) { Console.WriteLine( "FOUT " + e.Message ); } break; } // Console.ReadLine(); }

class Valuatie { SortedDictionary<string,bool> dict; void VoegToe(string variabele, bool waarde) { } bool GeefWaarde(string variabele) bool BevatWaarde(string variabele) string ToString( ) dict . Add (variabele, waarde); return dict[variabele]; dict . ContainsKey(variabele); string res = ""; foreach( KeyValuePair<string,bool> paar in dict ) res += paar.Key + "=" + paar.Value ; return res;

Propositie- Formule } /\ /\ \/ not /\ not /\ x \/ z y y z x y interface IFormule { Propositie- Formule string ToString(); void Verzamel(ISet<string>); bool Waarde(Valuatie v); } class ... : IFormule {...} /\ /\ \/ not /\ not /\ x \/ z y y z x y

class Solver { static Valuatie Vervulbaar (IFormule formule) { ISet<string> alleVars; alleVars= new HashSet<string>( ); formule . Verzamel ( alleVars ); Valuatie nogNiets = new Valuatie( ); return Solver.Vervul ( formule, .... , .... ); alleVars, nogNiets ); } static Valuatie Vervul (IFormule formule , ISet<string> variabelen, Valuatie valuatie) { if (variabelen . Count==0) return .....; else Roep de functie recursief aan met een kleinere set variabelen en een iets grotere valuatie tweemaal maar alleen als dat kansrijk is }

Propositie- Formule } /\ /\ \/ not /\ not /\ x \/ z y y z x y interface IFormule { Propositie- Formule string ToString(); void Verzamel(ISet<string>); bool MogelijkWaar(Valuatie v); } class ... : IFormule {...} /\ /\ \/ not /\ not /\ x \/ z y y z x y