Algoritmes in ons dagelijks leven

advertisement
Algoritmes in ons
dagelijks leven
Leve de Wiskunde!
7 April 2017
Jacobien Carstens
Wat is een algoritme?
“Een algoritme is een eindige reeks instructies die vanuit een
gegeven begintoestand naar een beoogd doel leidt.” (Wikipedia)
Algoritmes in ons dagelijks leven
1. Routes plannen.
2. Berichten beveiligen.
3. Websites sorteren.
Routes plannen
Eindpunt
Beginpunt
Eindpunt
Beginpunt
Graaf ! = (%, ')met % een verzameling
knopen en ' een verzameling van lijnen.
% = ), *, … , ,
'=
), * , ), - , … , ., ,
Beginpunt
Eindpunt
Graaf ! = (%, ')met % een verzameling
knopen en ' een verzameling van lijnen.
% = ), *, … , ,
'=
), * , ), - , … , ., ,
,: ' → ℝ
Beginpunt
Het plannen van een route op een wegennetwerk wordt wiskundig beschreven door het
vinden van het kortste pad tussen twee
knopen.
Eindpunt
Het kortste-pad algoritme van Dijkstra
Edsger Wybe Dijkstra (1930-2002)
Bedacht een kortste-pad algoritme als
demonstratie voor de ARMAC computer
in 1956.
Het kortste-pad algoritme van Dijkstra
1. Geef alle knopen een voorlopige
afstand tot het beginpunt.
Het kortste-pad algoritme van Dijkstra
1. Geef alle knopen een voorlopige
afstand tot het beginpunt.
2. Markeer alle knopen als ’onbezocht’.
Het kortste-pad algoritme van Dijkstra
1. Geef alle knopen een voorlopige
afstand tot het beginpunt.
2. Markeer alle knopen als ’onbezocht’.
3. Herhaal de volgende stappen:
1. Selecteer een onbezochte knoop met
de laagste voorlopige afstand.
Het kortste-pad algoritme van Dijkstra
1. Geef alle knopen een voorlopige
afstand tot het beginpunt.
2. Markeer alle knopen als ’onbezocht’.
3. Herhaal de volgende stappen:
1. Selecteer een onbezochte knoop met
de laagste voorlopige afstand.
2. Bereken de voorlopige afstand voor de
onbezochte buren van deze knoop.
Het kortste-pad algoritme van Dijkstra
1. Geef alle knopen een voorlopige
afstand tot het beginpunt.
2. Markeer alle knopen als ’onbezocht’.
3. Herhaal de volgende stappen:
1.
2.
3.
Selecteer een onbezochte knoop met de
laagste voorlopige afstand.
Bereken de voorlopige afstand voor de
onbezochte buren van deze knoop.
Markeer de huidige knoop als ‘bezocht’.
4. Stop zodra het eindpunt de knoop met
de laagste voorlopige afstand is of de
laagste afstand tot onbezochte knoop
oneindig is.
Het kortste-pad algoritme van Dijkstra
1. Geef alle knopen een voorlopige
afstand tot het beginpunt.
2. Markeer alle knopen als ’onbezocht’.
3. Herhaal de volgende stappen:
1.
2.
3.
Selecteer een onbezochte knoop met de
laagste voorlopige afstand.
Bereken de voorlopige afstand voor de
onbezochte buren van deze knoop.
Markeer de huidige knoop als ‘bezocht’.
4. Stop zodra het eindpunt de knoop met
de laagste voorlopige afstand is of de
laagste afstand tot onbezochte knoop
oneindig is.
Het kortste-pad algoritme van Dijkstra
1. Geef alle knopen een voorlopige
afstand tot het beginpunt.
2. Markeer alle knopen als ’onbezocht’.
3. Herhaal de volgende stappen:
1.
2.
3.
Selecteer een onbezochte knoop met de
laagste voorlopige afstand.
Bereken de voorlopige afstand voor de
onbezochte buren van deze knoop.
Markeer de huidige knoop als ‘bezocht’.
4. Stop zodra het eindpunt de knoop met
de laagste voorlopige afstand is of de
laagste afstand tot onbezochte knoop
oneindig is.
Het kortste-pad algoritme van Dijkstra
1. Geef alle knopen een voorlopige
afstand tot het beginpunt.
2. Markeer alle knopen als ’onbezocht’.
3. Herhaal de volgende stappen:
1.
2.
3.
Selecteer een onbezochte knoop met de
laagste voorlopige afstand.
Bereken de voorlopige afstand voor de
onbezochte buren van deze knoop.
Markeer de huidige knoop als ‘bezocht’.
4. Stop zodra het eindpunt de knoop met
de laagste voorlopige afstand is of de
laagste afstand tot onbezochte knoop
oneindig is.
Het kortste-pad algoritme van Dijkstra
1. Geef alle knopen een voorlopige
afstand tot het beginpunt.
2. Markeer alle knopen als ’onbezocht’.
3. Herhaal de volgende stappen:
1.
2.
3.
Selecteer een onbezochte knoop met de
laagste voorlopige afstand.
Bereken de voorlopige afstand voor de
onbezochte buren van deze knoop.
Markeer de huidige knoop als ‘bezocht’.
4. Stop zodra het eindpunt de knoop met
de laagste voorlopige afstand is of de
laagste afstand tot onbezochte knoop
oneindig is.
Het kortste-pad algoritme van Dijkstra
1. Geef alle knopen een voorlopige
afstand tot het beginpunt.
2. Markeer alle knopen als ’onbezocht’.
3. Herhaal de volgende stappen:
1.
2.
3.
Selecteer een onbezochte knoop met de
laagste voorlopige afstand.
Bereken de voorlopige afstand voor de
onbezochte buren van deze knoop.
Markeer de huidige knoop als ‘bezocht’.
4. Stop zodra het eindpunt de knoop met
de laagste voorlopige afstand is of de
laagste afstand tot onbezochte knoop
oneindig is.
Het kortste-pad algoritme van Dijkstra
1. Geef alle knopen een voorlopige
afstand tot het beginpunt.
2. Markeer alle knopen als ’onbezocht’.
3. Herhaal de volgende stappen:
1.
2.
3.
Selecteer een onbezochte knoop met de
laagste voorlopige afstand.
Bereken de voorlopige afstand voor de
onbezochte buren van deze knoop.
Markeer de huidige knoop als ‘bezocht’.
4. Stop zodra het eindpunt de knoop met
de laagste voorlopige afstand is of de
laagste afstand tot onbezochte knoop
oneindig is.
Het kortste-pad algoritme van Dijkstra
1. Geef alle knopen een voorlopige
afstand tot het beginpunt.
2. Markeer alle knopen als ’onbezocht’.
3. Herhaal de volgende stappen:
1.
2.
3.
Selecteer een onbezochte knoop met de
laagste voorlopige afstand.
Bereken de voorlopige afstand voor de
onbezochte buren van deze knoop.
Markeer de huidige knoop als ‘bezocht’.
4. Stop zodra het eindpunt de knoop met
de laagste voorlopige afstand is of de
laagste afstand tot onbezochte knoop
oneindig is.
Wiskundige vragen
Vind dit algoritme altijd het kortste pad?
Complexiteit: hoeveel stappen zijn nodig om het algoritme af te
ronden?
Heeft de structuur van een netwerk impact op de efficiëntie van
het algoritme?
Het algoritme van Dijkstra in de praktijk
Het algoritme van Dijkstra in de praktijk
Het algoritme van Dijkstra is niet snel genoeg voor grote
verkeersnetwerken.
Verbeteringen:
- tegelijkertijd zoeken vanaf beginpunt en eindpunt
- A* algoritme, pas het gewicht van de wegen aan
In 2008 werd een algoritme geïntroduceerd dat meer dan 3
miljoen keer sneller is dan het algoritme van Dijkstra.
C
(a) In welke volgorde worden de knopen van de
hiernaast getoond graaf bezocht door het kortste-pad
algoritme van Dijkstra met beginpunt B en eindpunt
F?
(b) Als het eindpunt G is, welke afstand vind het
algoritme van Dijkstra voor alle overige knopen als
beginpunt?
B
A
1
2
1
G
E
2
4
D
2
2
H
Het korste-pad algoritme van Dijkstra
1. Geef alle knopen een voorlopige afstand tot het beginpunt.
2. Markeer alle knopen als ’onbezocht’.
3. Herhaal de volgende stappen:
1. Selecteer een onbezochte knoop met de laagste voorlopige afstand.
2. Bereken de voorlopige afstand voor de onbezochte buren van deze knoop.
3. Markeer de huidige knoop als ‘bezocht’.
4. Stop zodra het eindpunt de knoop met de laagste voorlopige afstand is of de laagste afstand tot
onbezochte knoop oneindig is.
F
Berichten beveiligen
Cryptografie
Privacy is een belangrijk doel binnen de cryptografie.
Als een bericht wordt verstuurd over een publiek kanaal, hoe
kan worden voorkomen dat de inhoud van het bericht wordt
afgeluisterd?
Bericht M
Encoderen
*4$%(2080$^
9#3/4)67%$
*4$%(2080$^
9#3/4)67%$
A(Alice)
Decoderen
Bericht M
B(Bob)
Publiek kanaal
Voorbeeld: Ceasarcijfer
Hallo
A B C D E F ...
A B C D E F ...
A B C D E F ...
A B C D E F ...
E (Encoderen)
D (Decoderen)
E
Kdoor
Kdoor
D
Hallo
B (Bob)
A (Alice)
Publiek kanaal
Nadelen Ceasarcijfer
* Simpel te kraken als er genoeg tekst wordt verstuurd
Nadelen Ceasarcijfer
* Alice en Bob hebben van te voren een veilig kanaal nodig om
af te spreken hoe ze berichten gaan encoderen en decoderen.
Alice
stuur D via privé kanaal
E
j13K&(H4#fv
aj&*201nH8(
^SnH
6%4bCG9
Bob
D
publiek kanaal
j13K&(H4#fv
aj&*201nH8(
^SnH
6%4bCG9
Private key cryptografie
Alice stuurt Bob eerst via een privé kanaal een geheime sleutel K.
Encoderen / decoderen gebruiken beiden sleutel K.
Voorbeeld: K = {3, 4, 5, 4, 2}
EK(M) verschuif letter i met K[i] plaatsen vooruit in het alfabet.
DK(M) verschuif letter i met K[i] plaatsen achteruit in het alfabet.
Hallo
Encoderen
EK(M)
Afzender Alice
Keqqq
Keqq
Publiek kanaal
Decoderen
DK(EK(M))=M
Ontvanger Bob
Hallo
Public Key Cryptografie 1977
Bob maakt twee sleutels, één geheime sleutel D die hij met
niemand deelt en een publieke sleutel E.
Alice
publiek kanaal
Alice vraagt E aan Bob
E
j13K&(H4#fv
aj&*201nH8(
^SnH
6%4bCG9
Bob
D
publiek kanaal
j13K&(H4#fv
aj&*201nH8(
^SnH
6%4bCG9
RSA algoritme
Gebaseerd op de volgende eigenschap van gehele getallen:
Laat 2 en 3 priemgetallen zijn, we kunnen snel het product
4 = 2×3 uitrekenen, i.e. 11×13 = 143.
We kennen geen snelle methode om gegeven een product van
(grote) priemgetallen 4 = 2×3, deze priemgetallen 2 en 3 te
achterhalen.
RSA algoritme: rekenen modulo N
)mod* is een getal tussen 0 en * zodat ()=>?*) + A* = )
voor een zeker geheel getal A
Voorbeeld:
18mod12 = 6
28mod12 = 4
11mod4 = 3
RSA algoritme
Stelling: Laat 2 en 3 twee priemgetallen zijn en 4 = 2×3hun
product. Er bestaan getallen ? en - zodanig dat voor alle
getallen1 = de volgende formules elkaars inverse zijn:
' = = =E mod4
F(G) = G H =>?4
Oftewel F('(=)) = =.
1.Metggd(m,N)=1
RSA algoritme
Alice wil een bericht sturen naar Bob.
Bob kiest twee priemgetallen 2 en 3 en berekent 4 = 2×3. Hij
kiest een getal -.
De publieke sleutel is (4, -).
Op basis van 2, 3 en - kan Bob zijn geheime sleutel ?
berekenen.
RSA algoritme
Encoderen van een bericht =:
G = ' = = =E mod4
Decoderen van een bericht:
= = F(' G ) = F G = G H mod4
Elliptische Krommen
Sterkere beveiliging dan RSA.
Wordt gebruikt door o.a. Google en
WhatsApp.
Ingewikkelder om te implementeren.
(a) Alice stuurt Bob een bericht dat ze met een Ceasarcijfer heeft
geencodeerd. Ze is alleen vergeten te vertellen met hoeveel
plaatsten k alle letters zijn verschoven. Het bericht is:
“Pizi hi amwoyrhi”.
Kun je raden wat het bericht van Alice is? Wat is k?
A B C D E F ...
A B C D E F ...
Ceasar cijfer met k = 3
(b) Om een bericht te encoderen met het RSA algoritme
moet tekts eerst worden omgezet in een getal. Gebruik
de tabel om het bericht “Hallo” om te zetten in een getal
van 10 cijfers.
Hint: gebruik 01 in plaats van 1 etc.
Websites sorteren
Het begin van
De eerste zoekmachines sorteerden websites op basis van de
aanwezigheid van trefwoorden op de website.
In 1996 bedenken Larry Page en Sergey Brin het PageRank
algoritme om websites te sorteren op basis van kwaliteit.
Het world wide web
www netwerk is een
gerichte graaf
Knopen: websites
Lijnen: hyperlinks
Het PageRank algoritme
Idee 1: elke inkomende hyperlink is een
“stem” voor de website.
A
B
C
D
Knoop A en B krijgen allebei 1 stem
Knoop C en D krijgen allebei 2
stemmen.
In aandelen:
(0.167, 0.167, 0.33, 0.33)
à C & D zijn belangrijker dan A & B
Het PageRank algoritme
Idee 2: een stem van een belangrijke
website is meer waard dan een stem
van een onbelangrijke website.
A
B
C
D
Het PageRank algoritme
1. Begin met een willekeurige
verdeling van de stemmen.
A
B
C
D
Bijvoorbeeld:
(0.25, 0.25, 0.25, 0.25)
Het PageRank algoritme
2. Verdeel de stemmen van iedere
website eerlijk over de websites
waar de website naar verwijst.
3. Herhaal stap 2 totdat de
verdeling van stemmen niet meer
veranderd.
A
B
C
D
Het PageRank algoritme
0.25, 0.25, 0.25,0.25
A ontvangt 0.125 stemmen van C
B ontvangt 0.125 stemmen van A
C ontvangt 0.25 stemmen van B en
0.25 stemmen van D
D ontvangt 0.125 stemmen van A en
0.125 stemmen van C
(0.125, 0.125, 0.5, 0.25)
A
B
C
D
Het PageRank algoritme
(12.5, 12.5, 50, 25)
A ontvangt 0.25 stemmen van C
B ontvangt 0.0625 stemmen van A
C ontvangt 0.125 stemmen van B en
0.25 stemmen van D
D ontvangt 0.0625 stemmen van A
en 0.25 stemmen van C
(0.25, 0.0625, 0.375, 0.3125)
A
B
C
D
Het PageRank algoritme
Na ongeveer 45 rondes veranderd
de verdeling van stemmen niet meer.
De uiteindelijke verdeling is:
0.2, 0.1, 0.4, 0.3
A
B
C
D
Google rangschikt de websites in de
volgorde C, D, A, B.
PageRank convergeert
Stelling: Het PageRank algoritme convergeert naar een unieke
stationaire verdeling onafhankelijk van de begin verdeling wanneer de
onderliggende (eindige) graaf ! de volgende eigenschappen heeft: ! is
sterk samenhangend en aperiodiek.
Sterke samenhang
Een graaf is samenhangend als alle knopen met elkaar in verbinding
staan.
Een graaf is sterk samenhangend als er een gericht pad is tussen elk
paar punten.
Niet samenhangend
Samenhangend
Sterk samenhangend
Aperiodiciteit
Een graaf is aperiodiek als voor elke knoop het volgende geld. De
grootste gemeenschappelijke deler van alle paden die beginnen en
eindigen in de knoop is gelijk aan 1.
periodiek k=2
aperiodiek
Conclusie
Algoritmes zijn erg belangrijk in ons dagelijks leven.
Vaak zijn wiskundige technieken nodig om:
* zeker te weten dat een algoritme werkt.
* een algoritme te ontwerpen.
A
B
C
D
(a) Ga na dat de verdeling 0.2, 0.1, 0.4, 0.3
inderdaad niet veranderd door nog een
ronde van stemmen te verdelen.
(b) Wat verwacht je dat de verdeling van
stemmen wordt voor de hiernaast getekende
graaf?
(c) Is deze graaf aperiodiek. Hint: wat is de
lengte van een gericht pad dat begint in knoop A
en eindigt in knoop A. Is de verdeling die je vind
onafhankelijk van de begin toestand?
A
B
C
D
Download