logo

Funcions de l'algoritme de bisecció en Python

El bisecteu El mòdul de Python proporciona funcions senzilles i ràpides (basades en cerca binària) per cercar un element en una llista ordenada, trobar la posició correcta per inserir nous elements i inserir nous elements assegurant-se que la llista romangui ordenada.

Per què necessitem el mòdul Bisect?

  1. Útil per a operacions de cerca binària per cercar en una llista ordenada i per localitzar punts d'inserció.
  2. Proporciona mètodes eficients per inserir elements en una llista ordenada tot mantenint l'ordre.
  3. Evita la necessitat d'ordenar manualment després de cada inserció estalviant temps i esforç.
  4. Ofereix funcions com bisect() bisect_left() bisect_right() i insort() per a un codi net optimitzat.
  5. Ideal per a tasques com el manteniment de les taules de classificació de les dades classificades o qualsevol escenari que inclogui la inserció/cerca de dades ordenades.

Funcions bàsiques del mòdul Bisect

El mòdul bisect ofereix principalment dos tipus de funcionalitats:

  • Trobar el punt d'inserció (sense inserció)
  • Inserció d'elements a la posició correcta

1. Trobar punts d'inserció

Aquestes funcions retornen l'índex on s'ha d'inserir l'element nou per mantenir la llista ordenada.



a) bisect.bisect(): Retorna el punt d'inserció més a la dreta de l'element. Si l'element ja existeix, el punt d'inserció estarà després de les entrades existents.

bisect.bisect(número llista beg=0 final=len(llista))

Paràmetre:

  • llista: Llista ordenada.
  • num: Element a inserir.
  • suplicar: Inicia l'índex per a la cerca (opcional).
  • final: Índex final per a la cerca (opcional).

b) bisect.bisect_left(): Retorna el punt d'inserció més a l'esquerra de l'element. Si l'element existeix, el punt d'inserció estarà abans de les entrades existents.

intel·ligència artificial i agents intel·ligents

bisect.bisect_left(núm. llista beg=0 final=len(llista))

c) bisect.bisect_right(): Idèntic a bisect.bisect() retorna el punt d'inserció més a la dreta.

bisect.bisect_right (núm. llista beg=0 final=len (llista))

Exemple: Trobeu índexs d'inserció per al valor 4 en una llista ordenada mitjançant diferents funcions de bisectriu.

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 

Sortida
5 2 4 

Explicació:

  • bisecte (li 4): Retorna 5 perquè troba la posició més dreta després dels últims 4 de la llista (índex 4), de manera que el punt d'inserció és 5.
  • bisect_esquerra (li 4): Retorna 2 perquè troba la posició més a l'esquerra abans dels 4 primers de la llista (índex 2).
  • bisect_dreta (li 4 0 4): Funciona només a la subllista això[0:4] i retorna 4 perquè insereix 4 després dels últims 4 de la subllista.

2. Inserció d'elements

Aquestes funcions insereixen l'element a la posició adequada per mantenir l'ordenació.

a) bisect.insort(): Insereix l'element a la posició més dreta. A diferència de les funcions bisect(), això en realitat modifica la llista inserint l'element.

bisect.insort (número llista beg=0 final=len (llista))

ordres sql ddl

Paràmetre:

  • llista: Llista ordenada.
  • num: Element a inserir.
  • beg (opcional): Inici índex per a la inserció (0 per defecte).
  • final (opcional): Índex final per a la inserció (len(llista) per defecte).

b) bisect.insort_left(): Insereix l'element a la posició més esquerra.

bisect.insort_left(núm. llista beg=0 final=len(llista))

c) bisect.insort_right(): Insereix l'element a la posició més dreta (semblant a insort()).

bisect.insort_right (número llista beg=0 final=len (llista))

Exemple: Inseriu el valor 5 en una llista ordenada mantenint-lo ordenat mitjançant diferents estratègies d'inserció.

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) 

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

Explicació:

  • sorgir (l1 5) insereix 5 a la posició més adequada a la dreta: després dels 4 i abans de les 6.
  • insort_left(l2 ​​5) insereix 5 a la posició adequada més a l'esquerra, igual que insereix aquí, ja que 5 no és a la llista.
  • insort_right(l3 5 0 4) insereix 5 a l'índex 4 que només funciona a la subllista l3[0:4] = [1 3 4 4] després de l'últim ≤ 5 d'aquest rang sense afectar la resta de la llista.