14a. Tabellen
2021-03-26
slides.com/jod/pt_14a
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
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Tabel
- 
Datastructuur voor een collectie key-waarde-paren
	
- elke key komt hoogstens één keer voor
 - geen afgesproken volgorde
 
 - Keys zijn afgeleide info van een waarde om die uniek te identificeren
	
- bvb. het studentennummer of e-mailadres van een student
 
 - Klassiek voorbeeld: telefoonboek
	
- keys: namen + adressen, waardes: telefoonnummers
 
 - Ook gekend als associatieve array, map, dictionary (bvb. in Python)
 
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Tabel
Voorbeeld
- key-waarde bestaat uit naam-leeftijd
 - keys zijn uniek, waardes niet
 
| Naam | Leeftijd | 
|---|---|
| bill | 74 | 
| george | 74 | 
| barack | 59 | 
| donald | 74 | 
| joe | 78 | 
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Tabel
Belangrijkste operaties
- Opzoeken: gegeven een key, vindt de bijbehorende waarde (als het bestaat)
 - Toevoegen: voeg een key-waarde-paar toe
 - Verwijderen: gegeven een key, verwijder de key-waarde in de tabel
 - Enumereren: itereer over alle keys en/of waardes
 
| Naam | Leeftijd | 
|---|---|
| bill | 74 | 
| george | 74 | 
| barack | 59 | 
| donald | 74 | 
| joe | 78 | 
Echter: geen garanties over de volgorde waarin geënumereerd wordt
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Tabel implementeren via
zelf-balancerende zoekboom
| Naam | Leeftijd | 
|---|---|
| bill | 74 | 
| george | 74 | 
| barack | 59 | 
| donald | 74 | 
| joe | 78 | 
donald
74
bill
74
barack
59
joe
78
george
74
- Veronderstelling: volgorde op de keys
 - Gebruik keys om een zelf-balancerende zoekboom op te stellen
 - Sla de waardes op in dezelfde node als hun key
 - Toevoegen, opzoeken, verwijderen: O(log(n))
 - Enumereren: O(n) (zelfs in volgorde)
 
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Tabel implementeren via
dynamische array
| Naam | Leeftijd | 
|---|---|
| bill | 74 | 
| george | 74 | 
| barack | 59 | 
| donald | 74 | 
| joe | 78 | 
- Soms is zoekboom te traag
	
- als het veel tijd kost om te checken of key A na key B komt
 
 - Veronderstel: we kunnen elke key omzetten naar een getal
	
- getal is klein en uniek per key
 
 - Gebruik getal voor key als index in een dynamische array
 
| 0 | |
| 1 | |
| 2 | |
| 3 | "joe", 59 | 
| 4 | "bill", 74 | 
| 5 | |
| 6 | "george", 74 | 
| 7 | "donald", 74 | 
| 8 | "barack", 59 | 
| 9 | 
Omzetting: tel de letters, maar 'a' telt dubbel
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Tabel implementeren via
dynamische array
| Naam | Leeftijd | 
|---|---|
| bill | 74 | 
| george | 74 | 
| barack | 59 | 
| donald | 74 | 
| joe | 78 | 
- Opzoeken, toevoegen, verwijderen: erg efficiënt (constant)
 - Enumereren is traag als er veel meer "gaten" dan aanwezige key-waarde-paren zijn
 - Uniciteit van omzetting garanderen is in de praktijk meestal niet mogelijk
 
Omzetting: tel de letters, maar 'a' telt dubbel
| 0 | |
| 1 | |
| 2 | |
| 3 | "joe", 59 | 
| 4 | "bill", 74 | 
| 5 | |
| 6 | "george", 74 | 
| 7 | "donald", 74 | 
| 8 | "barack", 59 | 
| 9 | 
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Tabel implementeren via
hashtabel
Wat als we toelaten dat verschillende keys (soms) naar hetzelfde getal mogen afbeelden?
Hashtabellen!
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Samenvatting
- Tabel is datastructuur voor een collectie key-waarde-paren
 - Key is uniek
 - Belangrijkste operaties: opzoeken, toevoegen, verwijderen, enumereren
 - Implementatie kan mbv
	
- zoekboom: soms traag
 - dynamische array: vereist omzetting van key naar uniek getal
 - hashtabel: zie 14b
 
 
14a. Tabellen
By Jo Devriendt
14a. Tabellen
- 883