Funkcje algorytmu Bisect w Pythonie

The przepoławiać moduł w Pythonie zapewnia proste i szybkie (oparte na wyszukiwaniu binarnym) funkcje przeszukiwania elementu na posortowanej liście znajdowanie właściwej pozycji do wstawiania nowych elementów i wstawianie nowych elementów, zapewniając, że lista pozostanie posortowana.

Dlaczego potrzebujemy modułu Bisect?

  1. Przydatne w przypadku operacji wyszukiwania binarnego w celu przeszukiwania posortowanej listy i lokalizowania punktów wstawiania.
  2. Zapewnia wydajne metody wstawiania elementów do posortowanej listy przy zachowaniu porządku.
  3. Eliminuje potrzebę ręcznego sortowania po każdym włożeniu, oszczędzając czas i wysiłek.
  4. Oferuje funkcje takie jak bisect() bisect_left() bisect_right() i insort() w celu uzyskania czystego, zoptymalizowanego kodu.
  5. Idealny do zadań takich jak utrzymywanie danych rankingowych w rankingach lub w dowolnym scenariuszu obejmującym wstawianie/wyszukiwanie posortowanych danych.

Podstawowe funkcje modułu Bisect

Moduł bisekt oferuje głównie dwa rodzaje funkcjonalności:

  • Znajdowanie punktu wstawienia (bez wstawiania)
  • Wstawianie elementów we właściwym miejscu

1. Znajdowanie punktów wstawienia

Funkcje te zwracają indeks, w którym należy wstawić nowy element, aby lista była posortowana.

a) bisect.bisect(): Zwraca skrajny na prawo punkt wstawienia elementu. Jeżeli element już istnieje, punkt wstawienia będzie znajdował się po istniejących wpisach.

bisect.bisect(lista num beg=0 end=len(lista))

Parametr:

  • lista: Posortowana lista.
  • liczba: Element do wstawienia.
  • błagać: Rozpocznij indeks wyszukiwania (opcjonalnie).
  • koniec: Zakończ indeks wyszukiwania (opcjonalnie).

b) bisect.bisect_left(): Zwraca skrajny lewy punkt wstawienia elementu. Jeśli element istnieje, punkt wstawiania będzie znajdował się przed istniejącymi wpisami.

bisect.bisect_left(list num beg=0 end=len(lista))

c) bisect.bisect_right(): Identycznie jak bisect.bisect() zwraca punkt wstawiania skrajnie na prawo.

bisect.bisect_right(list num beg=0 end=len(lista))

Przykład: Znajdź indeksy wstawienia dla wartości 4 na posortowanej liście, używając różnych funkcji dwusiecznych.

Python
   import   bisect   li   =   [  1     3     4     4     4     6     7  ]   print  (  bisect  .  bisect  (  li     4  ))   # right   print  (  bisect  .  bisect_left  (  li     4  ))   # left   print  (  bisect  .  bisect_right  (  li     4     0     4  ))   # subright   

Wyjście
5 2 4  

Wyjaśnienie:

  • przepoławiać(li 4): Zwraca liczbę 5, ponieważ znajduje pozycję znajdującą się najbardziej na prawo po ostatnich 4 na liście (indeks 4), zatem punktem wstawiania jest liczba 5.
  • bisect_left(li 4): Zwraca 2, ponieważ znajduje skrajną lewą pozycję przed pierwszymi 4 na liście (indeks 2).
  • bisect_right(li 4 0 4): Działa tylko na podliście to[0:4] i zwraca 4, ponieważ wstawia 4 po ostatnich 4 na podliście.

2. Wstawianie elementów

Funkcje te wstawiają element we właściwej pozycji, aby zachować sortowanie.

a) bisect.insort(): Wstawia element w skrajnej prawej pozycji. W przeciwieństwie do funkcji bisect() faktycznie modyfikuje ona listę poprzez wstawienie elementu.

bisect.insort(list num beg=0 end=len(lista))

Parametr:

  • lista: Posortowana lista.
  • liczba: Element do wstawienia.
  • błagać (opcjonalnie): Indeks początkowy do wstawienia (domyślnie 0).
  • koniec (opcjonalnie): Końcowy indeks do wstawienia (domyślnie len(list)).

b) bisect.insort_left(): Wstawia element w skrajnej lewej pozycji.

bisect.insort_left(list num beg=0 end=len(lista))

c) bisect.insort_right(): Wstawia element w skrajnej prawej pozycji (podobnie jak insort()).

bisect.insort_right(list num beg=0 end=len(lista))

Przykład: Wstaw wartość 5 do posortowanej listy, utrzymując ją posortowaną przy użyciu różnych strategii wstawiania.

Python
   import   bisect   l1   =   [  1     3     4     4     4     6     7  ]   l2   =   [  1     3     4     4     4     6     7  ]   l3   =   [  1     3     4     4     4     6     7  ]   bisect  .  insort  (  l1     5  )   # right   print  (  l1  )   bisect  .  insort_left  (  l2     5  )   # left   print  (  l2  )   bisect  .  insort_right  (  l3     5     0     4  )   # subright   print  (  l3  )   

Wyjście
[1 3 4 4 4 5 6 7] [1 3 4 4 4 5 6 7] [1 3 4 4 5 4 6 7]  

Wyjaśnienie:

  • powstać (l1 5) wstawia 5 w najbardziej odpowiednim miejscu na prawo – po wszystkich 4 i przed 6.
  • insort_left(l2 ​​5) wstawia 5 w najbardziej lewej odpowiedniej pozycji – tak samo jak w przypadku insort, ponieważ 5 nie ma na liście.
  • insort_right(l3 5 0 4) wstawia 5 w indeksie 4, działając tylko na podliście l3[0:4] = [1 3 4 4] po ostatnich ≤ 5 w tym zakresie bez wpływu na resztę listy.

Może Ci Się Spodobać