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