Derde college complexiteit. 7 februari Zoeken

Vergelijkbare documenten
Vierde college complexiteit. 16 februari Beslissingsbomen en selectie

Vierde college complexiteit. 14 februari Beslissingsbomen

Vierde college complexiteit. 26 februari Beslissingsbomen en selectie Toernooimethode Adversary argument

Vijfde college complexiteit. 21 februari Selectie Toernooimethode Adversary argument

Zevende college complexiteit. 7 maart Mergesort, Ondergrens sorteren (Quicksort)

Tweede college complexiteit. 12 februari Wiskundige achtergrond

Zevende college complexiteit. 17 maart Ondergrens sorteren, Quicksort

Zesde college complexiteit. 19 maart Mergesort, Ondergrens sorteren Quicksort, Shellsort

Uitgebreide uitwerking Tentamen Complexiteit, juni 2017

Vierde college algoritmiek. 23/24 februari Complexiteit en Brute Force

Zevende college algoritmiek. 23/24 maart Verdeel en Heers

Zevende college algoritmiek. 24 maart Verdeel en Heers

Derde college algoritmiek. 22 februari Complexiteit Toestand-actie-ruimte

Zevende college Algoritmiek. 6 april Verdeel en Heers

Uitgebreide uitwerking Tentamen Complexiteit, juni 2018

Uitgebreide uitwerking Tentamen Complexiteit, mei 2007

Derde college algoritmiek. 23 februari Complexiteit Toestand-actie-ruimte

Achtste college algoritmiek. 8 april Dynamisch Programmeren

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek

Achtste college algoritmiek. 12 april Verdeel en Heers. Dynamisch Programmeren

Achtste college complexiteit. 2 april Polynoomevaluatie Matrixvermenigvuldiging Euler- en Hamiltonkringen

Tiende college algoritmiek. 26 april Gretige algoritmen

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

Elfde college algoritmiek. 18 mei Algoritme van Dijkstra, Heap, Heapify & Heapsort

Tiende college algoritmiek. 13/21 april Gretige Algoritmen Algoritme van Dijkstra

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Vierde college algoritmiek. 1 maart Toestand-actie-ruimte Brute Force

Eerste Toets Datastructuren 22 mei 2019, , Educ-β en Megaron.

Tiende college algoritmiek. 2 mei Gretige algoritmen, Dijkstra

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Datastructuren en Algoritmen

Tiende college algoritmiek. 4 mei Gretige Algoritmen Algoritme van Dijkstra

Opgaven Binair Zoeken en Invarianten Datastructuren, 4 mei 2016, Werkgroep.

2 Recurrente betrekkingen

Tiende college algoritmiek. 14 april Gretige algoritmen

Twaalfde college algoritmiek. 13 mei Branch & Bound Heap, Heapsort & Heapify

ALGORITMIEK: antwoorden werkcollege 5

Datastructuren en algoritmen voor CKI

Algoritmen, Datastructuren en Complexiteit ( en ) Uitwerkingen


Opgaven Heaps Datastructuren, 8 juni 2018, Werkgroep.

Vijfde college algoritmiek. 9 maart Brute Force. Exhaustive search

1 Recurrente betrekkingen

Tiende college algoritmiek. 14 april Dynamisch Programmeren, Gretige Algoritmen, Kortste Pad met BFS

ALGORITMIEK: antwoorden werkcollege 5

ALGORITMIEK: antwoorden werkcollege 5

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Inleiding Programmeren 2

Combinatoriek groep 1

Combinatoriek groep 2

Opgaven Fibonacci-getallen Datastructuren, 23 juni 2017, Werkgroep.

Tweede college algoritmiek. 12 februari Grafen en bomen

Elfde college algoritmiek. 16 mei Dijkstra, Gretige algoritmen en Branch & Bound

Elfde college complexiteit. 23 april NP-volledigheid III

Opgaven Binair Zoeken en Invarianten Datastructuren, 28 april 2017, Werkgroep.

Elfde college algoritmiek. 10 mei Algoritme van Dijkstra, Gretige Algoritmen

Programmeermethoden NA. Week 6: Lijsten

Examen Algoritmen en Datastructuren III

Opgaven Hash Tabellen Datastructuren, 15 juni 2018, Werkgroep.

Negende college algoritmiek. 15 april Dynamisch Programmeren

Amorized Analysis en Union-Find Algoritmiek

Bewijs door inductie

Vierde college algoritmiek. 2 maart Toestand-actie-ruimte Exhaustive Search

