Bisect algoritma funkcijas Python

The sadalīt uz pusēm modulis Python nodrošina vienkāršas un ātras (pamatojoties uz bināro meklēšanu) funkcijas, lai meklētu elementu sakārtotā sarakstā, lai atrastu pareizo pozīciju jaunu elementu ievietošanai un jaunu elementu ievietošanai, nodrošinot, ka saraksts paliek sakārtots.

Kāpēc mums ir nepieciešams Bisect modulis?

  1. Noder binārās meklēšanas operācijām, lai meklētu sakārtotā sarakstā un atrastu ievietošanas punktus.
  2. Nodrošina efektīvas metodes elementu ievietošanai sakārtotā sarakstā, vienlaikus saglabājot kārtību.
  3. Izvairās no manuālas šķirošanas pēc katras ievietošanas, ietaupot laiku un pūles.
  4. Piedāvā tādas funkcijas kā bisect() bisect_left() bisect_right() un insort() tīram optimizētam kodam.
  5. Ideāli piemērots tādiem uzdevumiem kā līderu saraksta datu uzturēšana vai jebkurš scenārijs, kas saistīts ar sakārtotu datu ievietošanu/meklēšanu.

Bisect moduļa pamatfunkcijas

Bisect modulis galvenokārt piedāvā divu veidu funkcijas:

  • Ievietošanas punkta atrašana (bez ievietošanas)
  • Elementu ievietošana pareizajā pozīcijā

1. Ievietošanas punktu atrašana

Šīs funkcijas atgriež indeksu, kurā jāievieto jaunais elements, lai saraksts būtu sakārtots.

a) bisect.biect(): Atgriež elementa galējo labo ievietošanas punktu. Ja elements jau pastāv, ievietošanas punkts būs aiz esošajiem ierakstiem.

bisect.bisect(saraksta num beg=0 end=len(saraksts))

Parametrs:

  • saraksts: Sakārtots saraksts.
  • numurs: Ievietojamais elements.
  • ubagot: Sākt meklēšanas indeksu (neobligāti).
  • beigas: Meklēšanas beigu rādītājs (pēc izvēles).

b) bisect.bisect_left(): Atgriež elementa vistālāk kreiso ievietošanas punktu. Ja elements pastāv, ievietošanas punkts būs pirms esošajiem ierakstiem.

bisect.bisect_left(saraksta num beg=0 end=len(saraksts))

c) bisect.bisect_right(): Identisks bisect.bisect() atgriež galējo labo ievietošanas punktu.

bisect.bisect_right(saraksta num beg=0 end=len(saraksts))

Piemērs: Atrodiet ievietošanas indeksus vērtībai 4 sakārtotā sarakstā, izmantojot dažādas sadalīšanas funkcijas.

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   

Izvade
5 2 4  

Paskaidrojums:

  • sadalīt uz pusēm (li 4): Atgriež 5, jo tā atrod vistālāk labo pozīciju pēc pēdējām 4 sarakstā (4. rādītājs), tāpēc ievietošanas punkts ir 5.
  • bisect_left(li 4): Atgriež 2, jo atrod galējo kreiso pozīciju pirms pirmajām 4 sarakstā (2. rādītājs).
  • bisect_right(li 4 0 4): Darbojas tikai apakšsarakstā tas[0:4] un atgriež 4, jo ievieto 4 pēc pēdējiem 4 apakšsarakstā.

2. Elementu ievietošana

Šīs funkcijas ievieto elementu pareizajā pozīcijā, lai saglabātu šķirošanu.

a) bisect.insort(): Ievieto elementu vistālāk labajā pozīcijā. Atšķirībā no bisect() funkcijām, šī faktiski maina sarakstu, ievietojot elementu.

bisect.insort(saraksta num beg=0 end=len(saraksts))

Parametrs:

  • saraksts: Sakārtots saraksts.
  • numurs:
  • lūgt (pēc izvēles): Sākuma indekss ievietošanai (noklusējums 0).
  • beigas (pēc izvēles): Ievietošanas beigu indekss (noklusējuma len(saraksts)).

b) bisect.insort_left(): Ievieto elementu vistālāk kreisajā pozīcijā.

bisect.insort_left(saraksta num beg=0 end=len(saraksts))

c) bisect.insort_right(): Ievieto elementu vistālāk labajā pozīcijā (līdzīgi insort()).

bisect.insort_right(saraksta num beg=0 end=len(saraksts))

Piemērs: Ievietojiet 5. vērtību sakārtotā sarakstā, vienlaikus saglabājot to sakārtotu, izmantojot dažādas ievietošanas stratēģijas.

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  )   

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

Paskaidrojums:

  • rodas (l1 5) ievieto 5 vispiemērotākajā pozīcijā - pēc visām 4 sekundēm un pirms 6.
  • insort_left(l2 ​​5) ievieto 5 vispiemērotākajā pozīcijā pa kreisi — tāpat kā šeit, jo 5 nav sarakstā.
  • insort_right(l3 5 0 4)