logo

Funkcije algoritma razpolovitve v Pythonu

The razpoloviti modul v Pythonu zagotavlja preproste in hitre (na osnovi binarnega iskanja) funkcije za iskanje elementa na razvrščenem seznamu, iskanje pravilnega položaja za vstavljanje novih elementov in vstavljanje novih elementov, s čimer zagotovite, da seznam ostane razvrščen.

Zakaj potrebujemo modul Bisect?

  1. Uporabno za operacije binarnega iskanja za iskanje po razvrščenem seznamu in za iskanje točk vstavljanja.
  2. Zagotavlja učinkovite metode za vstavljanje elementov v razvrščeni seznam ob ohranjanju vrstnega reda.
  3. Izogne ​​se potrebi po ročnem razvrščanju po vsakem vstavljanju, kar prihrani čas in trud.
  4. Ponuja funkcije, kot sta bisect() bisect_left() bisect_right() in insort() za čisto optimizirano kodo.
  5. Idealno za naloge, kot je vzdrževanje razvrščenih podatkov na lestvicah najboljših, ali kateri koli scenarij, ki vključuje vstavljanje/iskanje razvrščenih podatkov.

Osnovne funkcije modula Bisect

Bisect modul ponuja predvsem dve vrsti funkcionalnosti:

  • Iskanje točke vstavljanja (brez vstavljanja)
  • Vstavljanje elementov na pravilen položaj

1. Iskanje vstavnih točk

Te funkcije vrnejo indeks, kamor je treba vstaviti nov element, da ohrani seznam razvrščen.



a) bisect.bisect(): Vrne skrajno desno točko vstavljanja za element. Če element že obstaja, bo točka vstavljanja za obstoječimi vnosi.

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

Parameter:

  • seznam: Razvrščen seznam.
  • št.: Element za vstavljanje.
  • prosim: Začni indeks za iskanje (neobvezno).
  • konec: Končni indeks za iskanje (neobvezno).

b) bisect.bisect_left(): Vrne skrajno levo točko vstavljanja za element. Če element obstaja, bo točka vstavljanja pred obstoječimi vnosi.

abstraktni razred java

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

c) bisect.bisect_right(): Enako kot bisect.bisect() vrne skrajno desno točko vstavljanja.

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

primer: Poiščite indekse vstavljanja za vrednost 4 na razvrščenem seznamu z uporabo različnih razpolovljenih funkcij.

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 

Izhod
5 2 4 

Pojasnilo:

  • razpolovi (li 4): Vrne 5, ker najde skrajni desni položaj za zadnjimi 4 na seznamu (indeks 4), tako da je točka vstavljanja 5.
  • razpolovitev_levo(li 4): Vrne 2, ker najde skrajno levi položaj pred prvimi 4 na seznamu (indeks 2).
  • razpolovitev_desno(li 4 0 4): Deluje samo na podseznamu to[0:4] in vrne 4, ker vstavi 4 za zadnje 4 na podseznamu.

2. Vstavljanje elementov

Te funkcije vstavijo element na pravilen položaj, da ohranijo razvrščanje.

a) bisect.insort(): Vstavi element na skrajni desni položaj. Za razliko od funkcij bisect() ta dejansko spremeni seznam tako, da vstavi element.

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

Parameter:

  • seznam: Razvrščen seznam.
  • št.: Element za vstavljanje.
  • prosim (neobvezno): Začetni indeks za vstavljanje (privzeto 0).
  • konec (neobvezno): Končni indeks za vstavljanje (privzeta len(seznam)).

b) bisect.insort_left(): Vstavi element na skrajni levi položaj.

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

javac ni prepoznan

c) bisect.insort_right(): Vstavi element na skrajni desni položaj (podobno kot insort()).

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

primer: Vstavite vrednost 5 v razvrščeni seznam, pri čemer naj bo razvrščen z različnimi strategijami vstavljanja.

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) 

Izhod
[1 3 4 4 4 5 6 7] [1 3 4 4 4 5 6 7] [1 3 4 4 5 4 6 7] 

Pojasnilo:

  • vstati (l1 5) vstavi 5 na najbolj desno mesto – za vsemi 4 in pred 6.
  • vstavi_levo(l2 5) vstavi 5 na skrajno levo primerno mesto – enako kot vstavi tukaj, ker 5 ni na seznamu.
  • insort_right(l3 5 0 4) vstavi 5 pri indeksu 4 in deluje samo na podseznamu l3[0:4] = [1 3 4 4] za zadnjim ≤ 5 v tem obsegu, ne da bi to vplivalo na preostali del seznama.