Recursie…
De Mandelbrot Fractal
De werking… De verzameling natuurlijke getallen… 0 ∞-∞
De werking… Natuurlijke getallen ken men opvatten als een deelverzameling van de verzameling complexe getallen. 0 ∞-∞
Complexe / imaginaire getallen… Reëel deel Imaginair deel
Complexe / imaginaire getallen…
De werking… Het complexe vlak… Im Re a bi
Mandelbrot… Kwadrateer 2 complexe getallen:
Mandelbrot… Ga uit van het volgende recursieve verband: Begin met Z waarde 0 en bereken de nieuwe Z. Kwadrateer de nieuwe Z en vorm weer een nieuwe…..enz, enz…..doe dit een x aantal keer.
Mandelbrot… Wordt de afstand tot het 0 punt nu groter dan 2? Ja? Teken een wit pixel. Nee? Teken een zwart pixel. Im Re a bi
Gevolg… Im Re
Links… ndelbrotApplet.html knot.org/blue/Mandel.shtml
Fractals…
Recursieve & iteratieve algoritmen Iteratief algoritme: int TelAllesBijElkaarOp(int n) { int result=0; for(int i=1;i<=n;i++) result+=n; return result; }
Recursieve & iteratieve algoritmen Recursief algoritme: int TelAllesBijElkaarOp(int n) { int result=0; if(n==1)return 1; return(n+ TelAllesBijElkaarOp(n-1)); }
Recursieve & iteratieve algoritmen Recursief: zichzelf aanroepend. Iteratief: loops.
Recursieve & iteratieve algoritmen Recursief: Voordelen: Heeft het voordeel van wiskundige correctheid. Kan gebruikt worden om vanuit het niets een algoritme te bedenken. Nadelen: Gebruikt nogal wat geheugen. Soms erg moeilijk te bedenken / begrijpen.
complexiteitsontwikkeling bij iteratieve algoritmen… Tot nu toe: Bestaand iteratief algoritme Herhalingsfrequentie Complexiteitsontwikkeling for(int i=0;i<n;i++) ….. T(n)=23n+5……. O(n)…….
Problemen met de O notatie Bij if-else constructies complexiteitsontwikkeling onvoorspelbaar. Derhalve: Worst case gedrag bepalen. Best case gedrag bepalen. Indien mogelijk: statistiek en kansrekening gebruiken om gemiddelde gedrag te bepalen. Zie hoorcollege 1.
Complexiteitsontwikkeling bij recursieve algoritmen. Lastiger te bepalen. Analyseren van het aantal aanroepen: int TelAllesBijElkaarOp(int n) { int result=0; if(n==1)return 1; return(n+ TelAllesBijElkaarOp(n-1)); } Iedere aanroep leidt tot N extra aanroepen van TelAllesBijElkaarOp(n)
Complexiteitsontwikkeling bij recursieve algoritmen. int TelMeerBijElkaarOp(int n) { int result=0; if(n==1)return 1; return(n+ TelMeerBijElkaarOp(n-1)* TelMeerBijElkaarOp(n-2)); } Iedere aanroep leidt tot 2 extra aanroepen van TelAllesBijElkaarOp(n)
Complexiteitsontwikkeling bij recursieve algoritmen. int TelNogMeerBijElkaarOp(int n) { int result=0; if(n==1)return 1; else{ int result=0; for(int i=0;i<20;i++) { result+=TelNogMeerBijElkaarOp(n-i); } return result; } Waarschuwing: for loop aanwezig? Niet bijvoorbaad een iteratief algoritme!!
Recursieve & iteratieve algoritmen Iedere recursieve functie kan worden omgezet in een iteratieve functie en omgekeerd… int TelAllesBijElkaarOp(int n) { int result=0; if(n==1)return 1; return(n+ TelAllesBijElkaarOp(n-1)); } int TelAllesBijElkaarOp(int n) { int result=0; if(n==1)return 1; return(n+ TelAllesBijElkaarOp(n-1)); }
Verdeel & heers Hoe een algoritme te ontwerpen? Laten we daar eens een algoritme voor bedenken een meta algoritme…
Divide & Conquer Complexiteitsontwikkeling?
Divide & Conquer <O(n) O(n log n)
Grafentheorie Graaf Verzameling knopen al dan niet verbonden door takken, bijv:
Grafentheorie Graaf Knopen zijn abstracte objecten, bijv. Steden, computers, kruispunten,enz. Takken zijn “verbindingen”, bijv. Wegen, netwerkkabels, reistijden, enz. Zuiver abstract kan men knopen en takken omdraaien…betekenis?
Koningsberger bruggenprobleem Vraag: kun je alle bruggen één maal oversteken en in het beginpunt uitkomen? Kneiphof
Grafentheorie Volgens L. Euler ( ) Niet mogelijk Motivatie: Vorm het probleem om naar een graaf:
L. Euler: Graad van een knoop: Aantal takken dat aan de knoop zit Aantal takken dat incident is met de knoop Graad: 3 Graad: 5
L. Euler: Knopen met een even graad kunnen in een graaf worden opgenomen.
L. Euler: Alleen in grafen waarin alle knopen een even graad hebben is een Eulerse wandeling mogelijk. (Eulerse graaf) 2 knopen met oneven graad kunnen worden gebruikt, mits deze als begin en eindpunt worden gebruikt. (Semi Eulerse graaf)
Hamilton Wandeling door graaf: Alle knopen één maal bezoeken. Beginpunt gelijk aan eindpunt. Is bovenstaande mogelijk? Complexe vraag, want: Niet alle takken nodig. Soms bevat een Eulerse graaf een Hamiltons circuit… Soms niet…
Hamilton Hamiltonse graaf: Alle knopen éénmaal bezoeken. Vertrekpunt gelijk aan eindpunt Semi Hamiltonse graaf: Vertrekpunt niet gelijk aan eindpunt
Hamiltonse grafen… Hamiltons circuit Indien alle knopen in een cycle zitten. Cycle: Rondgaande wandeling. Beginpunt gelijk aan eindpunt.
Grafen… Hamiltonse graaf: Semi Hamiltonse graaf: Niet Hamiltonse graaf:
Grafen Is een graaf Hamilton? Semi Hamilton? Euler? Semi Euler? Moeilijk vast te stellen: NP probleem.
Gebruik van grafen Kunnen knopen in een plat vlak met elkaar verbonden worden zonder snijdende lijnen? printplaten. Het schaakspel paardensprongen. Navigatiesystemen kortste weg. Spelletjes C&C, Quake klonen. Computernetwerken…
De multigraaf… Bevat één of meer knopen. Bevat nul of meer takken. Elke tak grenst aan 2 knopen. Eén tak met aan beide kanten dezelfde knoop is toegestaan.
Multigrafen… Multigraaf met zelf loop Samenhangende multigraaf: Niet samenhangende multigraaf:
De gewone graaf… Tenminste één knoop. Ten hoogste één tak tussen twee knopen. Geen zelfloops.
De gerichte graaf Verbindingen hebben nu een richting. Het begrip graad vervangen door: Ingraad. Uitgraad.
De gewogen graaf Twee soorten: Takgewogen: Knoopgewogen
De opspannende boom Construeren uit samenhangende graaf. Verwijderen van alle takken die cycles veroorzaken.
De opspannende boom Regel: n knopen levert n-1 takken.
De minimum opspannende boom Construeren uit samenhangende takgewogen graaf. N-1 takken zodanig kiezen dat de kleinste waarden worden gebruikt
Zoektechnieken Standaard zoektechnieken: Breath first search Depth first search Heuristische zoektechnieken Generate & test Best first search Minimax Intersection search
Toepassingen Kortste / snelste route vinden. Indien aanwezig, oplossing bepalen. Spelletjes. Wiskundige bewijsvoering. Expertsystemen. (Mycin)
De state space
Breath first search
Laag 1 Laag 2 3
Breath first search Algoritme Genereer alle opvolgers uit de begin toestand. controleer deze opvolgers op oplossing. Oplossing gevonden? einde Oplossing niet gevonden? volgende laag
Depth first search
Evalueer huidige knoop Oplossing? Ja: einde. Nee: Opvolger mogelijk? Ja: genereer opvolger Depth first( opvolger) Nee: einde
Generate & test Genereer maar een of ander willekeurig pad / oplossing. Oplossing gevonden? Ja: einde Nee: generate & test
Generate & test
Best first search Heuristische zoektechniek Heures: gevoel. Waardeoordeel wordt toegekend aan iedere gegenereerde toestand.
Best first search
Geneer alle opvolgers uit huidige toestand. Evalueer alle opvolgers. Oplossing gevonden? Ja einde Nee Best first search (beste opvolger)
Minimax
Comp Mens Comp
Minimax Genereer alle opvolgers uit huidige toestand. Kies maximum Genereer alle mogelijke opvolgers uit maximum Kies minimum Minimax(minimum)
Probleempjes… oplossing Depth first search kan ontaarden in een oneindige loop… Oplossing: bijhouden waar je reeds geweest bent.
Probleempjes… Breath first search leidt tot enorme bomen (exponentiële complexiteitsontwikkeling…)