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
- 705