Informatica Deel II: les 10 Internet & sorteren Jan Lemeire Informatica deel II februari mei 2014
Hoofdstuk 9: Internet Jan Lemeire Pag. 2 / 45
Technologie 1: netwerk Lokaal network: electrische kabel Glasvezel verbindt lokale netwerken informatie via licht The world s cable map: http://www.cablemap.info/ Jan Lemeire Pag. 3 / 45
Technologie 2: protocol Protocol = afgesproken communicatiewijze IP= Internet Protocol Adres van elke computer: IP-adres 192.168.0.233 Windows-commando: ipconfig Domeinnaam is een alias voor het nummer ( naam ) Bericht wordt opgedeeld in IP-pakketjes die hun weg naar de bestemming zoeken over het net Oud telefoonnetwerk: je had de hele lijn voor je gereserveerd Het zoeken van de weg: TCP-protocol (Transmission Control Protocol) TCP/IP-protocol Jan Lemeire Pag. 4 / 45
Technologie 3: componenten Netwerkkaart: toegang van je PC/laptop tot het internet, via een netwerkkabel of wireless Switch: netwerkknooppunt, gebruik je om meerdere connecties te verbinden Router: ook een netwerkknooppunt, maar bepaalt ook de route van het pakketje. Het is de toegang van een lokaal network tot het internet en het vormt de knooppunten op het internet Modem: maakt informatiesignalen geschikt om over een verbinding te worden getransporteerd, bvb wireless, telefoon- (Belgacom) of kabelnetwerk (Telenet) Jan Lemeire Pag. 5 / 45
Lokaal network (LAN) Jan Lemeire Pag. 6 / 45
ARPANET TCP/IP ontstond uit Arpanet, ontwikkeld door Amerikaans leger Eisen aan digitaal communicatiesysteem: Flexibel Gedecentraliseerd, geen baas Onafhankelijkheid: delen kunnen op zich werken Zelf-regulerend robustness and survivability including the capability to withstand losses of large portions of the underlying networks (due to a nuclear attack) pakketjes kunnen verloren gaan: fouten of overlopen van de queues bij bottlenecks Jan Lemeire Pag. 7 / 45
Microsoft vòòr 1995 Microsoft: door Windows, grootste speller in IT Maar is niet geïnteresseerd in internet (ik beroepsmatig ook niet) Op CERN wordt Netscape Navigator ontwikkeld, de eerste browser Om informatie (file) van een remote computer te visualiseren Netscape wordt de grootste speler Is nu Firefox/Seamonkey Jan Lemeire Pag. 8 / 45
De volgende revolutie werd Internet!
Microsoft reageert Lanceert Internet Explorer in 1995 Gratis bij Windows waardoor iedereen het begint te gebruiken Koopt hotmail op En onlangs nog Skype en Nokia (maar dominante positie lijkt nu definitief verloren) Verovert het internet Door macht van Windows Jan Lemeire Pag. 10 / 45
IT-sector: the winner takes it all Windows, office, TCP/IP-protocol, pdf, Google, facebook, twitter, in andere sectoren kunnen er meerdere spelers zijn (bvb meerdere automerken, wasmachines, ) Kan leiden tot monopolieposities en oneerlijke concurrentie (verstoorde marktwerking). Microsoft kreeg verscheidene veroordelingen van de Europese Commissie Alternatief: standaards waar iedereen zich aan houdt De IT-sector heeft zo zijn specifieke economische wetten. Eentje is dat het meestal 1 speler is die de markt verovert doordat de consument er alle baat bij heeft dat iedereen Informatica hetzelfde II: les 10 product gebruikt, wegens gemak van interoperabiliteit en Jan Lemeire Pag. 11 / 45 uniformiteit. Dit wordt ook bereikt door standaards.
Railway Mania Eerste treinen Jan Lemeire Pag. 12 / 45
De internetrevolutie Technologie-index van USA: Nasdaq Jan Lemeire Pag. 13 / 45
De internetbubbel Of internetzeepbel of dotcom-crisis Nieuwe technologie opent nieuwe mogelijkheden, creëert (te) hoge verwachtingen Investeren geblazen! Professionals/leken steken hun geld in aandelenfondsen en aandelenclubs om de boot niet te missen Bubbel <= Hebzucht! Jan Lemeire Pag. 14 / 45
Jan Lemeire Pag. 15 / 45
De economie zou totaal veranderen => dotcom -economie Internet: ongekende commerciële mogelijkheden Anders communiceren Anders kopen Ook kerstbomen kopen op het internet Belangrijkste: =aandacht (hits/leden/ ) Get large or get lost agressieve marktpenetratie door middel van het uitbouwen van netwerken. Extreme verliezen in het begin werden gezien als slechts investeringen. Winst/omzet maken zou later komen. Velen geloofden dat we totaal anders zouden gaan consumeren. Je moest dus wel investeren in het internet, of je zou er binnen de kortste keren uit liggen. Jan Lemeire Pag. 16 / 45
Na het springen van de bubble (2000) Veel geld verloren Investeerders en ook de gewone man, enkel de slimmeriken zullen er (net) op tijd uit gestapt zijn De droom spatte echter uit elkaar Niemand wilt/durft meer te investeren in ITtechnologie Tot Google komt (2003-2004) en toont aan dat je wèl geld kunt verdienen op het Internet Zie Nasdaq-index: begint weer te klimmen Technologie heeft tijd nodig om te rijpen. Jan Lemeire Pag. 17 / 45
Vandaag 1. Internet (deel I) 2. Sorteren 3. Profiling & linken 4. Het gebruik van static 5. Sorteren vervolg
Sorteren
Sorteren p. 85 Van 51 03 24 86 45 30 27 63 96 50 10 Naar 03 10 24 27 30 45 50 51 63 86 96 Toepassingen: Woordenboek Googleresultaten mailbox Database Jan Lemeire Pag. 20 / 45
1. Selection Sort p. 85 Idee: zoek kleinste, dan tweede kleinste, enzovoorts Step A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10] 0 51 03 24 86 45 30 27 63 96 50 10 1 03 51 24 86 45 30 27 63 96 50 10 2 03 10 24 86 45 30 27 63 96 50 51 3 03 10 24 86 45 30 27 63 96 50 51 4 03 10 24 27 45 30 86 63 96 50 51 5 03 10 24 27 30 45 86 63 96 50 51 6 03 10 24 27 30 45 86 63 96 50 51 7 03 10 24 27 30 45 50 63 96 86 51 8 03 10 24 27 30 45 50 51 96 86 63 9 03 10 24 27 30 45 50 51 63 86 96 10 03 10 24 27 30 45 50 51 63 86 96 11 03 10 24 27 30 45 50 51 63 86 96 Jan Lemeire Pag. 21 / 45
public static void selectionsort(int[] array){ p. 86 aantalvergelijkingen = 0; aantalkopies = 0; // we selecteren telkens het kleinste element for(int i = 0; i< array.length-1;i++){ // laatste is niet nodig int minindex = indexminimumvanaf(array, i); swap(array, i, minindex); if (PRINT_TUSSEN_RESULTATEN) System.out.println(" > ["+i+"] "+Arrays.toString(array)); } } public static int indexminimumvanaf(int[] array, int vanaf){ int min = array[vanaf]; int minindex = vanaf; for(int i=vanaf+1;i<array.length; i++){ // vanaf + 1 if (array[i] < min){ min = array[i]; minindex = i; } aantalvergelijkingen++; } return minindex;
/** swaps elements i and j from the array */ private static void swap(int[] array, int i, int j){ if (i!= j){ int tmp = array[i]; array[i] = array[j]; array[j] = tmp; aantalkopies+=3; } }
Performantie selection sort n 1 i 1 n ( i 1) n i 2 i n 2 n 2 2 2 ( n ) Jan Lemeire Pag. 24 / 45
2. Bubble Sort p. 87 Idee: bubbel kleinste-tot-dan-toe naar boven Step A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10] 0 51 03 24 86 45 30 27 63 96 50 10 1 03 51 10 24 86 45 30 27 63 96 50 2 03 10 51 24 27 86 45 30 50 63 96 3 03 10 24 51 27 30 86 45 50 63 96 4 03 10 24 27 51 30 45 86 50 63 96 5 03 10 24 27 30 51 45 50 86 63 96 6 03 10 24 27 30 45 51 50 63 86 96 7 03 10 24 27 30 45 50 51 63 86 96 8 03 10 24 27 30 45 50 51 63 86 96 Jan Lemeire Pag. 25 / 45
public static void bubblesort(int[] array){ aantalvergelijkingen = 0; aantalkopies = 0; boolean sorted; int i=0; if (PRINT_TUSSEN_RESULTATEN) System.out.println(" > ["+i+"] "+Arrays.toString(array)); do { sorted = true; for(int j=array.length-1; j>i; j--){ if (array[j] < array[j-1]){ swap(array, j, j-1); sorted = false; } aantalvergelijkingen++; } i++; // weten dat het i'de element op zijn plaats staat if (PRINT_TUSSEN_RESULTATEN) System.out.println(" > ["+i+"] "+Arrays.toString(array)); } while(!sorted); }
Performantie Bubble Sort Worst case: evenveel als selection sort n 1 n ( i 1) i 1 n i 2 i n 2 n 2 2 2 ( n ) Jan Lemeire Pag. 27 / 45
Profiling & linking
??????
Theorema van Bayes Thomas Bayes 1701-1761 A posteriori geloof in hypothese Bevestiging (>1) of ontkrachting (<1) van hypothese A priori geloof in hypothese Jan Lemeire Pag. 31 / 45
Static in java denken in objecten
Objecten Niet in boek Hebben elk hun eigen attribuutwaarden, niet static dus Jan Lemeire Pag. 33 / 45
Handige van static Niet in boek Je hebt geen referentie naar het object nodig Referenties naar object: zie pagina 16-17 van de cursus Hoofdstuk 1 kan nu van pas komen! Statische methode Math.sin(x) kan je overal oproepen Als niet-statisch: je moet een Math-object aanmaken Statische variabele kan je overal oproepen: aantaliteraties (zie pagina 36 van de cursus) Jan Lemeire Pag. 34 / 45
Probleem met static Niet in boek Vanuit object kan je static dingen oproepen, maar niet omgekeerd: vanuit static kan je geen objectattributen of methodes oproepen van een gewoon object!! Compiler (Eclipse) zal een fout geven Cannot make a static reference to the non-static method Voorbeeld: statische methode roept gewone method op Dan moet je alles static maken en loopt het fout (Of je moet statische referenties bij gaan houden ) Niet doen dus Als je dit tegen komt is het foutief gebruik van static Jan Lemeire Pag. 35 / 45
Wanneer static te gebruiken? Niet in boek Zo weinig mogelijk Algemene functies, die niets aan een object veranderen Voorbeeld: berekenen gemiddelde, hoek ofzo Als je een object wilt veranderen gaat het fout (oproepen nietstatische variabele Algemene, globale variabelen 1 waarde die duidelijk algemeen moet zijn over alle objecten heen Voorbeeld: teller, mode van je GUI Als je functie een 2 e waarde moet teruggeven Kan dus niet in Zie cursus p. 36 (aantaliteraties) Jan Lemeire Pag. 36 / 45
Sorteren vervolg
3. Quick Sort p. 89 Idee: splits in deel met kleine elementen en deel met grote elementen Jan Lemeire Pag. 38 / 45
Code I public static void quicksort(int[] array){ aantalvergelijkingen=0; aantalkopies = 0; quicksort(array, 0, array.length - 1); } private static void quicksort(int[] array, int left, int right) { if (right <= left) return; int i = partition(array, left, right); if (PRINT_TUSSEN_RESULTATEN) System.out.println(" > ["+left+" "+i+" "+right+"] "+Arrays.toString(array)); quicksort(array, left, i-1); quicksort(array, i+1, right); } Jan Lemeire Pag. 39 / 45
private static int partition(int[] a, int left, int right) { // a[right] is ons pivot-element int i = left; int j = right - 1; while (true) { while (a[i] < a[right]){ // vind links een element > pivot i++; aantalvergelijkingen++; } while (a[right] < a[j]){ // vind rechts een element < pivot aantalvergelijkingen++; if (j == left) // ga niet buiten array break; j--; } if (i >= j) // tests of indexen mekaar hebben gekruisd break; swap(a, i, j); // verwissel beide elementen i++; j--; } swap(a, i, right); // verwissel met pivot return i; }
Aantal compare-swaps log 2 n stappen n operaties Let op: het recursieve algoritme doet dit eerst links Jan Lemeire Pag. 41 / 45
Performantie Quick Sort Per niveau van opsplitsen: globaal ongeveer n vergelijkingen Aantal opsplitsingen: gemiddeld log 2 n Afhankelijk kwaliteit van pivot element! Performantie = O(n.log 2 n) Gemiddeld 1,39.n.log 2 n Is bewezen dat t niet sneller kan! Vb: n=1000 elementen n 2 = 1.000.000 <> n.log 2 n 10.000 Jan Lemeire Pag. 42 / 45
Altijd n.log 2 n? Niet in boek n.log 2 n = 9965 1,39.n.log 2 n = 13851 Jan Lemeire Pag. 43 / 45
Performantie i.f.v. n Niet in boek 1,28.n.log 2 n n.log 2 n Jan Lemeire Pag. 44 / 45
Worst-case arrays? Niet in boek Wanneer slechte pivot? Als pivot grootste of kleinste element is Gesorteerd in volgorde Gesorteerd in omgekeerde volgorde Jan Lemeire Pag. 45 / 45