Python-program til binær søgning (rekursiv og iterativ)
I en nøddeskal udnytter denne søgealgoritme en samling af elementer, der allerede er sorteret ved at ignorere halvdelen af elementerne efter blot én sammenligning.
- Sammenlign x med det midterste element.
- Hvis x matcher med det midterste element, returnerer vi midtindekset.
- Ellers hvis x er større end det midterste element, så kan x kun ligge i den højre (større) halve undergruppe efter det midterste element. Så anvender vi algoritmen igen for højre halvdel.
- Ellers hvis x er mindre, skal målet x ligge i venstre (nederste) halvdel. Så vi anvender algoritmen for venstre halvdel.
Python-program til binær søgning ved hjælp af rekursiv
Python3
# Python 3 program for recursive binary search.> # Modifications needed for the older Python 2 are found in comments.> # Returns index of x in arr if present, else -1> def> binary_search(arr, low, high, x):> > # Check base case> > if> high>> => low:> > mid> => (high> +> low)> /> /> 2> > # If element is present at the middle itself> > if> arr[mid]> => => x:> > return> mid> > # If element is smaller than mid, then it can only> > # be present in left subarray> > elif> arr[mid]>x:> > return> binary_search(arr, low, mid> -> 1> , x)> > # Else the element can only be present in right subarray> > else> :> > return> binary_search(arr, mid> +> 1> , high, x)> > else> :> > # Element is not present in the array> > return> -> 1> # Test array> arr> => [> 2> ,> 3> ,> 4> ,> 10> ,> 40> ]> x> => 10> # Function call> result> => binary_search(arr,> 0> ,> len> (arr)> -> 1> , x)> if> result !> => -> 1> :> > print> (> 'Element is present at index'> ,> str> (result))> else> :> > print> (> 'Element is not present in array'> )> |
Produktion
Element is present at index 3
Tidskompleksitet : O(log n)
Hjælpeplads : O(logn) [BEMÆRK: Rekursion opretter opkaldsstak]
Python-program til binær søgning ved hjælp af iterativ
Python3
# Iterative Binary Search Function> # It returns index of x in given array arr if present,> # else returns -1> def> binary_search(arr, x):> > low> => 0> > high> => len> (arr)> -> 1> > mid> => 0> > while> low <> => high:> > mid> => (high> +> low)> /> /> 2> > # If x is greater, ignore left half> > if> arr[mid] low = mid + 1 # If x is smaller, ignore right half elif arr[mid]>x: høj = mid - 1 # betyder, at x er til stede ved mid else: return mid # Hvis vi når her, så var elementet ikke til stede return -1 # Test array arr = [ 2, 3, 4, 10, 40 ] x = 10 # Resultat af funktionskald = binær_søgning(arr, x) hvis resultat != -1: print('Element er til stede ved indeks', str(resultat)) else: print('Element er ikke til stede i array' ')> |
Produktion
Element is present at index 3
Tidskompleksitet : O(log n)
Hjælpeplads : O(1)
Python-program til binær søgning ved hjælp af det indbyggede halveringsmodul
Trin for trin tilgang:
- Koden importerer bisect-modulet, som understøtter binær søgning.
- Funktionen binary_search_bisect() er defineret, som tager en array arr og elementet for at søge x som input.
- Funktionen kalder bisect_left()-funktionen i bisect-modulet, som finder positionen af elementet i den sorterede array arr, hvor x skal indsættes for at bevare den sorterede rækkefølge. Hvis elementet allerede er til stede i arrayet, vil denne funktion returnere sin position.
- Funktionen kontrollerer derefter, om det returnerede indeks i er inden for rækkevidden af arrayet, og om elementet ved det indeks er lig med x.
- Hvis betingelsen er sand, returnerer funktionen indekset i som positionen af elementet i arrayet.
- Hvis betingelsen er falsk, returnerer funktionen -1, hvilket indikerer, at elementet ikke er til stede i arrayet.
- Koden definerer derefter en array arr og et element x til at søge.
- Funktionen binary_search_bisect() kaldes med arr og x som input, og det returnerede resultat gemmes i resultatvariablen.
- Koden kontrollerer derefter, om resultatet ikke er lig med -1, hvilket indikerer, at elementet er til stede i arrayet. Hvis det er sandt, udskriver det elementets position i arrayet.
- Hvis resultatet er lig med -1, udskriver koden en besked om, at elementet ikke er til stede i arrayet.
Python3
import> bisect> > def> binary_search_bisect(arr, x):> > i> => bisect.bisect_left(arr, x)> > if> i !> => len> (arr)> and> arr[i]> => => x:> > return> i> > else> :> > return> -> 1> > > # Test array> arr> => [> 2> ,> 3> ,> 4> ,> 10> ,> 40> ]> x> => 10> > # Function call> result> => binary_search_bisect(arr, x)> > if> result !> => -> 1> :> > print> (> 'Element is present at index'> ,> str> (result))> else> :> > print> (> 'Element is not present in array'> )> |
Produktion
Element is present at index 3
Tidskompleksitet : O(log n)
Hjælpeplads : O(1)