Contactmoment
17 maart

slides.com/jod/pt_maa_17

Docent: Jo Devriendt

Assistent: Ann Philips

Coördinator: Joost Vennekens

voornaam.achternaam@kuleuven.be

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Contactmoment 17 maart

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Onderwerpen:

  • 11a. Selection sort
  • 11b. Quicksort
  • 11c. Merge sort

Uitsmijter om 10:50:
Algemeen vs specifiek in een worst-case scenario

Algemeen vs specifiek

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

  • Algemeen: alle gevallen die aan een definitie voldoen
  • Specifiek: een geval dat nog steeds aan de definitie voldoet, maar waar je meer informatie hebt

Meer informatie laat toe om in een specifiek geval een uitzondering op de algemene regel te bekomen

Bijvoorbeeld: om een brug te bouwen moet je aan bepaalde structurele eisen voldoen. Bvb. er moeten voldoende steunpilaren per meter brug zijn. Maar als je speciaal beton of staal gebruikt, kun je wegkomen met minder steunpilaren per meter brug.

Algemeen

Specifiek

Algemeen vs specifiek

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

  • In het algemeen kan je niet sneller sorteren dan in
    stappen
  • Maar stel dat we weten dat we getallen tussen 0 en 999 aan het sorteren zijn. Er kunnen er nog steeds miljoenen zijn - er zijn heel veel dubbels.
  • Dan kan je in O(n) sorteren mbv. counting sort
O(n\cdot \mathit{log}_2(n))

Counting sort

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

#include <stdio.h>

#define N 8
#define K 1000

int main() {
  int a[N] = {5,3,1,7,2,6,4,5};
  int counts[K];
  for(int i=0; i<K; ++i){
    counts[i]=0;
  }
  for(int i=0; i<N; ++i){
    counts[a[i]] += 1;
  }
  for(int i=0; i<K; ++i){
    for(int j=0; j<counts[i]; ++j){
      printf("%d ", i);
    }
  }
  printf("\n");
}
$ ./a.out
1 2 3 4 5 5 6 7

Algemeen vs specifiek

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

  • In het algemeen kan je niet sneller sorteren dan in
    stappen
  • Maar stel dat we weten dat we getallen tussen 0 en 999 aan het sorteren zijn. Er kunnen er nog steeds miljoenen zijn - er zijn heel veel dubbels.
  • Dan kan je in O(n) sorteren mbv. counting sort
  • Counting sort werkt niet voor alle sorteerproblemen, en is dus geen weerlegging van de algemene regel
O(n\cdot \mathit{log}_2(n))