Introducció
La cerca binària és un algorisme eficient per trobar un element en una llista ordenada. Funciona dividint repetidament la llista en dues meitats i comparant l'element de la meitat amb l'element que es busca. Aquest algorisme té una complexitat temporal de
Conceptes Bàsics
Cerca Binària
- Llista Ordenada: La cerca binària només funciona en llistes que estan prèviament ordenades.
- Divisió i Conquesta: L'algorisme es basa en el principi de dividir la llista en dues parts i conquerir la part que pot contenir l'element buscat.
Pseudocodi
funció cerca_binaria(llista, element): inici = 0 final = longitud(llista) - 1 mentre inici <= final: mig = (inici + final) // 2 si llista[mig] == element: retorna mig si llista[mig] < element: inici = mig + 1 si llista[mig] > element: final = mig - 1 retorna -1 # Element no trobat
Implementació en Python
def cerca_binaria(llista, element): inici = 0 final = len(llista) - 1 while inici <= final: mig = (inici + final) // 2 if llista[mig] == element: return mig elif llista[mig] < element: inici = mig + 1 else: final = mig - 1 return -1 # Element no trobat
Variants de la Cerca Binària
Cerca Binària Recursiva
La cerca binària també es pot implementar de manera recursiva.
Pseudocodi
funció cerca_binaria_recursiva(llista, element, inici, final): si inici > final: retorna -1 # Element no trobat mig = (inici + final) // 2 si llista[mig] == element: retorna mig si llista[mig] < element: retorna cerca_binaria_recursiva(llista, element, mig + 1, final) si llista[mig] > element: retorna cerca_binaria_recursiva(llista, element, inici, mig - 1)
Implementació en Python
def cerca_binaria_recursiva(llista, element, inici, final): if inici > final: return -1 # Element no trobat mig = (inici + final) // 2 if llista[mig] == element: return mig elif llista[mig] < element: return cerca_binaria_recursiva(llista, element, mig + 1, final) else: return cerca_binaria_recursiva(llista, element, inici, mig - 1)
Cerca Binària en Llistes amb Duplicats
Quan una llista pot contenir elements duplicats, la cerca binària es pot modificar per trobar la primera o l'última aparició d'un element.
Pseudocodi per trobar la primera aparició
funció cerca_binaria_primera_aparicio(llista, element): inici = 0 final = longitud(llista) - 1 resultat = -1 mentre inici <= final: mig = (inici + final) // 2 si llista[mig] == element: resultat = mig final = mig - 1 # Continua cercant a l'esquerra si llista[mig] < element: inici = mig + 1 si llista[mig] > element: final = mig - 1 retorna resultat
Implementació en Python
def cerca_binaria_primera_aparicio(llista, element): inici = 0 final = len(llista) - 1 resultat = -1 while inici <= final: mig = (inici + final) // 2 if llista[mig] == element: resultat = mig final = mig - 1 # Continua cercant a l'esquerra elif llista[mig] < element: inici = mig + 1 else: final = mig - 1 return resultat
Exercicis Pràctics
Exercici 1: Implementació Bàsica
Implementa una funció de cerca binària iterativa en Python que trobi un element en una llista ordenada.
Solució
def cerca_binaria(llista, element): inici = 0 final = len(llista) - 1 while inici <= final: mig = (inici + final) // 2 if llista[mig] == element: return mig elif llista[mig] < element: inici = mig + 1 else: final = mig - 1 return -1 # Element no trobat
Exercici 2: Cerca Binària Recursiva
Implementa una funció de cerca binària recursiva en Python.
Solució
def cerca_binaria_recursiva(llista, element, inici, final): if inici > final: return -1 # Element no trobat mig = (inici + final) // 2 if llista[mig] == element: return mig elif llista[mig] < element: return cerca_binaria_recursiva(llista, element, mig + 1, final) else: return cerca_binaria_recursiva(llista, element, inici, mig - 1)
Exercici 3: Primera Aparició
Implementa una funció de cerca binària que trobi la primera aparició d'un element en una llista ordenada amb elements duplicats.
Solució
def cerca_binaria_primera_aparicio(llista, element): inici = 0 final = len(llista) - 1 resultat = -1 while inici <= final: mig = (inici + final) // 2 if llista[mig] == element: resultat = mig final = mig - 1 # Continua cercant a l'esquerra elif llista[mig] < element: inici = mig + 1 else: final = mig - 1 return resultat
Errors Comuns i Consells
- Llista No Ordenada: La cerca binària només funciona en llistes ordenades. Assegura't que la llista estigui ordenada abans d'aplicar l'algorisme.
- Desbordament d'Enter: En llenguatges de programació amb limitacions d'enter, la suma de
inici
ifinal
pot causar un desbordament. Utilitza(inici + final) // 2
en lloc de(inici + final) / 2
. - Condicions de Bucle: Assegura't que les condicions del bucle
while
o les condicions de recursió estiguin correctament definides per evitar bucles infinits.
Conclusió
La cerca binària és un algorisme fonamental per a la cerca eficient en llistes ordenades. Les seves variants, com la cerca recursiva i la cerca en llistes amb duplicats, amplien la seva aplicabilitat. Practicar la implementació d'aquests algorismes ajuda a comprendre millor els conceptes de divisió i conquesta i l'eficiència algorítmica.
Algoritmes Avançats
Mòdul 1: Introducció als Algoritmes Avançats
Mòdul 2: Algoritmes d'Optimització
- Programació Lineal
- Algoritmes d'Optimització Combinatòria
- Algoritmes Genètics
- Optimització de Colònia de Formigues
Mòdul 3: Algoritmes en Grafs
- Representació de Grafs
- Cerca en Grafs: BFS i DFS
- Algoritmes de Camins Mínims
- Algoritmes de Flux Màxim
- Algoritmes d'Aparellament en Grafs
Mòdul 4: Algoritmes de Cerca i Ordenació
Mòdul 5: Algoritmes d'Aprenentatge Automàtic
- Introducció a l'Aprenentatge Automàtic
- Algoritmes de Classificació
- Algoritmes de Regressió
- Xarxes Neuronals i Deep Learning
- Algoritmes de Clustering
Mòdul 6: Casos d'Estudi i Aplicacions
- Optimització en la Indústria
- Aplicacions de Grafs en Xarxes Socials
- Cerca i Ordenació en Grans Volums de Dades
- Aplicacions d'Aprenentatge Automàtic en la Vida Real