Fibonacci & Friends Met dank aan Gerard Tel.

Slides:



Advertisements
Verwante presentaties
H3 Tweedegraads Verbanden
Advertisements

Sudoku puzzels: hoe los je ze op en hoe maak je ze?
Gelijkmatige toename en afname
Het algoritme van Euclides
H 22: Kosten van een duurzaam produktiemiddel (dpm)
Omrekenen van oppervlakte- , en inhoudsmaten
Differentie vergelijkingen differentie vergelijkingen
H1 Basis Rekenvaardigheden
dia's bij lessenserie Pythagoras ± v Chr.
Datastructuren Quicksort
Hoofdstuk 8: Recursie.
Een paar programma’s met een aantal basisprincipes.
Uitwerking tentamen Functioneel Programmeren 29 januari 2009.
Tangens In een rechthoekige driehoek kun je met tangens werken.
Datastructuren Analyse van Algoritmen en O
Datastructuren Analyse van Algoritmen en O
vwo C Samenvatting Hoofdstuk 13
Herleiden (= Haakjes uitwerken)
Datastructuren Onderwerp 10
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
Datastructuren Zoekbomen
1 Datastructuren Heapsort College 4. 2 Vandaag  Kort: ADT vs Datastructuur  Heaps en Heapsort  Tijd over: ondergrenzen voor sorteren; nog sneller sorteren.
Cryptografie workshop Wiskunde D-dag 6 juni 2008
1 Datastructuren Zoekbomen II Invoegen en weglaten.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen (II) College 6.
vwo B Samenvatting Hoofdstuk 1
Regelmaat in getallen … … …
De grafiek van een lineair verband is ALTIJD een rechte lijn.
Differentieer regels De afgeleide van een functie f is volgens de limietdefinitie: Meestal bepaal je de afgeleide niet met deze limietdefinitie, maar.
Differentieer regels De afgeleide van een functie f is volgens de limietdefinitie: Meestal bepaal je de afgeleide niet met deze limietdefinitie, maar.
Regelmaat in getallen (1).
1 het type x² = getal 2 ontbinden in factoren 3 de abc-formule
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 5 Cees Witteveen.
1 Datastructuren Quicksort en andere sorteermethoden College 3.
1 Datastructuren Skiplists. 2 Skiplists  Vrij eenvoudige datastructuur  “Makkelijker” dan gebalanceerde bomen  Kunnen hetzelfde als gebalanceerde bomen.
1 Optuigen van datastructuren 2 Dynamische order statistics (2)
Optuigen van datastructuren
1 Datastructuren Heapsort (2e deel) College 5. 2 Vandaag  Heaps en Heapsort  (eind)  Nog sneller sorteren:  Ondergrenzen  Linair sorteren.
Aristid Lindenmayer Hongaar, werkte in Utrecht studie naar de groei van algen en andere levende wezens: L-systemen kan ook mooie regelmatige.
Hogere Wiskunde Rijen en Reeksen Sommeren College week 3
ribwis1 Toegepaste wiskunde Lesweek 2
WIS21.
ribwis1 Toegepaste wiskunde Lesweek 01 – Deel B
havo A Samenvatting Hoofdstuk 3
Exponentiële functies en logaritmische functies
Statistiekbegrippen en hoe je ze berekent!!
Optuigen van datastructuren Datastructuren Onderwerp 11.
Datastructuren Sorteren, zoeken en tijdsanalyse
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
H4 Differentiëren.
H2 Lineaire Verbanden.
Hoofdstuk 9 havo KWADRATEN EN LETTERS
Vergelijkingen oplossen
ABC formule Algemeen Voorbeeld: Herleid naar: Nu volgorde veranderen:
Intermezzo: Queries op zoekbomen Datastructuren. Queries: hoe op te lossen We hebben: – Een zoekboom (gewoon, rood-zwart, AVL,…) – Een vraag / querie.
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 6 Cees Witteveen.
Gecijferdheid les 1.4 Grootst gemene deler Kleinst gemene veelvoud
Hoorcollege 1: efficiëntie en complexiteitsontwikkeling.
Minimum Opspannende Bomen Algoritmiek. 2 Inhoud Het minimum opspannende bomen probleem Een principe om een minimum opspannende boom te laten groeien Twee.
Doorzoeken van grafen Algoritmiek. Algoritmiek: Divide & Conquer2 Vandaag Methoden om door grafen te wandelen –Depth First Search –Breadth First Search.
Netwerkstroming Algoritmiek. 2 Vandaag Netwerkstroming: definitie en toepassing Het rest-netwerk Verbeterende paden Ford-Fulkerson algoritme Minimum Snede.
Divide & Conquer: Verdeel en Heers vervolg Algoritmiek.
Minimum Opspannende Bomen
WISKUNDE EN KUNST WISKUNDE EN KUNST Ed Brinksma
Recursie in de wiskunde
Wiskunde A of wiskunde B?.
Nim, een strategisch spelletje
GGD en KGV.
Tweedegraadsfuncties
Transcript van de presentatie:

Fibonacci & Friends Met dank aan Gerard Tel

Inhoud Fibonaccigetallen Toepassing voor AVL-bomen …

Konijnen (Voorbeeld uit De Telduivel) Elk paar konijnen van twee maanden of ouder krijgt elke maand twee kinderen Hoeveel konijnen zijn er in maand i? Fibonacci-getal!

De maanden Maand 1: 1 Maand 2: 1 Maand 3: 2 (beginpaar krijgt kinderen) Maand 4: 3 (beginpaar krijgt kinderen) Maand 5: 5 (alle paren die er in maand 3 waren krijgen kinderen) Maand 6: 8 (alle paren die er in maand 4 waren krijgen kinderen)

Recurrente betrekking A(1)=1 A(2)=1 Als i > 2 dan A(i) = A(i – 1) + A(i – 2) Reeks getallen: 1,1,2,3,5,8,13,21,34,55, … Heet de reeks Fibonaccigetallen

Notatie f(k) = k-de Fibonaccigetal f(0) = 0 Dus f(0)=0; f(1)=1; f(k) = f(k-1)+f(k-2) als k>1 0, 1, 1, 2, 3, 5, …

Fibonacci Italiaans wiskundige (1170-1250), Pisa Leerboeken (o.a. decimaal getallenstelsel voor handelaars) Getaltheorie Eerste Europeaan met Fibonaccirij (al eerder in Indiase wiskunde bekend)

Toepassingen van Fibonaccirij In de natuur: o.a. schelpen, zonnebloemen In de wiskunde In de informatica Hier: analyse van AVL-bomen In de kunst en architectuur (verband met gulden snede) Mooi voorbeeld van recurrente betrekking

Euclides Grootste gemene deler Bijv.: ggd(30,20) = 10 ggd(75,33) = 3 Toepassing o.a. in cryptografie (bijv. Public key cryptografie gebaseerd op priemfactoren…) Hoe vind je de ggd van twee gegeven positieve integers snel?

Simpele methode Gegeven positieve integers x, y Gevraagd: bereken ggd(x,y) Methode 1: ontbind x en y in priemfactoren Kijk welke priemfactoren overeenkomen

Voorbeeld 60 = 2 * 2 * 3 * 5 72 = 2 * 2 * 2 * 3 * 3 2, 2, 3 gemeen, dus ggd(60,72) = 2 * 2 * 3 = 12

Methode 2: Algoritme van Euclides ... maak een rij getallen, beginnend met x en y, en elk volgend getal is: het laatste getal modulus het een-na-laatste getal ...

Euclides EuclidesGGD(x, y) Rest bij deling Vb: 60, 36 while (y != 0) do z = x mod y x = y; y = z; return x Rest bij deling Vb: 60, 36 36, 24 24, 12 12, 0 Dus antwoord 12

Soms gaat ‘t snel, soms niet 240, 147 147, 93 93, 54 54, 39 39, 15 15, 9 9, 6 6, 3 3, 0 Acht stappen Antwoord 3 Hoeveel stappen zijn er nodig?

Lemma Als we k delingen nodig hebben om de ggd van twee getallen a en b te berekenen met a>b, dan is a ³ f(k+1). (k+1)e Fibonaccigetal