n-queens Local Search met Conflict Minimalizatie

Inleiding Programmeren 2

Programmeermethoden NA

Eerste Huiswerk Algoritmiek 18 februari 2015, uitwisselen, WerkCollege.

Datastructuren en algoritmen voor CKI

(On)Doenlijke problemen

Elfde college algoritmiek. 21 april Dijkstra en Branch & Bound

Opgaven Sommaties Datastructuren, 8 mei 2019, Werkgroep.

Datastructuren. Analyse van algoritmen. José Lagerberg. FNWI, UvA. José Lagerberg (FNWI, UvA) Datastructuren 1 / 46

Negende college algoritmiek. 6/7 april Dynamisch Programmeren

public boolean equaldates() post: returns true iff there if the list contains at least two BirthDay objects with the same daynumber

Uitwerking tentamen Algoritmiek 9 juni :00 17:00

Opgaven Analyse van Algoritmen 10 mei 2019, Datastructuren, Werkgroep.

Automaten. Informatica, UvA. Yde Venema

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

Vijfde college algoritmiek. 2/3 maart Exhaustive search

Divide & Conquer: Verdeel en Heers. Algoritmiek

Ieder tweetal heeft nodig: Een kopie van de slagschipspelletjes: 1. 1A, 1B voor spel A, 2B voor spel A, 3B voor spel 3

Algoritmiek. 2 februari Introductie

Zesde college algoritmiek. 18 maart Backtracking. Verdeel en Heers

Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 2 juni 2009, uur

Tweede Toets Datastructuren 29 juni 2016, , Educ-Γ.

Vijfde college algoritmiek. 17 maart Exhaustive search Graafwandelingen Backtracking

extra oefening algoritmiek - antwoorden

Uitwerking tentamen Algoritmiek 9 juli :00 13:00

Examen Algoritmen en Datastructuren III

Divide & Conquer: Verdeel en Heers. Algoritmiek

Tiende college algoritmiek. 3 mei Dynamisch programmeren Gretige Algoritmen Algoritme van Dijkstra

Programmeren & Correctheid

Tweede Toets Datastructuren 26 juni 2019, , Educ-β.

Getallensystemen, verzamelingen en relaties

Discrete Structuren. Piter Dykstra Sietse Achterop Opleidingsinstituut Informatica en Cognitie

1 Limiet van een rij Het begrip rij Bepaling van een rij Expliciet voorschrift Recursief voorschrift 3

8C080 deel BioModeling en bioinformatica

algoritmiek - antwoorden

Bomen. 8.8 ongerichte bomen 9.4 gerichte bomen ch 10. binaire bomen. deel 1. Negende college

Transcriptie:

College 3 Derde college complexiteit 7 februari 2017 Recurrente Betrekkingen Zoeken 1

Recurrente betrekkingen -1- Rij van Fibonacci: 0,1,1,2,3,5,8,13,21,... Vanaf het derde element: som van de voorgaande twee Een recurrente betrekking is een voorschrift om een waarde T(n) te berekenen door middel van zijn voorganger(s), dus bijvoorbeeld T(n 1), of T( n 2 ), of... Voor de Fibonacci-getallen geldt: T(n) = 0 n = 0 1 n = 1 T(n 1)+T(n 2) n > 1 2

