Οδηγός Μελέτης - Εισαγωγή στον Προγραμματισμό

Α17.8 · Το σφάλμα της δυαδικής αναζήτησης

Διάλεξη 17: Δυαδική Αναζήτηση και Ταξινόμηση, διαφάνεια 16 · Δυσκολία ★★☆ · debug · Κεφάλαια: 17

Αυτός ο αλγόριθμος έχει σφάλμα, μπορούμε να το βρούμε και να το διορθώσουμε;

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)