Bewijs (1): definitie a-reeks Noem de resten die we krijgen van achteraf a0 a1 … ak-1 en zet ak = b en ak+1 = a Vb. a0 = 0; a1 = 3; a2 = 6; a3 = 9; a4 = 15; a5=39; a6 = 54; a7 = 93; a8 = 147; a9 = 240 240, 147 147, 93 93, 54 54, 39 39, 15 15, 9 9, 6 6, 3 3, 0

Bewijs (2): eigenschappen a-reeks a0 = 0; a1 > 0 (vanwege Euclides-algoritme) a2 > 1, want delen door 1 geeft rest 0 dus a2 = 1 geeft a1 = 0 k> 2: ak ³ ak-1 + ak-2 Omdat ak mod ak-1 = ak-2 en ak > ak-1 Zie algoritme en manier waarop we de a-reeks maakten Met inductie naar k volgt nu: ak ³ f(k) QED

Eigenschappen van Fibonacci getallen (1)

Eigenschappen van Fibonacci getallen (2) f(-1) = f(1) – f(0) = 1 Bewijzen met inductie meestal met twee basisgevallen Stelling: f(n+k) = f(k)*f(n+1)+f(k-1)*f(n) Dit heet de Fibonacci Increment Stelling Bewijs Basisgeval k=0: f(0)*f(n+1)+f(-1)*f(n)= 0*f(n+1)+1*f(n)=f(n) = f(n+0) Basisgeval k=1: f(1)*f(n+1) + f(0)*f(n+1)= 1*f(n+1)+0*f(n)= f(n+1) Inductiestap: ..