Recurrente betrekkingen -2- Een ander voorbeeld van een recurrente betrekking: T(n) = { 1 n = 1 2T( n 2 )+n n = 2k > 1 Strategie: herhaalde substitutie en afleiden algemene vorm, of: Probeer wat termen door te rekenen: zie je een patroon? Bewijs de formule met volledige inductie Oplossing: T(n) = n+nlgn Θ(nlgn) 3

Recurrente betrekkingen -3- De vorige recurrente betrekking, maar nu voor algemenere n, dus niet alleen voor tweemachten: T(n) = { 1 n = 1 2T( n 2 )+n n > 1 Dan geldt: T(n) O(nlgn) (en overigens ook T(n) Θ(nlgn)). Dit kan bewezen worden door met behulp van volledige inductie bijvoorbeeld aan te tonen dat T(n) 2nlgn voor alle n 2. 4

Recurrente betrekkingen -4- En ten slotte nog twee voorbeelden om op te lossen. (i) T(n) = { 3 n = 1 T(n 1)+n 1 n > 1 Oplossing: T(n) = 3+ 1 2 n(n 1) (ii) T(n) = { 0 n = 1 2T( n 4 )+ n n = 4 k > 1 Oplossing: T(n) = nlog 4 n = 1 2 nlgn 5

Verder vandaag We bekijken een aantal zoekalgoritmen, waarvan we de complexiteit vergelijken. Met behulp van beslissingsbomen bewijzen we later een ondergrens op de complexiteit. Zoeken met behulp van sleutelvergelijkingen Zoekalgoritmen: Ongeordend Lineair zoeken (opgave 3) Geordend Lineair zoeken (opgave 4) Jump Search Binair Zoeken (opgave 5) 6

Zoeken Probleem Gegeven een waarde X en een array A, bestaande uit n elementen A[1],...,A[n]. Bepaal of X in A zit. Zo ja, geef de index terug, zo nee, geef -1 terug. We maken gebruik van sleutelvergelijkingen van de vorm: of if (X = A[i]) then // binaire vergelijking gevonden; else...; if (X = A[i]) then // drie-weg vergelijking gevonden; else if (X < A[i]) then...; else...; 7

Sleutelvergelijking Een sleutelvergelijking doet voor iedere aanroep maximaal twee ja/nee vergelijkingen Kost dus Θ(1) tijd per aanroep De drie-weg vergelijking kost in orde van grootte evenveel tijd als de vergelijking (X = A[i]) We tellen beide soorten sleutelvergelijkingen dan ook als één vergelijking 8

Ongeordend lineair zoeken Probleem Zoek X in een willekeurig array A = A[1],...,A[n]. Complexiteit van het probleem (opgave 3.e.) Elk algoritme dat een waarde X zoekt in een (willekeurig) array A met n elementen, en dat alleen gebruik maakt van sleutelvergelijkingen (X =,< A[i]), doet in de worst case ten minste n vergelijkingen. Algoritme en complexiteit Lineair zoeken doet in de worst case n vergelijkingen, en is dus optimaal. In het bewijs wordt expliciet gebruikt dat je geen informatie hebt over de invoer, behalve wat je uit de sleutelvergelijkingen leert. 9

OLZ: algoritme Algoritme (zie opgave 3): (1) index := 1; (2) while index n and A[index] X do (3) index := index+1; (4) od (5) if index n then (6) return index; (7) else (8) return 1; (9) fi basisoperatie 10

OLZ: complexiteit Best case Je kunt al bij de eerste vergelijking prijs hebben: Θ(1) Average case Laat q de kans zijn dat X in A voorkomt Iedere positie in A is even waarschijnlijk Dan worden er in de average case q 1 2 (n+1)+(1 q) n Θ(n) sleutelvergelijkingen gedaan Worst case Als X niet in A zit of helemaal achteraan: Θ(n) 11

Geordend lineair zoeken Probleem Zoek X in een oplopend gesorteerd array A, bestaande uit n elementen A[1],...,A[n]. Algoritme: (1) index := 1; (2) while index n and A[index] < X do (3) index := index+1; (4) od (5) if index n and X = A[index] then (6) return index; (7) else (8) return 1; (9) fi basisoperatie 12

GLZ: complexiteit De complexiteit van geordend lineair zoeken. Worst case: n sleutelvergelijkingen (Bij welke invoer gebeurt dit? En bij ongeordend zoeken?) Average case: n 2 + n n+1 +q (1 2 n n+1 ) Θ(n 2 ), met q de kans dat X in A voorkomt, en: 1. als X in A: alle n posities in A even waarschijnlijk 2. als X niet in A: alle n+1 gaten even waarschijnlijk zie ook opgave 4 13

Jump search A is weer oplopend gesorteerd; kies k met 1 k < n index := k; // index is altijd een k-voud // vergelijk X met A[k],A[2k],A[3k],... while index n and A[index] < X do index := index+k; od if index n // A[index k] < X A[index] lineair zoeken van X in A[index k +1]...A[index]; else // A[index k] < X A[n] lineair zoeken van X in A[index k +1]...A[n]; fi 14

JS: complexiteit Worst case: n +k sleutelvergelijkingen k Beste keus: k = n. Dan doet Jump sort in het slechtste geval Θ( n ) sleutelvergelijkingen. Dat is beter dan geordend lineair zoeken. Vraag: kan zoeken in een geordend array nog beter? Antwoord: Ja, namelijk binair zoeken. 15

(Werk)college - Volgende college: dinsdag 14 februari, 11:15 13:00, zaal 174 - Eerste werkcollege: dinsdag 7 februari, 13:45 15:30, zaal 405, 408 - liacs.leidenuniv.nl/ graafjmde/comp/ 16