Salta al contenuto
Note per Studenti Esercizio 1 · confronto tra complessità quadratica e n log n

Esercizio 1confronto tra complessità quadratica e n log n

In questa pagina 5

Testo (scritto del 24/06/2026, parte 1, esercizio 1, 3 punti). Due algoritmi AA e BB risolvono lo stesso problema computazionale. La loro complessità al caso pessimo è TA(n)=Θ(n2)T_A(n) = \Theta(n^2) e TB(n)=Θ(nlog⁡n)T_B(n) = \Theta(n \log n), dove nn è la dimensione dell'input. Rispondere, motivando brevemente.

(a) È vero che esiste n0n_0 tale che, per ogni n≥n0n \ge n_0, l'algoritmo BB esegue meno operazioni di AA?

(b) Uno studente afferma: "Poiché nlog⁡n<n2n \log n < n^2, allora BB è sempre più veloce di AA". È corretto?

(c) Un secondo studente afferma: "Se l'input diventa molto grande, la differenza tra i due algoritmi diventa trascurabile, poiché entrambi hanno tempo di esecuzione che tende a infinito". È corretto?


Richiami

TA∈Θ(n2)T_A \in \Theta(n^2) significa che esistono costanti positive a1,a2,n1a_1, a_2, n_1 con a1n2≤TA(n)≤a2n2a_1 n^2 \le T_A(n) \le a_2 n^2 per n≥n1n \ge n_1; analogamente per TBT_B con b1nlog⁡n≤TB(n)≤b2nlog⁡nb_1 n \log n \le T_B(n) \le b_2 n \log n (vedi Notazione asintoticaDefinizioni di O, Omega, Theta e o piccolo con le costanti c ed n0; esempi con costanti esplicite; proprietà (polinomi, esponenziali, logaritmi, somme, implicazioni tra notazioni); sommatorie notevoli; terminologia (logaritmica, lineare, polinomiale, esponenziale).Notazione asintotica →). Le costanti non sono note: la notazione le nasconde.

(a) Sì

Si confronta il limite del rapporto:

nlog⁡nn2=log⁡nn→n→∞0,quindi nlog⁡n∈o(n2).\frac{n \log n}{n^2} = \frac{\log n}{n} \xrightarrow[n \to \infty]{} 0, \qquad \text{quindi } n \log n \in o(n^2).

Il limite log⁡nn→0\frac{\log n}{n}\to0 è un caso della gerarchia degli infiniti: ogni potenza positiva di nn cresce più di qualunque potenza di log⁡n\log n (Limiti notevoli e gerarchia degli infinitiI limiti di base per sciogliere le forme indeterminate delle successioni: potenze, polinomi, il numero e, esponenziali, la gerarchia logaritmi < potenze < esponenziali < fattoriale < n^n e la razionalizzazione.Limiti notevoli e gerarchia degli infiniti →, Limiti di successioniUna successione ha limite l se, da un certo indice in poi, i suoi termini stanno vicini a l quanto si vuole; definizioni con epsilon, limiti infiniti e unicità.Limiti di successioni →); numericamente log⁡2nn\frac{\log_2 n}{n} vale 0,330{,}33 per n=10n=10, 0,00660{,}0066 per n=1000n=1000, 2⋅10−52\cdot10^{-5} per n=106n=10^6. Per definizione di oo, per ogni costante c>0c > 0 esiste n0n_0 tale che nlog⁡n≤c n2n \log n \le c\,n^2 per n≥n0n \ge n_0. Allora, fissate le costanti nascoste, TB(n)≤b2 nlog⁡nT_B(n) \le b_2\, n \log n e TA(n)≥a1n2T_A(n) \ge a_1 n^2: scegliendo c=a1/(2b2)c = a_1 / (2 b_2) (una costante positiva: serve proprio che oo valga per ogni cc, anche per questa piccolissima) si ha, per nn abbastanza grande (cioè nn maggiore sia di n0n_0 sia delle soglie n1n_1 delle due definizioni Θ\Theta),

TB(n)≤b2 nlog⁡n≤b2⋅a12b2 n2=a12 n2<a1n2≤TA(n).T_B(n) \le b_2\, n \log n \le b_2 \cdot \frac{a_1}{2 b_2}\, n^2 = \frac{a_1}{2}\, n^2 < a_1 n^2 \le T_A(n).

Quindi da un certo n0n_0 in poi BB esegue strettamente meno operazioni di AA: BB è asintoticamente più efficiente.

(b) No

