Бисецт алгоритамске функције у Питхон-у

Тхе преполовити модул у Питхон-у пружа једноставне и брзе (засноване на бинарној претрази) функције за претраживање елемента у сортираној листи проналажење тачне позиције за уметање нових елемената и уметање нових елемената осигуравајући да листа остане сортирана.

Зашто нам треба Бисецт Модуле?

  1. Корисно за операције бинарног претраживања за претрагу у сортираној листи и за лоцирање тачака уметања.
  2. Пружа ефикасне методе за уметање елемената у сортирану листу уз одржавање реда.
  3. Избегава потребу за ручним сортирањем након сваког уметања штедећи време и труд.
  4. Нуди функције као што су бисецт() бисецт_лефт() бисецт_ригхт() и инсорт() за чист оптимизован код.
  5. Идеално за задатке као што је одржавање рангираних података на табели или било који сценарио који укључује уметање/претрагу сортираних података.

Основне функције бисектног модула

Бисецт модул углавном нуди две врсте функционалности:

  • Проналажење тачке уметања (без уметања)
  • Уметање елемената на исправан положај

1. Проналажење тачака уметања

Ове функције враћају индекс где нови елемент треба да се убаци да би листа била сортирана.

а) бисецт.бисецт(): Враћа крајњу десну тачку уметања за елемент. Ако елемент већ постоји, тачка уметања ће бити иза постојећих уноса.

бисецт.бисецт(лист нум бег=0 енд=лен(лист))

Параметар:

  • листа: Сортирана листа.
  • број: Елемент за уметање.
  • молити: Почни индекс за претрагу (опционо).
  • крај: Завршни индекс за претрагу (опционо).

б) бисецт.бисецт_лефт(): Враћа крајњу леву тачку уметања за елемент. Ако елемент постоји, тачка уметања ће бити испред постојећих уноса.

бисецт.бисецт_лефт(лист нум бег=0 енд=лен(лист))

ц) бисецт.бисецт_ригхт(): Идентично бисецт.бисецт() враћа крајњу десну тачку уметања.

бисецт.бисецт_ригхт(лист нум бег=0 енд=лен(лист))

Пример: Пронађи индексе уметања за вредност 4 у сортираној листи користећи различите функције пресека.

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   

Излаз
5 2 4  

Објашњење:

  • половина (ли 4): Враћа 5 јер проналази крајњу десну позицију после последње 4 на листи (индекс 4), тако да је тачка уметања 5.
  • половина_лево(ли 4): Враћа 2 јер проналази крајњу леву позицију пре прве 4 на листи (индекс 2).
  • бисецт_ригхт(ли 4 0 4): Ради само на подлисти то[0:4] и враћа 4 јер убацује 4 после последње 4 у подлисти.

2. Уметање елемената

Ове функције убацују елемент на одговарајућу позицију да би се одржало сортирање.

а) бисецт.инсорт(): Убацује елемент на крајњу десну позицију. За разлику од бисецт() функција, ово заправо модификује листу уметањем елемента.

бисецт.инсорт(лист нум бег=0 енд=лен(лист))

Параметар:

  • листа: Сортирана листа.
  • број: Елемент за уметање.
  • моли (опционо): Почетни индекс за уметање (подразумевано 0).
  • крај (опционо): Крајњи индекс за уметање (подразумевано лен(лист)).

б) бисецт.инсорт_лефт(): Убацује елемент на крајњу леву позицију.

бисецт.инсорт_лефт(лист нум бег=0 енд=лен(лист))

ц) бисецт.инсорт_ригхт(): Умеће елемент на крајњу десну позицију (слично инсорт()).

бисецт.инсорт_ригхт(лист нум бег=0 енд=лен(лист))

Пример: Уметните вредност 5 у сортирану листу док је држите сортираном користећи различите стратегије уметања.

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  )   

Излаз
[1 3 4 4 4 5 6 7] [1 3 4 4 4 5 6 7] [1 3 4 4 5 4 6 7]  

Објашњење:

  • устани (л1 5) убацује 5 на најдеснији одговарајући положај – после свих 4 и пре 6.
  • инсорт_лефт(л2 5) умеће 5 на најлеву погодну позицију – исто као и овде убаци пошто 5 није на листи.
  • инсорт_ригхт(л3 5 0 4) умеће 5 у индекс 4 ради само на подлисти л3[0:4] = [1 3 4 4] после последњег ≤ 5 у том опсегу без утицаја на остатак листе.