Τι πολυπλοκότητα (χρόνου και χώρου) έχει αυτός ο αλγόριθμος;
int binary_search(int elem, int *array, int n) {
int mid, low = 0, high = n - 1;
while (low <= high) {
mid = low + (high - low) / 2;
if (array[mid] == elem)
return 1;
else if (array[mid] < elem)
low = mid + 1;
else
high = mid - 1;
}
return 0;
}
Πόσα στοιχεία μένουν στο διάστημα [low, high] μετά από κάθε γύρο του βρόχου; Μετρήστε πόσες φορές μπορείτε να διαιρέσετε το \(n\) με το 2 μέχρι να φτάσετε στο 1. Για τον χώρο, μετρήστε τις μεταβλητές που χρησιμοποιεί η συνάρτηση.
Αριθμός στον οδηγό: Α17.1
(στο κεφάλαιο) ·
Μόνιμο αναγνωριστικό: slides-lec17-binary-search-complexity ·
Σύνδεσμος: https://progintro.github.io/study/questions/slides/slides-lec17-binary-search-complexity.html ·
Markdown (GitHub)