Halver algoritmefunksjoner i Python
De halvere modul i Python gir enkle og raske (binært søkebaserte) funksjoner for å søke i et element i en sortert liste, finne riktig posisjon for å sette inn nye elementer og sette inn nye elementer for å sikre at listen forblir sortert.
Hvorfor trenger vi Bisect-modulen?
- Nyttig for binære søkeoperasjoner for å søke i en sortert liste og for å finne innsettingspunkter.
- Gir effektive metoder for å sette inn elementer i en sortert liste mens du opprettholder rekkefølgen.
- Unngår behovet for manuell sortering etter hver innsetting og sparer tid og krefter.
- Tilbyr funksjoner som bisect() bisect_left() bisect_right() og insort() for ren optimalisert kode.
- Ideell for oppgaver som å vedlikeholde rangerte data på ledertavler eller ethvert scenario som involverer innsetting/søk av sortert data.
Kjernefunksjoner til Bisect-modulen
Bisect-modulen tilbyr hovedsakelig to typer funksjoner:
- Finne innsettingspunktet (uten innsetting)
- Sette inn elementer i riktig posisjon
1. Finne innsettingspunkter
Disse funksjonene returnerer indeksen der det nye elementet skal settes inn for å holde listen sortert.
a) bisect.bisect(): Returnerer innsettingspunktet lengst til høyre for elementet. Hvis elementet allerede eksisterer, vil innsettingspunktet være etter de eksisterende oppføringene.
bisect.bisect(liste num beg=0 end=len(liste))
Parameter:
- liste: Sortert liste.
- num: Element å sette inn.
- tigge: Start indeks for søk (valgfritt).
- slutt: Sluttindeks for søk (valgfritt).
b) bisect.bisect_left(): Returnerer innsettingspunktet lengst til venstre for elementet. Hvis elementet eksisterer, vil innsettingspunktet være før de eksisterende oppføringene.
bisect.bisect_left(liste num beg=0 end=len(liste))
c) bisect.bisect_right(): Identisk med bisect.bisect() returnerer innsettingspunktet lengst til høyre.
bisect.bisect_right(liste num beg=0 end=len(liste))
Eksempel: Finn innsettingsindekser for verdien 4 i en sortert liste ved å bruke forskjellige halveringsfunksjoner.
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
Produksjon
5 2 4
Forklaring:
- halvere(li 4): Returnerer 5 fordi den finner posisjonen lengst til høyre etter de siste 4 i listen (indeks 4), så innsettingspunktet er 5.
- bisect_left(li 4): Returnerer 2 fordi den finner posisjonen lengst til venstre før de 4 første i listen (indeks 2).
- bisect_right(li 4 0 4): Fungerer kun på underliste det[0:4] og returnerer 4 fordi den setter inn 4 etter de siste 4 i underlisten.
2. Sette inn elementer
Disse funksjonene setter inn elementet i riktig posisjon for å opprettholde sorteringen.
a) bisect.insort(): Setter inn elementet lengst til høyre. I motsetning til bisect()-funksjoner, endrer dette faktisk listen ved å sette inn elementet.
bisect.insort(liste num beg=0 end=len(liste))
Parameter:
- liste: Sortert liste.
- num: Element å sette inn.
- beg (valgfritt): Startindeks for innsetting (standard 0).
- slutt (valgfritt): Sluttindeks for innsetting (standard len(liste)).
b) bisect.insort_left(): Setter inn elementet lengst til venstre.
bisect.insort_left(liste num beg=0 end=len(liste))
c) bisect.insort_right(): Setter inn elementet i posisjonen lengst til høyre (ligner på insort()).
bisect.insort_right(liste num beg=0 end=len(liste))
Eksempel: Sett inn verdien 5 i en sortert liste mens du holder den sortert med forskjellige innsettingsstrategier.
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 )
Produksjon
[1 3 4 4 4 5 6 7] [1 3 4 4 4 5 6 7] [1 3 4 4 5 4 6 7]
Forklaring:
- oppstå(l1 5) setter inn 5 i den mest egnede posisjonen til høyre – etter alle 4s og før 6.
- insort_left(l2 5) setter inn 5 i den passende posisjonen lengst til venstre – samme som insort her siden 5 ikke er på listen.
- insort_right(l3 5 0 4) setter inn 5 ved indeks 4 som bare fungerer på underliste l3[0:4] = [1 3 4 4] etter de siste ≤ 5 i det området uten å påvirke resten av listen.