A common sense guide to data structures and algorithms Flashcards
CH9. Wat zijn Abstract Data Types?
Een data structuur waarbij het niet boeit hoe data wordt opgeslagen, alleen hoe het bewerkt en gebruikt wordt.
Een stack is bijvoorbeeld een array met regels die je zelf moet coderen. Maar het kan net zo goed een lijst zijn.
CH9. Waarom zou je een Stack gebruiken als een Stack een aangepaste array is?
- Het voorkomt bugs, omdat de programmeur zich moet houden aan de regels van de stack.
- Het mentale model van een stack helpt bij het gebruiken en toepassen van een LIFO mindset.
- Het is duidelijk voor andere programmeurs dat ze werken met een LIFO-gebaseerd algoritme.
CH1. Wat is belangrijk bij het maken van code, naast dat het werkt?
- Onderhoudbaarheid
- Modulariteit
- Leesbaarheid
- Organisatie
- Code-efficiëntie
CH1. Wat zijn de 4 basis operations van data structuren?
- Lezen => Iets lezen op een specifieke plek
- Zoeken => Een specifieke waarde zoeken
- Toevoegen / ‘insert’
- Verwijderen / ‘delete’
CH1. Waarom wordt de snelheid of efficiëntie van een data structuur in stappen en niet in tijd gemeten?
- Een programma kan op de nieuwste supercomputer sneller (seconden) werken dan op een computer uit 1990.
- Een programma zal de ene keer langzamer runnen en de andere keer sneller (vertraging door internet, wat runt de computer op de achtergrond, errors/bugs/server problemen, etc.)
CH1. Waarom kan een computer de waarde op een specifieke plek (index) in een array binnen 1 stap lezen, maar niet in een linked list?
Een array heeft een plek in het geheugen, van begin tot eind 1 reeks. De elementen van een linked lijst verwijzen naar elkaar, omdat zij niet ‘naast elkaar’ worden opgeslagen in het geheugen.
CH1. Wat is het verschil in efficiëntie tussen lezen en zoeken in een array?
Lezen gebeurt in 1 stap, zoeken in min. 1, max. N (aantal elementen in de array).
CH1. Hoeveel stappen kost elke basis operation bij een normale array?
Best case scenario: Worst case scenario Lezen => 1:- Zoeken => 1:N Insertion => 1:N+1 Deletion => 1:N
CH1. Wat is het verschil tussen een set en een array?
In een set komen er geen duplicaten voor. In een array wel.
CH1. Hoeveel stappen kost elke basis operation bij een normale set?
Best case scenario: Worst case scenario Lezen => 1:- (onduidelijk) Zoeken => 1:N Insertion => N+1:2N+1 Deletion => 1:N
CH2. Wat is een algoritme?
Een verzameling/reeks instructies voor het voltooien van een specifieke taak.
CH2. Waarom is linear search in een geordende array sneller dan bij een normale array?
De elementen van een geordende array hebben een volgorde. Als je 22 zoekt en je bent bij 30 gekomen in een array die van laag naar hoog is gesorteerd, dan weet je al dat 22 niet meer te vinden zal zijn. Je kan de search vroeger beëindigen dan in een normale array.
CH3. Wat is de Big O Notation?
De Big O Notation geeft in CS aan hoe het aantal stappen toeneemt in verhouding met het aantal elementen.
Linear search: O(N)
Binary search: O(log N)
Er is ook O(N^2), O(sqrt(N)), etc.
CH3. Als een programma altijd hetzelfde aantal stappen neemt, wat is dan de Big O Notation?
O(1), ook als het aantal stappen meer dan 1 is.
Het zijn beide rechte, horizontale lijnen die tonen dat het aantal stappen niet toeneemt naarmate er meer data wordt toegevoegd.
Zelfs als het aantal stappen een miljoen is, blijft het O(1), want het is een constante. O(N) zal altijd bij een bepaalde hoeveelheid data minder efficiënt zijn dan O(1).
CH3. Wat is belangrijk om te onthouden bij het noteren van de Big O Notation?
Tenzij anders wordt vermeldt, ga je uit van het Worst Case Scenario.
CH3. Wat is log 8?
En log 64?
En log3 81?
log 8 = 3
log 64 = 6
log3 81 = 3
CH10. Wat zijn successors en terminal nodes?
Successor is een synoniem (onzeker) voor children nodes.
Een terminal node heeft precies 0 successors.
CH10. Wanneer zijn 2 binary bomen vergelijkbaar (‘similar’) en wanneer zijn het kopieën?
Vergelijkbaar als ze dezelfde structuur hebben. Kopieën als ze vergelijkbaar zijn én als de dezelfde inhoud hebben op dezelfde plekken.
CH10. Wat is de hoogte van een boom?
Het maximale aantal knooppunten in het langste pad van de boom.
CH10. Wat is een binaire boom?
Een boom waarvan elk knooppunt maximaal 2 children kan hebben.
CH10. Wanneer is een boom compleet?
Als alle levels (op mogelijk de laatste na) het maximale aantal knooppunten bevatten en de laatste zo veel mogelijk links gevuld is.
CH10. Hoe kan je makkelijk berekenen op welke plek de kinderen van een knooppunt in een binaire boom staan?
Als K = de index van het huidige knooppunt, dan is 2k het linkerkind en 2k+1 het rechterkind.
CH10. Hoe kan je makkelijk de diepte/hoogte van een complete boom berekenen?
dn = [log2 n + 1]