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?
- Nyttigt til binære søgeoperationer til at søge i en sorteret liste og til at lokalisere indsættelsespunkter.
- Giver effektive metoder til at indsætte elementer i en sorteret liste og samtidig opretholde orden.
- Undgår behovet for manuel sortering efter hver isætning, hvilket sparer tid og kræfter.
- Tilbyder funktioner som bisect() bisect_left() bisect_right() og insort() for ren optimeret kode.
- 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.