Funkcije algoritma za raspolavljanje u Pythonu

The prepoloviti modul u Pythonu pruža jednostavne i brze (temeljene na binarnom pretraživanju) funkcije za pretraživanje elementa na sortiranom popisu pronalaženje točne pozicije za umetanje novih elemenata i umetanje novih elemenata osiguravajući da popis ostane sortiran.

Zašto nam je potreban modul Bisect?

  1. Korisno za operacije binarnog pretraživanja za pretraživanje u sortiranom popisu i za lociranje točaka umetanja.
  2. Pruža učinkovite metode za umetanje elemenata u sortirani popis uz održavanje reda.
  3. Izbjegava potrebu za ručnim sortiranjem nakon svakog umetanja štedeći vrijeme i trud.
  4. Nudi funkcije kao što su bisect() bisect_left() bisect_right() i insort() za čisti optimizirani kod.
  5. Idealno za zadatke kao što je održavanje rangiranih podataka na pločama s najboljim rezultatima ili bilo koji scenarij koji uključuje sortirano umetanje/pretragu podataka.

Osnovne funkcije modula Bisect

Bisect modul uglavnom nudi dvije vrste funkcionalnosti:

  • Pronalaženje točke umetanja (bez umetanja)
  • Umetanje elemenata na ispravan položaj

1. Pronalaženje točaka umetanja

Ove funkcije vraćaju indeks gdje novi element treba biti umetnut kako bi popis bio sortiran.

a) raspoloviti.popoloviti(): Vraća krajnju desnu točku umetanja za element. Ako element već postoji, točka umetanja bit će iza postojećih unosa.

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

Parametar:

  • popis: Poredani popis.
  • broj: Element za umetanje.
  • moliti: Početni indeks za pretraživanje (nije obavezno).
  • kraj: Završni indeks za pretraživanje (nije obavezno).

b) bisect.bisect_left(): Vraća krajnju lijevu točku umetanja za element. Ako element postoji, točka umetanja bit će ispred postojećih unosa.

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

c) bisect.bisect_right(): Identično bisect.bisect() vraća krajnju desnu točku umetanja.

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

Primjer: Pronađite indekse umetanja za vrijednost 4 u sortiranom popisu koristeći različite funkcije bisekte.

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   

Izlaz
5 2 4  

Obrazloženje:

  • raspoloviti (li 4): Vraća 5 jer pronalazi krajnju desnu poziciju nakon zadnja 4 na popisu (indeks 4), tako da je točka umetanja 5.
  • prepoloviti_lijevo(li 4): Vraća 2 jer pronalazi krajnju lijevu poziciju prije prva 4 na popisu (indeks 2).
  • prepoloviti_desno(li 4 0 4): Radi samo na podlisti to[0:4] i vraća 4 jer umeće 4 nakon zadnja 4 u podpopisu.

2. Umetanje elemenata

Ove funkcije umeću element na odgovarajuću poziciju kako bi se održalo sortiranje.

a) bisect.insort(): Umeće element na krajnju desnu poziciju. Za razliku od funkcija bisect(), ovo zapravo mijenja popis umetanjem elementa.

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

Parametar:

  • popis: Poredani popis.
  • broj: Element za umetanje.
  • moliti (neobavezno): Početni indeks za umetanje (zadano 0).
  • kraj (opcionalno): Završni indeks za umetanje (zadani len(list)).

b) bisect.insort_left(): Umeće element na krajnju lijevu poziciju.

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

c) bisect.insort_right(): Umeće element na krajnju desnu poziciju (slično insort()).

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

Primjer: Umetnite vrijednost 5 u sortirani popis i zadržite je sortiranom pomoću različitih strategija umetanja.

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  )   

Izlaz
[1 3 4 4 4 5 6 7] [1 3 4 4 4 5 6 7] [1 3 4 4 5 4 6 7]  

Obrazloženje:

  • nastati (l1 5) umeće 5 na najprikladniju desnu poziciju – nakon svih 4 i prije 6.
  • umetni_lijevo(l2 5) umeće 5 na krajnje lijevo prikladno mjesto – isto kao i insort ovdje jer 5 nije na popisu.
  • umetni_desno(l3 5 0 4) umeće 5 u indeks 4 radeći samo na podlisti l3[0:4] = [1 3 4 4] nakon posljednjeg ≤ 5 u tom rasponu bez utjecaja na ostatak liste.