La notació asimptòtica és una eina fonamental en l'anàlisi d'algorismes, ja que permet descriure el comportament de la complexitat temporal i espacial dels algorismes de manera abstracta i independent del maquinari o la implementació específica. En aquesta secció, explorarem els conceptes bàsics de la notació asimptòtica, incloent-hi les notacions més comunes: O gran, Ω gran i Θ gran.
Conceptes Bàsics
Definició
La notació asimptòtica s'utilitza per descriure el creixement de la complexitat d'un algorisme en funció de la mida de l'entrada. Ens permet comparar l'eficiència d'algorismes de manera teòrica.
Importància
- Comparació d'algorismes: Permet comparar diferents algorismes per a la mateixa tasca.
- Escalabilitat: Ajuda a entendre com es comportarà un algorisme a mesura que la mida de l'entrada creix.
- Optimització: Facilita la identificació de colls d'ampolla en el rendiment.
Notacions Asimptòtiques
O Gran (Big O)
La notació O gran descriu un límit superior del temps d'execució d'un algorisme. És a dir, proporciona una cota superior del creixement de la funció de complexitat.
Definició Formal: \[ f(n) = O(g(n)) \] si existeixen constants positives \( c \) i \( n_0 \) tals que: \[ 0 \leq f(n) \leq c \cdot g(n) \quad \text{per a tot} \ n \geq n_0 \]
Exemple: Si tenim una funció \( f(n) = 3n^2 + 2n + 1 \), podem dir que \( f(n) = O(n^2) \) perquè, per a \( n \) suficientment gran, \( 3n^2 \) domina els altres termes.
Ω Gran (Omega Gran)
La notació Ω gran descriu un límit inferior del temps d'execució d'un algorisme. Proporciona una cota inferior del creixement de la funció de complexitat.
Definició Formal: \[ f(n) = \Omega(g(n)) \] si existeixen constants positives \( c \) i \( n_0 \) tals que: \[ 0 \leq c \cdot g(n) \leq f(n) \quad \text{per a tot} \ n \geq n_0 \]
Exemple: Si tenim una funció \( f(n) = 3n^2 + 2n + 1 \), podem dir que \( f(n) = \Omega(n^2) \) perquè, per a \( n \) suficientment gran, \( 3n^2 \) és el terme dominant.
Θ Gran (Theta Gran)
La notació Θ gran descriu una cota ajustada del temps d'execució d'un algorisme. Indica que una funció creix exactament al mateix ritme que una altra funció.
Definició Formal: \[ f(n) = \Theta(g(n)) \] si existeixen constants positives \( c_1, c_2 \) i \( n_0 \) tals que: \[ 0 \leq c_1 \cdot g(n) \leq f(n) \leq c_2 \cdot g(n) \quad \text{per a tot} \ n \geq n_0 \]
Exemple: Si tenim una funció \( f(n) = 3n^2 + 2n + 1 \), podem dir que \( f(n) = \Theta(n^2) \) perquè \( 3n^2 \) és el terme dominant i els altres termes són insignificants per a \( n \) gran.
Comparació de Notacions
Notació | Descripció | Exemple |
---|---|---|
O gran | Límite superior | \( f(n) = O(n^2) \) |
Ω gran | Límite inferior | \( f(n) = \Omega(n^2) \) |
Θ gran | Límite ajustat | \( f(n) = \Theta(n^2) \) |
Exercicis Pràctics
Exercici 1
Determina la notació asimptòtica per a les següents funcions:
- \( f(n) = 5n^3 + 2n^2 + n \)
- \( g(n) = 4n \log n + 20 \)
- \( h(n) = 2^n + n^2 \)
Solucions:
- \( f(n) = O(n^3) \), \( f(n) = \Omega(n^3) \), \( f(n) = \Theta(n^3) \)
- \( g(n) = O(n \log n) \), \( g(n) = \Omega(n \log n) \), \( g(n) = \Theta(n \log n) \)
- \( h(n) = O(2^n) \), \( h(n) = \Omega(2^n) \), \( h(n) = \Theta(2^n) \)
Exercici 2
Classifica les següents funcions en ordre creixent de complexitat:
- \( n \log n \)
- \( n^2 \)
- \( 2^n \)
- \( n! \)
- \( \log n \)
Solució: \[ \log n < n \log n < n^2 < 2^n < n! \]
Resum
En aquesta secció, hem après sobre la notació asimptòtica i les seves tres formes principals: O gran, Ω gran i Θ gran. Hem vist com aquestes notacions ens ajuden a descriure el comportament de la complexitat dels algorismes de manera abstracta i independent de la implementació específica. També hem practicat amb alguns exercicis per reforçar els conceptes apresos. En el següent mòdul, aprofundirem en l'anàlisi de la complexitat temporal dels algorismes.
Curs d'Anàlisi i Disseny d'Algorismes
Mòdul 1: Introducció als Algorismes
Mòdul 2: Anàlisi d'Algorismes
- Anàlisi de Complexitat Temporal
- Anàlisi de Complexitat Espacial
- Cases de Complexitat: Millor, Pitjor i Promig
Mòdul 3: Estratègies de Disseny d'Algorismes
Mòdul 4: Algorismes Clàssics
- Cerca Binària
- Ordenació per Inserció
- Ordenació per Mescla (Merge Sort)
- Ordenació Ràpida (Quick Sort)
- Algorisme de Dijkstra
- Algorisme de Floyd-Warshall