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?
- Uporabno za operacije binarnega iskanja za iskanje po razvrščenem seznamu in za iskanje točk vstavljanja.
- Zagotavlja učinkovite metode za vstavljanje elementov v razvrščeni seznam ob ohranjanju vrstnega reda.
- Izogne se potrebi po ročnem razvrščanju po vsakem vstavljanju, kar prihrani čas in trud.
- Ponuja funkcije, kot sta bisect() bisect_left() bisect_right() in insort() za čisto optimizirano kodo.
- 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.
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))
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.