Python Bisect - Ricerca binaria
-
bisect.bisect_left()
Panoramica -
Applicazioni di
bisect_left()
-
bisect.bisect_right()
Panoramica -
Applicazioni di
bisect_right()
In questo articolo vedremo come utilizzare i moduli integrati di Python per eseguire la ricerca binaria. Il modulo bisect
si basa sul metodo di bisezione per trovare le radici delle funzioni. Consiste di 6 funzioni: bisect()
, bisect_left()
, bisect_right()
, insort()
, insort_left()
, insort_right()
che ci permette di trovare l’indice di un elemento o inserire l’elemento nella giusta posizione in una lista. Aiuta anche a mantenere la lista ordinata dopo ogni inserimento. Ma affinché funzionino correttamente, dobbiamo assicurarci che l’array sia già ordinato.
bisect.bisect_left()
Panoramica
Viene utilizzato per individuare il punto di inserimento più a sinistra di un numero x
all’interno di una lista ordinato. Se x
è già presente nell’lista, la nuova x
verrà inserita nella posizione più a sinistra tra tutte le x
nell’lista.
Sintassi
bisect_left(arr, x, lo=0, hi=len(a))
Parametri
arr |
L’lista degli input |
x |
L’elemento di cui stiamo localizzando il punto di inserimento. |
lo |
Aiuta a specificare l’indice iniziale di un sottoinsieme di una lista. Il valore predefinito è 0 . |
hi |
Aiuta a specificare l’indice finale di un sottoinsieme di una lista. Il valore predefinito è len(arr) . |
Ritorno
Restituisce un punto di inserimento che divide l’array in due metà: la prima con tutti i valori inferiori a x
e la seconda con tutti i valori maggiori di x
.
Applicazioni di bisect_left()
Trova la prima occorrenza di un elemento
from bisect import bisect_left
def binary_search(a, x):
i = bisect_left(a, x)
if i != len(a) and a[i] == x:
return i
else:
return -1
a = [1, 2, 3, 3, 3]
x = int(3)
res = binary_search(a, x)
if res == -1:
print("Element not Found")
else:
print("First occurrence of", x, "is at index", res)
Produzione:
First occurrence of 3 is at index 2
Trova il valore più grande minore di x
from bisect import bisect_left
def binary_search(a, x):
i = bisect_left(a, x)
if i:
return i - 1
else:
return -1
# Driver code
a = [1, 2, 4, 4, 8]
x = int(7)
res = binary_search(a, x)
if res == -1:
print("There is no value smaller than", x)
else:
print("Largest value smaller than", x, " is at index", res)
Produzione:
Largest value smaller than 7 is at index 3
bisect.bisect_right()
Panoramica
Viene utilizzato per restituire il punto di inserimento più a destra di un numero x
all’interno di una lista ordinato. Se x
è già presente nell’lista, la nuova x
verrà inserita nella posizione più a destra tra tutte le x
nell’lista.
Sintassi
bisect_right(arr, x, lo=0, hi=len(a))
Parametri
arr |
L’lista degli input |
x |
L’elemento di cui stiamo localizzando il punto di inserimento. |
lo |
Aiuta a specificare l’indice iniziale di un sottoinsieme di una lista. Il valore predefinito è 0 . |
hi |
Aiuta a specificare l’indice finale di un sottoinsieme di una lista. Il valore predefinito è len(arr) . |
Ritorno
Restituisce un punto di inserimento che divide l’array in due metà: la prima con tutti i valori <= x
e la seconda con tutti i valori> x
.
Applicazioni di bisect_right()
Trova l’ultima occorrenza di un elemento
from bisect import bisect_right
def binary_search(a, x):
i = bisect_right(a, x)
if i != len(a) + 1 and a[i - 1] == x:
return i - 1
else:
return -1
a = [1, 2, 4, 4]
x = int(4)
res = binary_search(a, x)
if res == -1:
print(x, "is absent")
else:
print("Last occurrence of", x, "is present at", res)
Produzione:
Last occurrence of 4 is present at 3
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.
LinkedIn