Datenstrukturen und Algorithmen
Ein dynamisches Array legt, wenn ein Element hinzugefügt wird, während es voll ist, einen neuen Bereich mit doppelter Kapazität an und kopiert alle Elemente dorthin. Wie viele Elementkopien entstehen insgesamt, wenn einem leeren Array mit der Kapazität 1 nacheinander 1000 Elemente hinzugefügt werden?
- A10
- B1023
- C499.500
Antwort und Erläuterung anzeigen
Antwort: B. 1023
Die Kapazität verdoppelt sich jedes Mal, wenn sie erschöpft ist, also 1, 2, 4, …, 512, und jedes Mal werden alle vorhandenen Elemente kopiert; die Gesamtzahl der Kopien beträgt daher 1 + 2 + 4 + … + 512 = 1023. Bei 1000 Hinzufügungen ist das etwa eine Kopie pro Element, der Aufwand pro Hinzufügen ist im Mittel also konstant: amortisiert O(1). Wüchse die Kapazität jedes Mal nur um 1, ergäben sich 1 + 2 + … + 999 = 499.500 Kopien, also O(n²). 10 ist die Zahl der Neuanlagen des Speicherbereichs, nicht die Zahl der kopierten Elemente.