Datastructuren en algoritmen

Een dynamische array reserveert, als er een element wordt toegevoegd terwijl hij vol is, een nieuw gebied met de dubbele capaciteit en kopieert alle elementen daarheen. Hoeveel elementkopieën worden er in totaal gemaakt als 1000 elementen één voor één worden toegevoegd aan een lege array met capaciteit 1?

  1. A10
  2. B1023
  3. C499.500
Antwoord en toelichting tonen

Antwoord: B. 1023

De capaciteit verdubbelt telkens als de array vol is, van 1 naar 2, 4, …, 512, en elke keer worden alle aanwezige elementen gekopieerd, dus het totale aantal kopieën is 1 + 2 + 4 + … + 512 = 1023. Voor 1000 toevoegingen is dat ongeveer één kopie per element, dus de kosten per toevoeging zijn gemiddeld constant: geamortiseerd O(1). Zou de capaciteit telkens maar met 1 groeien, dan zouden de kopieën samen 1 + 2 + … + 999 = 499.500 bedragen, wat O(n²) is. 10 is het aantal keren dat opnieuw geheugen is gereserveerd, niet het aantal gekopieerde elementen.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Datastructuren en algoritmen

  1. Wat is de meest passende reden dat open adressering met lineair proberen bij een hashtabel met veel elementen en een bezettingsgraad van ongeveer 0,5 vaak sneller is dan chaining (elementen koppelen met gelinkte lijsten)?
  2. Voor sorteren op parallelle hardware zoals GPU's worden soms sorteermethoden met een vaste reeks vergelijk-en-verwisselstappen (sorteernetwerken) gebruikt, zoals bitonic sort. Waarom?
  3. Wat is de tijdcomplexiteit van een bewerking die in een array van n elementen elk paar van twee verschillende elementen precies één keer vergelijkt (een dubbele lus die element i vergelijkt met alle elementen erna en i telkens één stap verder zet)?
  4. Een programma met tijdcomplexiteit O(n²) doet er 0,5 seconde over bij 1000 gegevens. Hoeveel seconden duurt het ongeveer bij 4000 gegevens?
  5. Lineair zoeken vergelijkt de elementen van een array met 100 verschillende waarden één voor één vanaf het begin om een gezochte waarde te vinden. De gezochte waarde staat altijd in de array en heeft op elke positie dezelfde kans. Wat is het gemiddelde aantal vergelijkingen?