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?

  1. Nyttig for binære søkeoperasjoner for å søke i en sortert liste og for å finne innsettingspunkter.
  2. Gir effektive metoder for å sette inn elementer i en sortert liste mens du opprettholder rekkefølgen.
  3. Unngår behovet for manuell sortering etter hver innsetting og sparer tid og krefter.
  4. Tilbyr funksjoner som bisect() bisect_left() bisect_right() og insort() for ren optimalisert kode.
  5. 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.