Python Bisect - Pesquisa Binária
- 
          
            bisect.bisect_left()Visão geral
- 
          
            Aplicações de bisect_left()
- 
          
            bisect.bisect_right()Visão geral
- 
          
            Aplicações de bisect_right()
 
Neste artigo, veremos como usar os módulos integrados do Python para realizar a pesquisa binária. O módulo bisect é baseado no método da bissecção para encontrar as raízes das funções. Consiste em 6 funções: bisect(), bisect_left(), bisect_right(), insort(), insort_left(), insort_right() que nos permite encontrar o índice de um elemento ou insira o elemento na posição correta em uma lista. Também ajuda a manter a lista classificada após cada inserção. Mas para que funcionem corretamente, temos que nos certificar de que o array já está classificado.
bisect.bisect_left() Visão geral
    
É usado para localizar o ponto de inserção mais à esquerda de um número x dentro de uma lista classificada. Se x já estiver presente na lista, então o novo x será inserido na posição mais à esquerda entre todos os x na lista.
Sintaxe
bisect_left(arr, x, lo=0, hi=len(a))
Parâmetros
| arr | A lista de entrada | 
| x | O elemento cujo ponto de inserção estamos localizando. | 
| lo | Isso ajuda a especificar o índice inicial de um subconjunto de uma lista. O valor padrão é 0. | 
| hi | Ajuda a especificar o índice final de um subconjunto de uma lista. O valor padrão é len(arr). | 
Retornar
Ele retorna um ponto de inserção que divide a matriz em duas metades: a primeira com todos os valores menores que x e a segunda com todos os valores maiores que x.
Aplicações de bisect_left()
Encontre a primeira ocorrência de um 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)
Resultado:
First occurrence of 3 is at index 2
Encontre o maior valor menor que 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)
Resultado:
Largest value smaller than 7 is at index 3
bisect.bisect_right() Visão geral
    
É usado para retornar o ponto de inserção mais à direita de um número x dentro de uma lista classificada. Se x já estiver presente na lista, então o novo x será inserido na posição mais à direita entre todos os x na lista.
Sintaxe
bisect_right(arr, x, lo=0, hi=len(a))
Parâmetros
| arr | A lista de entrada | 
| x | O elemento cujo ponto de inserção estamos localizando. | 
| lo | Isso ajuda a especificar o índice inicial de um subconjunto de uma lista. O valor padrão é 0. | 
| hi | Ajuda a especificar o índice final de um subconjunto de uma lista. O valor padrão é len(arr). | 
Retornar
Ele retorna um ponto de inserção que divide a matriz em duas metades: a primeira com todos os valores <= x e a segunda com todos os valores> x.
Aplicações de bisect_right()
Encontre a última ocorrência de um 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)
Resultado:
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