Binarno pretraživanje

U ovom uputstvu naučit ćete kako funkcionira Binarno pretraživanje. Također ćete pronaći radne primjere binarnog pretraživanja na C, C ++, Java i Python.

Binarno pretraživanje je algoritam pretraživanja za pronalaženje položaja elementa u razvrstanom nizu.

U ovom pristupu, element se uvijek traži usred dijela niza.

Binarno pretraživanje može se provesti samo na razvrstanom popisu predmeta. Ako elementi već nisu razvrstani, prvo ih moramo razvrstati.

Binarno pretraživanje radi

Binarni algoritam pretraživanja može se implementirati na dva načina o kojima se govori u nastavku.

  1. Iterativna metoda
  2. Rekurzivna metoda

Rekurzivna metoda slijedi pristup podijeli i osvoji.

U nastavku se razmatraju opći koraci za obje metode.

  1. Niz u kojem se treba izvršiti pretraživanje je: Početni niz
    Neka x = 4bude element koji se traži.
  2. Postavite dva pokazivača nisko i visoko na najnižoj i najvišoj poziciji. Postavljanje pokazivača
  3. Pronađite srednji element sredinu niza, tj. (arr(low + high)) / 2 = 6. Srednji element
  4. Ako je x == mid, a zatim vratite mid.Else, usporedite element koji želite pretražiti s m.
  5. Ako x> mid, usporedite x sa srednjim elementom elemenata na desnoj strani sredine. To se postiže postavljanjem niskog na low = mid + 1.
  6. Inače, usporedite x sa srednjim elementom elemenata na lijevoj strani sredine. To se postiže postavljanjem visoke na high = mid - 1. Pronalaženje srednjeg elementa
  7. Ponavljajte korake 3 do 6 dok niska ne dosegne visoku. Srednji element
  8. x = 4pronađeno je. Pronađeno

Binarni algoritam pretraživanja

Metoda ponavljanja

radite dok se pokazivači nisko i visoko ne sretnu. mid = (low + high) / 2 if (x == arr (mid)) return mid else if (x> A (mid)) // x je s desne strane low = mid + 1 else // x je uključen lijeva strana visoko = sredina - 1

Rekurzivna metoda

 binarySearch (arr, x, low, high) if low> high return False else mid = (low + high) / 2 if x == arr (mid) return mid else if x <data (mid) // x is on desna strana vraća binarySearch (arr, x, mid + 1, high) else // x je s desne strane vraća binarySearch (arr, x, low, mid - 1)

Primjeri Pythona, Java, C / C ++ (iterativna metoda)

Python Java C C ++
 # Binary Search in python def binarySearch(array, x, low, high): # Repeat until the pointers low and high meet each other while low <= high: mid = low + (high - low)//2 if array(mid) == x: return mid elif array(mid) < x: low = mid + 1 else: high = mid - 1 return -1 array = (3, 4, 5, 6, 7, 8, 9) x = 4 result = binarySearch(array, x, 0, len(array)-1) if result != -1: print("Element is present at index " + str(result)) else: print("Not found")
 // Binary Search in Java class BinarySearch ( int binarySearch(int array(), int x, int low, int high) ( // Repeat until the pointers low and high meet each other while (low <= high) ( int mid = low + (high - low) / 2; if (array(mid) == x) return mid; if (array(mid) < x) low = mid + 1; else high = mid - 1; ) return -1; ) public static void main(String args()) ( BinarySearch ob = new BinarySearch(); int array() = ( 3, 4, 5, 6, 7, 8, 9 ); int n = array.length; int x = 4; int result = ob.binarySearch(array, x, 0, n - 1); if (result == -1) System.out.println("Not found"); else System.out.println("Element found at index " + result); ) )
 // Binary Search in C #include int binarySearch(int array(), int x, int low, int high) ( // Repeat until the pointers low and high meet each other while (low <= high) ( int mid = low + (high - low) / 2; if (array(mid) == x) return mid; if (array(mid) < x) low = mid + 1; else high = mid - 1; ) return -1; ) int main(void) ( int array() = (3, 4, 5, 6, 7, 8, 9); int n = sizeof(array) / sizeof(array(0)); int x = 4; int result = binarySearch(array, x, 0, n - 1); if (result == -1) printf("Not found"); else printf("Element is found at index %d", result); return 0; )
 // Binary Search in C++ #include using namespace std; int binarySearch(int array(), int x, int low, int high) ( // Repeat until the pointers low and high meet each other while (low <= high) ( int mid = low + (high - low) / 2; if (array(mid) == x) return mid; if (array(mid) < x) low = mid + 1; else high = mid - 1; ) return -1; ) int main(void) ( int array() = (3, 4, 5, 6, 7, 8, 9); int x = 4; int n = sizeof(array) / sizeof(array(0)); int result = binarySearch(array, x, 0, n - 1); if (result == -1) printf("Not found"); else printf("Element is found at index %d", result); )

