Halver algoritmefunktioner i Python

De halvere modul i Python giver enkle og hurtige (binære søgebaserede) funktioner til at søge et element i en sorteret liste finde den korrekte position til at indsætte nye elementer og indsætte nye elementer, hvilket sikrer, at listen forbliver sorteret.

Hvorfor har vi brug for Bisect-modulet?

  1. Nyttigt til binære søgeoperationer til at søge i en sorteret liste og til at lokalisere indsættelsespunkter.
  2. Giver effektive metoder til at indsætte elementer i en sorteret liste og samtidig opretholde orden.
  3. Undgår behovet for manuel sortering efter hver isætning, hvilket sparer tid og kræfter.
  4. Tilbyder funktioner som bisect() bisect_left() bisect_right() og insort() for ren optimeret kode.
  5. Ideel til opgaver som at vedligeholde rangerede data på ranglisten eller ethvert scenarie, der involverer sorteret dataindsættelse/søgning.

Kernefunktioner i Bisect-modulet

Bisect-modulet tilbyder hovedsageligt to typer funktionaliteter:

  • Find indsættelsespunktet (uden indsættelse)
  • Indsættelse af elementer i den rigtige position

1. Find indsættelsespunkter

Disse funktioner returnerer det indeks, hvor det nye element skal indsættes for at holde listen sorteret.

a) bisect.bisect(): Returnerer indsættelsespunktet længst til højre for elementet. Hvis elementet allerede eksisterer, vil indsættelsespunktet være efter de eksisterende poster.

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

Parameter:

  • liste: Sorteret liste.
  • antal: Element at indsætte.
  • tigge: Start indeks for søgning (valgfrit).
  • ende: Slutindeks for søgning (valgfrit).

b) bisect.bisect_left(): Returnerer indsættelsespunktet længst til venstre for elementet. Hvis elementet eksisterer, vil indsættelsespunktet være før de eksisterende poster.

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

c) bisect.bisect_right(): Identisk med bisect.bisect() returnerer indsættelsespunktet længst til højre.

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

Eksempel: Find indsættelsesindekser for værdien 4 i en sorteret liste ved hjælp af forskellige halveringsfunktioner.

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   

Produktion
5 2 4  

Forklaring:

  • halvere(li 4): Returnerer 5, fordi den finder positionen længst til højre efter de sidste 4 på listen (indeks 4), så indsættelsespunktet er 5.
  • bisect_left(li 4): Returnerer 2, fordi den finder positionen længst til venstre før de første 4 på listen (indeks 2).
  • bisect_right(li 4 0 4): Virker kun på underliste at[0:4] og returnerer 4, fordi den indsætter 4 efter de sidste 4 i underlisten.

2. Indsættelse af elementer

Disse funktioner indsætter elementet i den rigtige position for at opretholde sorteringen.

a) bisect.insort(): Indsætter elementet længst til højre. I modsætning til bisect()-funktioner ændrer dette faktisk listen ved at indsætte elementet.

bisect.insort(liste num beg=0 end=len(liste))

Parameter:

  • liste: Sorteret liste.
  • antal: Element at indsætte.
  • beg (valgfrit): Startindeks for indsættelse (standard 0).
  • slut (valgfrit): Slutindeks for indsættelse (standard len(liste)).

b) bisect.insort_left(): Indsætter elementet længst til venstre.

bisect.insort_left(liste num beg=0 end=len(liste))

c) bisect.insort_right(): Indsætter elementet længst til højre (svarende til insort()).

bisect.insort_right(liste num beg=0 end=len(liste))

Eksempel: Indsæt værdien 5 i en sorteret liste, mens du holder den sorteret ved hjælp af forskellige indsættelsesstrategier.

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  )   

Produktion
[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:

  • opstå(l1 5) indsætter 5 i den mest egnede position til højre – efter alle 4s og før 6.
  • insort_left(l2 ​​5) indsætter 5 i den egnede position længst til venstre – samme som indsæt her, da 5 ikke er på listen.
  • insort_right(l3 5 0 4) indsætter 5 ved indeks 4, der kun fungerer på underliste l3[0:4] = [1 3 4 4] efter de sidste ≤ 5 i det område uden at påvirke resten af ​​listen.