logo

Функции на алгоритъм за разполовяване в Python

The разполовявам модул в Python предоставя прости и бързи (базирани на двоично търсене) функции за търсене на елемент в сортиран списък, намиране на правилната позиция за вмъкване на нови елементи и вмъкване на нови елементи, като се гарантира, че списъкът остава сортиран.

Защо се нуждаем от Bisect модул?

  1. Полезно за операции за двоично търсене за търсене в сортиран списък и за намиране на точки за вмъкване.
  2. Предоставя ефективни методи за вмъкване на елементи в сортиран списък, като същевременно поддържа ред.
  3. Избягва необходимостта от ръчно сортиране след всяко поставяне, спестявайки време и усилия.
  4. Предлага функции като bisect() bisect_left() bisect_right() и insort() за чист оптимизиран код.
  5. Идеален за задачи като поддържане на класирани данни в класации или всеки сценарий, включващ вмъкване/търсене на сортирани данни.

Основни функции на Bisect модул

Модулът bisect предлага основно два вида функционалности:



  • Намиране на точката на вмъкване (без вмъкване)
  • Вмъкване на елементи в правилната позиция

1. Намиране на точки на вмъкване

Тези функции връщат индекса, където трябва да бъде вмъкнат новият елемент, за да поддържа списъка сортиран.

a) bisect.bisect(): Връща най-дясната точка на вмъкване за елемента. Ако елементът вече съществува, точката на вмъкване ще бъде след съществуващите записи.

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



Параметър:

  • списък: Сортиран списък.
  • номер: Елемент за вмъкване.
  • моля: Стартов индекс за търсене (по избор).
  • край: Краен индекс за търсене (по избор).

б) bisect.bisect_left(): Връща най-лявата точка на вмъкване за елемента. Ако елементът съществува, точката на вмъкване ще бъде преди съществуващите записи.

xor в c++

bisect.bisect_left(списък num beg=0 край=len(списък))



в) bisect.bisect_right(): Идентичен на bisect.bisect() връща най-дясната точка на вмъкване.

bisect.bisect_right(списък num beg=0 край=len(списък))

Пример: Намерете индекси за вмъкване за стойност 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 

Обяснение:

  • разполовявам (li 4): Връща 5, защото намира най-дясната позиция след последните 4 в списъка (индекс 4), така че точката на вмъкване е 5.
  • bisect_left(li 4): Връща 2, защото намира най-лявата позиция преди първите 4 в списъка (индекс 2).
  • bisect_right(li 4 0 4): Работи само върху подсписък това [0:4] и връща 4, защото вмъква 4 след последните 4 в подсписъка.

2. Вмъкване на елементи

Тези функции вмъкват елемента на правилната позиция, за да поддържат сортирането.

а) bisect.insort(): Вмъква елемента в най-дясната позиция. За разлика от функциите bisect(), това всъщност променя списъка чрез вмъкване на елемента.

bisect.insort(списък num beg=0 край=len(списък))

Параметър:

  • списък: Сортиран списък.
  • номер: Елемент за вмъкване.
  • моля (по избор): Начален индекс за вмъкване (по подразбиране 0).
  • край (по избор): Краен индекс за вмъкване (по подразбиране len(списък)).

б) bisect.insort_left(): Вмъква елемента в най-лявата позиция.

bisect.insort_left(списък номер бег=0 край=лен(списък))

в) bisect.insort_right(): Вмъква елемента в най-дясната позиция (подобно на insort()).

java concat низове

bisect.insort_right(списък num beg=0 край=len(списък))

Пример: Вмъкнете стойност 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] 

Обяснение:

  • възниквам (l1 5) вмъква 5 на най-дясната подходяща позиция – след всички 4 и преди 6.
  • insort_left(l2 ​​5) вмъква 5 в най-лявата подходяща позиция – същото като insort тук, тъй като 5 не е в списъка.
  • insort_right(l3 5 0 4) вмъква 5 в индекс 4, като работи само върху подсписък l3[0:4] = [1 3 4 4] след последното ≤ 5 в този диапазон, без да засяга останалата част от списъка.