Contactmoment
29 maart

slides.com/jod/pt_maa_29

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 29 maart

Programmeertechnieken [B-KUL-YI0855]

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

Onderwerpen:

  • 14a. Tabellen
  • 14b. Hashtabel
  • 14c. Hashtabel analyse

Uitsmijter om 10:20 :
Arrays vs linked lists

Dynamische array vs linked list

Programmeertechnieken [B-KUL-YI0855]

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

Simpel experiment:

  1. creëer lineaire datastructuur met 100.000.000 shorts
  2. tel alle shorts op
  3. wat is het snelst: linked list of dynamische array?
$ ./a.out
constructie linked list tijd: 2.523655
som lange lijst: 4950000000 tijd: 0.347169
constructie array tijd: 1.034449
som lange array: 4950000000 tijd: 0.023802

Verklaring 1:

array heeft geen "volgende" pointer, dus minder geheugen nodig

Programmeertechnieken [B-KUL-YI0855]

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

Simpel experiment 2:

  1. creëer lineaire datastructuur met 100.000.000 shorts, maar opgeslagen als 128 bit integer in de array
  2. tel alle shorts op
  3. wat is het snelst: linked list of dynamische array?
$ ./a.out
constructie linked list tijd: 2.511495
som lange lijst: 4950000000 tijd: 0.342970
constructie array tijd: 1.256083
som lange array: 4950000000 tijd: 0.114533

Mogelijke verklaring:

Programmeertechnieken [B-KUL-YI0855]

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

Geheugenlayout van arrays is beter:

Om geheugenlocatie van volgende element te verkrijgen, moet je gewoon een bewerking uitvoeren (++i), niet een geheugenveld lezen (kop = kop->volgende)

$ ./a.out
constructie linked list tijd: 2.511495
som lange lijst: 4950000000 tijd: 0.342970
constructie array tijd: 1.256083
som lange array: 4950000000 tijd: 0.114533

(initiële hypothese: effecten van de cpu-cache, maar ben niet meer zo zeker)

Relatie met hashtabellen

Programmeertechnieken [B-KUL-YI0855]

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

Hashtabellen maken intern gebruik van arrays ipv samengestelde pointers (zoals linked lists en zelfbalancerende bomen).

Dit is een belangrijke reden voor hun snelheid in de praktijk.

$ ./a.out
constructie linked list tijd: 2.511495
som lange lijst: 4950000000 tijd: 0.342970
constructie array tijd: 1.256083
som lange array: 4950000000 tijd: 0.114533

Contactmoment 29 maart

By Jo Devriendt

Contactmoment 29 maart

  • 643