Grafen en algoritmen - Combinatorische algoritmen en ...
Grafen en algoritmen - Combinatorische algoritmen en ...
Grafen en algoritmen - Combinatorische algoritmen en ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Graf<strong>en</strong></strong> <strong>en</strong> algoritm<strong>en</strong><br />
Inleiding tot algoritm<strong>en</strong><br />
Algoritmische complexiteit<br />
Voorstell<strong>en</strong> van graf<strong>en</strong><br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.1/29
Inleiding tot algoritm<strong>en</strong><br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.2/29
E<strong>en</strong> puzzel<br />
U2 concert<br />
hoogst<strong>en</strong>s 2 person<strong>en</strong> tegelijk overstek<strong>en</strong><br />
1 zaklamp, meeg<strong>en</strong>om<strong>en</strong> door persoon<br />
wandelsnelheid:<br />
Bono: 1 minuut om over te stek<strong>en</strong><br />
Edge: 2 minut<strong>en</strong> om over te stek<strong>en</strong><br />
Adam: 5 minut<strong>en</strong> om over te stek<strong>en</strong><br />
Larry: 10 minut<strong>en</strong> om over te stek<strong>en</strong><br />
17 minut<strong>en</strong> totale tijd beschikbaar<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.3/29
E<strong>en</strong> puzzel (2)<br />
Vrag<strong>en</strong><br />
Bepaal e<strong>en</strong> oplossing voor het probleem<br />
Geef e<strong>en</strong> algem<strong>en</strong>e oplossingsmethode<br />
Waarom geeft Microsoft dergelijke opgave?<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.4/29
E<strong>en</strong> raadspelletje<br />
Hoger-lager<br />
X kiest getal x tuss<strong>en</strong> 1 <strong>en</strong> n<br />
Y doet e<strong>en</strong> gok y, X geeft feedback:<br />
“hoger” (x > y); “lager” (x < y);<br />
“gerad<strong>en</strong>” (x = y)<br />
herhaal totdat gerad<strong>en</strong><br />
Opgave<br />
ontwerp strategie voor Y<br />
formuleer strategie<br />
in zo weinig mogelijk stapp<strong>en</strong> rad<strong>en</strong><br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.5/29
Raadspelletje (2)<br />
Formulering in pseudocode<br />
Input: getal n > 1, te rad<strong>en</strong> 1 ≤ x ≤ n<br />
Output: strategie voor rad<strong>en</strong> van x<br />
1: Stel x ← n <strong>en</strong> x ← 1<br />
2: while nog niet gerad<strong>en</strong> do<br />
3: Stel y ← (x + x)/2<br />
4: if y = x th<strong>en</strong><br />
5: gerad<strong>en</strong>!<br />
6: else if y < x th<strong>en</strong><br />
7: Stel x ← y<br />
8: else<br />
9: Stel x ← y<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.6/29
Raadspelletje (3)<br />
Correctheid van strategie<br />
bijhoud<strong>en</strong> interval [x,x] dat te zoek<strong>en</strong> x bevat<br />
bij begin: [1,n]<br />
in elke stap: verklein<strong>en</strong> van interval<br />
er geldt: voor willekeurige y ∈ [x,x]<br />
als y < x, dan x ∈ [x,y]<br />
als y > x, dan x ∈ [y,x]<br />
hier nem<strong>en</strong> we: midd<strong>en</strong> van interval<br />
verderzoek<strong>en</strong> in gereduceerd interval<br />
interval wordt uiteindelijk triviaal<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.7/29
Raadspelletje (4)<br />
Aantal stapp<strong>en</strong> voor rad<strong>en</strong> van x ∈ [1, 512]?<br />
hoogst<strong>en</strong>s 9 stapp<strong>en</strong><br />
Argum<strong>en</strong>tatie<br />
in elke stap “halveert” l<strong>en</strong>gte van interval<br />
aantal stapp<strong>en</strong> vooraleer l<strong>en</strong>gte 1?<br />
Algeme<strong>en</strong><br />
512 → 256 → 128 → 64 → 32 → 16 → 8 → 4 → 2 → 1<br />
merk op: 512 = 2 9 ; of ook: 9 = log 2 512<br />
rad<strong>en</strong> x ∈ [1,n] in hoogst<strong>en</strong>s ⌈log 2 n⌉ stapp<strong>en</strong><br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.8/29
Raadspelletje (5)<br />
Toepassing: binaire zoekmethode<br />
opzoek<strong>en</strong> in gesorteerde data<br />
Uitbreiding<br />
onderstel bov<strong>en</strong>gr<strong>en</strong>s interval niet gek<strong>en</strong>d<br />
strategie?<br />
aantal stapp<strong>en</strong>?<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.9/29
Voorbeeld<br />
Probleem<br />
gegev<strong>en</strong>: e<strong>en</strong> rij getall<strong>en</strong><br />
gevraagd: bepaal getal dat meeste voorkomt<br />
in deze rij<br />
Vrag<strong>en</strong><br />
mogelijke strategieën?<br />
welke is de beste strategie?<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.10/29
Algoritmische complexiteit<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.11/29
Algoritmische complexiteit<br />
Asymptotische analyse<br />
theoretische studie van efficiëntie van e<strong>en</strong><br />
algoritme wanneer probleem groot wordt<br />
schattingstechniek<br />
Werkwijze<br />
uitdrukk<strong>en</strong> van uitvoeringstijd in functie van<br />
probleemgrootte<br />
bepal<strong>en</strong> van dominante factor in uitdrukking<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.12/29
Probleemgrootte<br />
Karakterisatie van probleem<br />
a.h.v. beperkt aantal relevante groothed<strong>en</strong><br />
die uitvoeringstijd beïnvloed<strong>en</strong><br />
die maat voor omvang van probleem vorm<strong>en</strong><br />
meestal afhankelijk van grootte van input<br />
Voorbeeld<strong>en</strong><br />
sorter<strong>en</strong> van rij van n getall<strong>en</strong><br />
verwerk<strong>en</strong> van n getall<strong>en</strong> in [0,k]<br />
berek<strong>en</strong><strong>en</strong> van n beduid<strong>en</strong>de cijfers van π<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.13/29
Tijdscomplexiteit<br />
Inschatt<strong>en</strong> van uitvoeringstijd<br />
uitdrukk<strong>en</strong> als het aantal uitgevoerde<br />
elem<strong>en</strong>taire bewerking<strong>en</strong> (stapp<strong>en</strong>)<br />
in functie van probleemgrootte n<br />
Theoretisch model (sequ<strong>en</strong>tiële uitvoering)<br />
standaard instructieset (optelling, . . . )<br />
elke basisinstructie kost 1 tijdse<strong>en</strong>heid<br />
integers hebb<strong>en</strong> vast formaat<br />
RAM geheug<strong>en</strong> heeft onbeperkte capaciteit<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.14/29
Asymptotische notaties<br />
Asymptotische notatie<br />
vergelijk<strong>en</strong> gedrag op ∞ van 2 functies f <strong>en</strong> g<br />
functies f(n) <strong>en</strong> g(n) gedefinieerd op N<br />
onderstell<strong>en</strong> dat f <strong>en</strong> g asymptotisch<br />
niet-negatief<br />
immers, voorstell<strong>en</strong> van uitvoeringstijd<strong>en</strong><br />
Verscheid<strong>en</strong>e asymptotische notaties<br />
O-notatie, Ω-notatie, Θ-notatie o-notatie,<br />
ω-notatie<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.15/29
O-notatie<br />
Definitie<br />
f asymptotisch naar bov<strong>en</strong> begr<strong>en</strong>sd door g<br />
f(n) = O(g(n)) ⇔<br />
∃c,n0 > 0, ∀n ≥ n0 : 0 ≤ f(n) ≤ cg(n)<br />
Betek<strong>en</strong>is<br />
f(n) is naar bov<strong>en</strong> begr<strong>en</strong>sd door e<strong>en</strong><br />
veelvoud van g(n), voor voldo<strong>en</strong>de grote n<br />
orde van to<strong>en</strong>ame van f is kleiner dan of<br />
gelijk aan orde van to<strong>en</strong>ame van g<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.16/29
Ω-notatie<br />
Definitie<br />
f asymptotisch naar onder begr<strong>en</strong>sd door g<br />
f(n) = Ω(g(n)) ⇔<br />
∃c,n0 > 0, ∀n ≥ n0 : 0 ≤ cg(n) ≤ f(n)<br />
Betek<strong>en</strong>is<br />
f(n) is naar onder begr<strong>en</strong>sd door e<strong>en</strong><br />
veelvoud van g(n), voor voldo<strong>en</strong>de grote n<br />
orde van to<strong>en</strong>ame van f is groter dan of gelijk<br />
aan orde van to<strong>en</strong>ame van g<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.17/29
Θ-notatie<br />
Definitie<br />
f <strong>en</strong> g hebb<strong>en</strong> hetzelfde asymptotische<br />
gedrag<br />
f(n) = Θ(g(n)) ⇔<br />
f(n) = O(g(n)) ∧ f(n) = Ω(g(n)) ⇔<br />
∃c1,c2,n0 > 0, ∀n ≥ n0 :<br />
c1g(n) ≤ f(n) ≤ c2g(n)<br />
Betek<strong>en</strong>is<br />
orde van to<strong>en</strong>ame van f is dezelfde als orde<br />
van to<strong>en</strong>ame van g<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.18/29
o-notatie<br />
Definitie<br />
f niet-scherp asymptotisch naar bov<strong>en</strong><br />
begr<strong>en</strong>sd door g<br />
f(n) = o(g(n)) ⇔<br />
f(n) = O(g(n)) ∧ f(n) = Θ(g(n)) ⇔<br />
∃c,n0 > 0, ∀n ≥ n0 : 0 ≤ f(n) < cg(n)<br />
Betek<strong>en</strong>is<br />
orde van to<strong>en</strong>ame van f is strikt kleiner dan<br />
orde van to<strong>en</strong>ame van g<br />
f(n) wordt insignificant teg<strong>en</strong>over g(n) voor<br />
grote n Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.19/29
ω-notatie<br />
Definitie<br />
f niet-scherp asymptotisch naar b<strong>en</strong>ed<strong>en</strong><br />
begr<strong>en</strong>sd door g<br />
f(n) = ω(g(n)) ⇔<br />
f(n) = Ω(g(n)) ∧ f(n) = Θ(g(n)) ⇔<br />
∃c,n0 > 0, ∀n ≥ n0 : 0 ≤ cg(n) < f(n)<br />
Betek<strong>en</strong>is<br />
orde van to<strong>en</strong>ame van f is strikt groter dan<br />
orde van to<strong>en</strong>ame van g<br />
g(n) wordt insignificant teg<strong>en</strong>over f(n) voor<br />
grote n Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.20/29
Werk<strong>en</strong> met asymptotische notatie<br />
Asymptotisch gedrag van f <strong>en</strong> g vergelijk<strong>en</strong><br />
bepaal lim<br />
n→∞<br />
Mogelijkhed<strong>en</strong><br />
f(n)<br />
g(n)<br />
limiet is nul: f(n) = o(g(n))<br />
limiet is +∞: f(n) = ω(g(n))<br />
limiet is constante = 0: f(n) = Θ(g(n))<br />
limiet bestaat niet: ge<strong>en</strong> conclusie via<br />
limietregel<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.21/29
Rek<strong>en</strong>regels<br />
1. f(n) = Θ(g(n)) ∧ g(n) = Θ(h(n))<br />
⇒ f(n) = Θ(h(n))<br />
2. f(n) = Θ(k × g(n)), voor constante k<br />
⇒ f(n) = Θ(g(n))<br />
3. f1(n) = Θ(g1(n)) ∧ f2(n) = Θ(g2(n))<br />
⇒ f1(n) + f2(n) = Θ(max(g1(n),g2(n)))<br />
4. f1(n) = Θ(g1(n)) ∧ f2(n) = Θ(g2(n))<br />
⇒ f1(n) × f2(n) = Θ(g1(n) × g2(n))<br />
(analoog voor andere notaties)<br />
(te bewijz<strong>en</strong> via definities)<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.22/29
Werk<strong>en</strong> met asymptotische notatie<br />
Informeel<br />
verwaarloz<strong>en</strong> constant<strong>en</strong><br />
100n = Θ(n)<br />
verwaarloz<strong>en</strong> lagere-ordeterm<strong>en</strong> in veelterm<br />
n 3 + 10n 2 + 400n + 8000 = Θ(n 3 )<br />
Intuïtieve verklaring<br />
lagere-ordeterm<strong>en</strong> word<strong>en</strong> insignificant voor<br />
grote n<br />
voorbeeld: voor n = 1000<br />
n 3 + 10n 2 + 400n + 8000 = 1 010 408 000<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.23/29
Standaardfuncties<br />
Polynomiale functie<br />
leid<strong>en</strong>de term bepaalt orde van to<strong>en</strong>ame<br />
Logaritmische functie<br />
stijgt trager dan elke polynomiale functie<br />
Expon<strong>en</strong>tiële functie<br />
stijgt sneller dan elke polynomiale functie<br />
Faculteit, Fibonacci-getall<strong>en</strong><br />
stijg<strong>en</strong> minst<strong>en</strong>s expon<strong>en</strong>tieel<br />
(te bewijz<strong>en</strong> via limietregel)<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.24/29
Voorbeeld: schaakspel<br />
Leg<strong>en</strong>de<br />
uitvinder schaakspel mocht e<strong>en</strong> w<strong>en</strong>s do<strong>en</strong><br />
hij w<strong>en</strong>ste rijstkorrels op schaakbordvakjes<br />
<strong>en</strong> de koning ging failliet. . .<br />
1 2 4 8 16 32 64<br />
...<br />
??<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.25/29
Expon<strong>en</strong>tiële functies<br />
Aantal rijstkorrels op laatste vakje?<br />
is 2 63<br />
Hoeveel is 2 63 ?<br />
2 10 = 1024 is ongeveer 10 3<br />
2 63 = (2 10 ) 6 × 2 3 is ongeveer 8 × 10 18<br />
Hoeveel is 10 18 ?<br />
10 18 : #graankorrels geproduceerd op aarde<br />
10 12 : jaarlijkse wereldgraanproductie<br />
(website: “The World of Big Numbers”)<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.26/29
Vergelijk<strong>en</strong> van algoritm<strong>en</strong><br />
Probleemstelling<br />
meerdere algoritm<strong>en</strong> voor zelfde probleem P<br />
Theoretische analyse<br />
algoritme A1: Θ(n 3 )<br />
algoritme A2: Θ(n 2 )<br />
algoritme A3: Θ(n log n)<br />
algoritme A4: Θ(n)<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.27/29
Experim<strong>en</strong>tele resultat<strong>en</strong><br />
Meting<strong>en</strong> in ms<br />
A4 A3 A2 A1<br />
n Θ(n) Θ(n log n) Θ(n 2 ) Θ(n 3 )<br />
10 0.018 0.17 0.15 0.35<br />
100 0.15 2.5 13 171<br />
1 000 1.5 35 1 265 151 730<br />
10 000 15 434 128 435 —<br />
100 000 147 5 396 — —<br />
1 000 000 1 594 60 476 — —<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.28/29
Experim<strong>en</strong>t<strong>en</strong> analyser<strong>en</strong><br />
Conclusies<br />
voor kleine n: alle algoritm<strong>en</strong> bruikbaar<br />
voor n > 1000: Θ(n 3 ) algoritme traag<br />
voor n > 10000: Θ(n 2 ) algoritme traag<br />
Verschil in orde van to<strong>en</strong>ame<br />
Θ(n): als n × 10, dan ook tijd ×10<br />
Θ(n 2 ): als n × 10, dan tijd ×100<br />
Θ(n 3 ): als n × 10, dan tijd ×1000<br />
Cursus <strong>Graf<strong>en</strong></strong>theorie <strong>en</strong> <strong>Combinatorische</strong> Optimalisatie (2008–2009) – p.29/29