Inductiestap van f(n+k) = f(k)*f(n+1)+f(k-1)*f(n) We nemen aan dat dit geldt voor alle kleinere waarden van k: in het bijzonder voor k-1 en k-2: f(n+k-1) = f(k-1)*f(n+1)+f(k-2)*f(n) f(n+k-2) = f(k-2)*f(n+1)+f(k-3)*f(n) Nu: f(n+k) = f(n+k-1)+f(n-k-2) = f(k-1)*f(n+1)+f(k-2)*f(n) + f(k-2)*f(n+1) + f(k-3)*f(n) = (f(k-1)+f(k-2))f(n+1) + (f(k+2)+f(k+3)*f(n) = f(k)*f(n+1) + f(k-1)*f(n) We gebruikten de Inductiehypothese en we gebruiken de definitie van de Fibonaccirij

Oneven Fibonaccigetallen op oneven posities sommeren tot volgende Fibonaccigetal: 0 1 1 2 3 5 8 13 21 34 1 2 5 13 hebben samen som 34

Kwadraten f(2n+1) = f(n+n+1) = f(n+1)*f(n+1) + f(n)*f(n) = f(n+1)2 + f(n)2

Waarde van f(n) Hoe groot is eigenlijk f(n) Soort exponentieel gedrag Simpel: f(n) £ 2n Met inductie Ook simpel: f(n) ³ 2n/2 = (wortel van 2)n Kunnen we preciezer zijn?

Exponentieel gedrag preciezer Stel eens dat g(n) = qn Voor een functie g die voldoet aan g(n)=g(n-1)+g(n-2) voor alle n Dan dus: qn = qn-1+qn-2 Deel door qn-2 geeft: q2 = q + 1 Oplossen met abc-formule geeft of

Exponentieel gedrag Schrijf j = (1 + sqrt(5))/2 en j = ongeveer 1.618 j’ = ongeveer -0.618 De rij f(n)=jn voldoet aan f(n)=f(n-1)+f(n-2) Maar de beginwaarden kloppen niet…

Combinatiestelling Voor elk paar getallen A en B voldoet de rij f(n) = A jn + B j’ n aan de eigenschap f(n)=f(n-1)+f(n-2) Eenvoudig uitschrijven na wat we weten… Fibonaccirij is ook van deze vorm Reken uit A en B: n= 0: f(0)=0 = A j0 + B j’0 = A+B n= 1: f(1)=1 = A j1 + B j’1 = A j + B j’ Door oplossen krijg je A = 1/sqrt(5); B= -1/sqrt(5)

Conclusie Deze waarden zijn voor elke integer n een geheel getal!

Conclusie vervolg j’n gaat snel naar 0 en is altijd kleiner dan 1 want j’ is ongeveer -0.618 De term j’n kan dus alleen de afronding beinvloeden van de formule voor f(n) en f(n) is dus ongeveer

Euclides Hoe lang duurt het algoritme van Euclides? Als we ons grootste getal a bestaat uit r bits, en we doen k delingen dan f(k+1) £ a £ 2r 1/ sqrt(5) jk £ 2r jk £ 2r * sqrt(5) k £ r/log(j) +O(1) log(j) is ongeveer 0.694 (als ik ‘t goed heb uitgerekend)

AVL-bomen Het minimaal aantal knopen in een AVL-boom met hoogte h voldoet zo ongeveer aan de eigenschappen van een Fibonaccirij Stel A(h) is minimum aantal knopen van een AVL-boom met diepte h Kijk naar wortel. Linker en rechterdeelboom hebben hoogte h-1 of h-2 en minstens eentje heeft hoogte h-1 Dus A(h) = A(h-1)+A(h-2)+1 (eentje voor de wortel zelf) Wat moeten we doen met de +1? Een simpel trucje…

AVL en Fibonacci We weten A(h)=A(h-1)+A(h-2)+1 Schrijf nu B(h) = A(h) + 1 Nu geldt: B(h) = A(h-1)+1 + A(h-2)+1 = B(h-1)+B(h-2) Dus B is een soort Fibonacci-rij, met misschien andere beginwaarden En is dus te schrijven als lineaire combinatie van jn en j’n, en de laatste term gaat naar 0 voor grote n. Dus A(h) = Q(jn) Afgerond: A(h) = O(1.6181h) en A(h)=W(1.6180h)

Scherpere grens op hoogte AVL-boom A(h) = O(1.6181h) en A(h)=W(1.6180h) A(h) = Q(jn) A(h) was minimum aantal knopen in AVL-boom met hoogte h Voor elke AVL-boom met n knopen en hoogte h geldt dat n ³ A(h) = W(1.6180h) Dus log n ³ log (Q(jh))= h * log(j) + Q(1) h £ log n / log(j) + Q(1) En dus h £ 1.44 log n (ongeveer)

De gulden snede Het getal j speelt een rol in de kunst en architectuur Aangenomen wordt dat afstanden die zich als 1: j verhouden er mooi uit zien.

Andere recurrenties Voor ‘t oplossen van andere “exponentiele” recurrente betrekkingen zijn er allerlei methoden Voorbeeldje Onafhankelijke deelverzameling in graaf Stel knopen die allemaal geen kant onderling hebben

Onafhankelijke deelverzameling Deelverzameling knopen die onderling allemaal geen kant gemeen hebben Probleem: zoek een zo groot mogelijke voor gegeven graaf

Algoritme if er is een knoop v met geen buren of maar 1 buur then Recursief zoek de beste oplossing S als we v weglaten Return S + {v} else kies een knoop v Recursief zoek de beste oplossing T als we v en alle buren van v weglaten Return de beste: S of T+{v}

Exponentiele algoritmen Dit soort algoritmen is exponentieel Tijd is iets van O(cn) voor een getal c tussen 1 en 2 Hoe lager c hoe beter Hoe vinden we een grens?

Analyse Schrijf: Aantal vertakkende recursieve aanroepen is T(n) T(n) £ T(n-1)+T(n-3)+1 Want in 1 geval laten we 1 knoop weg, in andere geval laten we minstens 3 knopen weg Schrijven we Q(n)=T(n)+1 dan Q(n) £ Q(n-1)+Q(n-3) We willen e Stel Q(n) £ a*cn Dan a* cn £ a* cn-1 + a* cn-3

Vervolg Dan a* cn £ a* cn-1 + a* cn-3 Deel a eruit: cn £ cn-1 + cn-3 Deel door cn: 1 £ c-1 + c-3 Los de vergelijking 1 = c-1 + c-3 op, bijvoorbeeld met Mathematica, Maple, Excel Solver. Of natuurlijk analytisch… Excel geeft mij 1.4656 Dus algoritme gebruikt tijd O(1.4656n) Veel betere algoritmen bestaan (eerste stap is wegwerken van knopen met twee buren); heel veel van de analyse is op dit principe gebaseerd…

Conclusie Fibonaccigetallen Hoe bepaal je het soort exponentieel gedrag van dit soort reeksen en dit soort recurrente betrekkingen?