Primjeri Pythona, Java, C / C ++ (rekurzivna metoda)

Python Java C C ++
 # Binary Search in python def binarySearch(array, x, low, high): if high>= low: mid = low + (high - low)//2 # If found at mid, then return it if array(mid) == x: return mid # Search the left half elif array(mid)> x: return binarySearch(array, x, low, mid-1) # Search the right half else: return binarySearch(array, x, mid + 1, high) else: return -1 array = (3, 4, 5, 6, 7, 8, 9) x = 4 result = binarySearch(array, x, 0, len(array)-1) if result != -1: print("Element is present at index " + str(result)) else: print("Not found")
 // Binary Search in Java class BinarySearch ( int binarySearch(int array(), int x, int low, int high) ( if (high>= low) ( int mid = low + (high - low) / 2; // If found at mid, then return it if (array(mid) == x) return mid; // Search the left half if (array(mid)> x) return binarySearch(array, x, low, mid - 1); // Search the right half return binarySearch(array, x, mid + 1, high); ) return -1; ) public static void main(String args()) ( BinarySearch ob = new BinarySearch(); int array() = ( 3, 4, 5, 6, 7, 8, 9 ); int n = array.length; int x = 4; int result = ob.binarySearch(array, x, 0, n - 1); if (result == -1) System.out.println("Not found"); else System.out.println("Element found at index " + result); ) )
 // Binary Search in C #include int binarySearch(int array(), int x, int low, int high) ( if (high>= low) ( int mid = low + (high - low) / 2; // If found at mid, then return it if (array(mid) == x) return mid; // Search the left half if (array(mid)> x) return binarySearch(array, x, low, mid - 1); // Search the right half return binarySearch(array, x, mid + 1, high); ) return -1; ) int main(void) ( int array() = (3, 4, 5, 6, 7, 8, 9); int n = sizeof(array) / sizeof(array(0)); int x = 4; int result = binarySearch(array, x, 0, n - 1); if (result == -1) printf("Not found"); else printf("Element is found at index %d", result); )
 // Binary Search in C++ #include using namespace std; int binarySearch(int array(), int x, int low, int high) ( if (high>= low) ( int mid = low + (high - low) / 2; // If found at mid, then return it if (array(mid) == x) return mid; // Search the left half if (array(mid)> x) return binarySearch(array, x, low, mid - 1); // Search the right half return binarySearch(array, x, mid + 1, high); ) return -1; ) int main(void) ( int array() = (3, 4, 5, 6, 7, 8, 9); int x = 4; int n = sizeof(array) / sizeof(array(0)); int result = binarySearch(array, x, 0, n - 1); if (result == -1) printf("Not found"); else printf("Element is found at index %d", result); )

Složenost binarnog pretraživanja

Složenost vremena

  • Složenost najboljeg slučaja :O(1)
  • Prosječna složenost slučaja :O(log n)
  • Najgora složenost slučaja :O(log n)

Složenost prostora

Složenost prostora binarnog pretraživanja je O(n).

Programi binarnog pretraživanja

  • U knjižnicama Java, .Net, C ++ STL
  • Tijekom otklanjanja pogrešaka, binarno pretraživanje koristi se za određivanje mjesta na kojem se pogreška događa.

Zanimljivi članci...