nlog⁡n<n2n \log n < n^2 è un confronto tra le funzioni che descrivono solo l'andamento. Le complessità vere sono Θ(⋅)\Theta(\cdot) di queste funzioni, cioè moltiplicate per costanti ignote. Controesempio: TA(n)=n2T_A(n) = n^2 e TB(n)=1000 nlog⁡2nT_B(n) = 1000\, n \log_2 n rispettano le ipotesi, ma TB(n)<TA(n)T_B(n) < T_A(n) solo se 1000log⁡2n<n1000 \log_2 n < n, cioè per n≥13747n \ge 13747 (calcolato con un piccolo programma; controllo: 1000log⁡213746≈13746,7>137461000\log_2 13746\approx 13746{,}7>13746 mentre 1000log⁡213747≈13746,8<137471000\log_2 13747\approx 13746{,}8<13747, quindi 1374713747 è il primo intero per cui la disuguaglianza è vera). Dalla disuguaglianza TB<TA  ⟺  1000 nlog⁡2n<n2  ⟺  1000log⁡2n<nT_B<T_A \iff 1000\,n\log_2 n < n^2 \iff 1000\log_2 n < n (si divide per n>0n>0). Per nn più piccoli, ad esempio n=1000n = 1000, AA fa 10610^6 operazioni e BB circa 10710^7: AA è più veloce. Conclusione: la superiorità di BB vale per nn sufficientemente grande, non sempre. L'analisi asintotica ignora le costanti e può essere fuorviante per input piccoli.

Grafico interattivo: Controesempio del punto (b), T_A = n² e T_B = 1000·n·log₂n, in milioni di operazioni: B sta sopra A (cioè è più lento) fino a n = 13747, dove le due curve si incontrano (189 milioni di operazioni), e solo oltre diventa più veloce; a n = 1000 sono 1 contro 10 milioni

(c) No

Il fatto che entrambi i tempi tendano a infinito non implica che la differenza sia trascurabile; conta il rapporto:

n2nlog⁡n=nlog⁡n→n→∞∞.\frac{n^2}{n \log n} = \frac{n}{\log n} \xrightarrow[n \to \infty]{} \infty.

All'aumentare di nn il tempo di AA diventa infinitamente più grande di quello di BB (per esempio per n=106n = 10^6 il rapporto è 106log⁡2106=10619,93≈5⋅104\frac{10^6}{\log_2 10^6}=\frac{10^6}{19{,}93}\approx 5 \cdot 10^4). Un algoritmo che impiegasse un secondo con BB ne impiegherebbe circa 14 ore con AA. Anche la differenza assoluta n2−nlog⁡nn^2 - n \log n cresce senza limite. L'affermazione è falsa.

Errori comuni

  • Rispondere "sì" al punto (b): nlog⁡n<n2n \log n < n^2 dice solo come crescono le funzioni, non il tempo reale.
  • Confondere "tendono entrambi a infinito" con "hanno lo stesso ordine di grandezza".
  • Nel punto (a) dimenticare che l'affermazione è su nn abbastanza grande, non su tutti gli nn.

Versione ripasso

Testo. TA=Θ(n2)T_A = \Theta(n^2), TB=Θ(nlog⁡n)T_B = \Theta(n \log n). (a) BB esegue meno operazioni di AA per ogni n≥n0n \ge n_0? (b) "nlog⁡n<n2n \log n < n^2, quindi BB è sempre più veloce"? (c) "la differenza diventa trascurabile perché entrambi tendono a infinito"?

Richiamo: TA∈Θ(n2)T_A \in \Theta(n^2) vuol dire a1n2≤TA(n)≤a2n2a_1 n^2 \le T_A(n) \le a_2 n^2 per n≥n1n \ge n_1, con costanti ignote (vedi Notazione asintoticaDefinizioni di O, Omega, Theta e o piccolo con le costanti c ed n0; esempi con costanti esplicite; proprietà (polinomi, esponenziali, logaritmi, somme, implicazioni tra notazioni); sommatorie notevoli; terminologia (logaritmica, lineare, polinomiale, esponenziale).Notazione asintotica →).

  • (a) Sì. nlog⁡nn2=log⁡nn→0\frac{n \log n}{n^2} = \frac{\log n}{n} \to 0, cioè nlog⁡n∈o(n2)n \log n \in o(n^2): per ogni c>0c > 0 esiste n0n_0 con nlog⁡n≤c n2n \log n \le c\,n^2 per n≥n0n \ge n_0. Numericamente log⁡2nn\frac{\log_2 n}{n} vale 0,330{,}33 per n=10n = 10 e 0,00660{,}0066 per n=1000n = 1000. Con TB≤b2 nlog⁡nT_B \le b_2\, n \log n, TA≥a1n2T_A \ge a_1 n^2 e c=a1/(2b2)c = a_1/(2b_2) si ottiene TB≤a12n2<TAT_B \le \frac{a_1}{2} n^2 < T_A per nn abbastanza grande.
  • (b) No. Le costanti sono nascoste in Θ\Theta. Controesempio: TA=n2T_A = n^2, TB=1000 nlog⁡2nT_B = 1000\, n \log_2 n. Qui TB<TAT_B < T_A solo per n≥13747n \ge 13747; per n=1000n = 1000 è AA a essere più veloce.
  • (c) No. n2nlog⁡n=nlog⁡n→∞\frac{n^2}{n \log n} = \frac{n}{\log n} \to \infty: per n=106n = 10^6 il rapporto vale circa 5⋅1045 \cdot 10^4. La differenza n2−nlog⁡nn^2 - n \log n cresce senza limite.
  • Errori tipici: rispondere "sì" al punto (b); scambiare "tendono entrambi a infinito" per "stesso ordine di grandezza"; dimenticare che (a) vale solo da n0n_0 in poi.

Teoria collegata