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:
- creëer lineaire datastructuur met 100.000.000 shorts
- tel alle shorts op
- 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:
- creëer lineaire datastructuur met 100.000.000 shorts, maar opgeslagen als 128 bit integer in de array
- tel alle shorts op
- 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