Algoritmes om lijsten te verwerken
Op deze pagina, test je of de elementen van een lijst verschillend zijn (dus
of er geen duplicaten zijn).
Stel dat je een lijst met elementen hebt en wilt weten of de elementen van de lijst verschillend zijn
(uniek).
Dit soort vragen komen vaak voor: een webzoekmachine wil bijvoorbeeld zeker weten dat alle zoekresultaten
van elkaar verschillen.
Hier is één algoritme om het probleem op te lossen:
Algoritmen kunnen worden uitgedrukt in natuurlijke taal of in pseudocode, tekst die de
stappen beschrijft die een programma moet uitvoeren. Deze tekst die makkelijk voor mensen te begrijpen
is kan helpen voor het schrijven van het algoritme in een programmeertaal.
- Stap 1. Vergelijk het eerste element van de lijst met alle latere elementen in
de lijst (het tweede, het derde, enz.). Als je het eerste element opnieuw ziet, meld
je dat de cijfers niet verschillend zijn (
onwaar
).
- Stap 2. Als je stap 1 voltooid hebt zonder te stoppen, vergelijk je het tweede
element met alle latere element (de derde, de vierde, enz.). Als je het tweede element opnieuw ziet,
meld
je dat de cijfers niet verschillend zijn (
onwaar
).
- Stap 3. Herhaal stap 2 voor elk element in de lijst. Vergelijk dat element met elk
van de latere elementen in de lijst.
- Stap 4. Als je stap 3 voltooid hebt zonder dubbelen te vinden, rapporteer dan
dat de elementen verschillend zijn (
waar
).
- Bouw een predikaat dat het bovenstaande algoritme implementeert.
- Als
je de lengte van de lijst zou verdubbelen, zou dit algoritme dan evenveel tijd kosten? Twee keer
zo lang? Meer dan twee keer zo lang?
Alex: Ons predikaat vertelt ons of de elementen van een lijst verschillend zijn. Ik
wil nog iets meer informatie hebben.
Yasmine: Wat wil je dan?
Alex: Als er duplicaten in de lijst staan, wil ik graag zien welke getallen het zijn. Op
die manier kan ik ze verwijderen.
Bo: Oké, laten we een rapporteur schrijven die de lijst met duplicaten in een lijst
rapporteert.
- Bouw een rapporteur die alle dubbele elementen in een lijst geeft:
- Bouw een rapporteur,
verwijder dubbelen
, die een lijst als invoer gebruikt en
diezelfde lijst maar zonder dubbele elementen rapporteert.