Бисецт алгоритамске функције у Питхон-у
Тхе преполовити модул у Питхон-у пружа једноставне и брзе (засноване на бинарној претрази) функције за претраживање елемента у сортираној листи проналажење тачне позиције за уметање нових елемената и уметање нових елемената осигуравајући да листа остане сортирана.
Зашто нам треба Бисецт Модуле?
- Корисно за операције бинарног претраживања за претрагу у сортираној листи и за лоцирање тачака уметања.
- Пружа ефикасне методе за уметање елемената у сортирану листу уз одржавање реда.
- Избегава потребу за ручним сортирањем након сваког уметања штедећи време и труд.
- Нуди функције као што су бисецт() бисецт_лефт() бисецт_ригхт() и инсорт() за чист оптимизован код.
- Идеално за задатке као што је одржавање рангираних података на табели или било који сценарио који укључује уметање/претрагу сортираних података.
Основне функције бисектног модула
Бисецт модул углавном нуди две врсте функционалности:
- Проналажење тачке уметања (без уметања)
- Уметање елемената на исправан положај
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 у том опсегу без утицаја на остатак листе.