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