Si definiscano formalmente le relazioni O, Ω, Θ, o, ω e si dimostri la verità o la falsità di ciascuna delle seguenti affermazioni, giustificando formalmente le risposte:
- Se P(n) è un polinomio di grado k, allora P(n) = Θ(nk)
- n = O(n log log n)
- n log log n = O(n1+ε), per ogni ε > 0
- f(n) = O(g(n)) se e solo se g(n) = Ω(f(n))
- ω(f(n)) ∩ O(g(n)) = ∅
Table of Contents
Definizioni
O(f(n)) = {g(n) : ∃ c > 0, n0 ≥ 0, g(n) ≤ cf(n) ∀ n ≥ n0}
O(f(n)) significa che esiste una funzione g(n) tale che, data una costante c maggiore di zero e un parametro zero n0 maggiore o uguale a zero, g(n) è minore o uguale a f(n) per la costante per ogni n maggiore o uguale a n0.
Ω(f(n)) = {g(n) : ∃ c > 0, n0 ≥ 0, g(n) ≥ cf(n) ∀ n ≥ n0}
Analogamente, o(f(n)) = {g(n) : ∃ c > 0, n0 ≥ 0, g(n) < cf(n) ∀ n ≥ n0} e ω(f(n)) = {g(n) : ∃ c > 0, n0 ≥ 0, g(n) > cf(n) ∀ n ≥ n0}
Θ(f(n)) = {g(n) : ∃ c1 > 0, c2 > 0, n0 ≥ 0, c1f(n) ≤ g(n) ≤ c2f(n) ∀ n ≥ n0}
ovvero, scelte due costanti diverse e maggiori di zero, per una costante vale O(f(n)) e per l'altra vale Ω(f(n)).
Se P(n) è un polinomio di grado k, allora P(n) = Θ(nk)
Vero, poiché per la definizione di Θ, Θ(nk) = {g(n) : ∃ c1 > 0, c2 > 0, n0 ≥ 0, c1f(n) ≤ g(n) ≤ c2f(n) ∀ n ≥ n0}.
Asintoticamente, i termini di grado inferiore a k si possono omettere, perché per ogni h < k, si ha che
Dunque, in un polinomio nella forma cink+ciink-1+ciiink-2+ ... + cin, basta considerare il termine di grado più alto (cink) e prendere un c1 < ci e un c2 > ci
n = O(n log log n)
L'uguaglianza è vera se, per la definizione di O(n), n ≤ n log log n; dividendo entrambi i termini per n, si ottiene che 1 ≤ log log n, che è vero per tutti gli n ≥ e^2
n log log n = O(n1+ε), per ogni ε > 0
n1+ε si può scrivere anche n * nε, in questo modo è possibile dividere per n entrambi i membri. L'uguaglianza è verificata se log log n ≤ nε per ogni ε > 0.
L'uguaglianza si può dire verificata se è vero che:
Ma applicando de l'hôpital, vediamo che
che tende a +∞.
La risposta alla domanda è quindi che non è possibile generalizzare l'equivalenza per ogni ε > 0.
f(n) = O(g(n)) se e solo se g(n) = Ω(f(n))
Vero, è la proprietà della simmetria trasposta.
ω(f(n)) ∩ O(g(n)) = ∅
Falso.
Per definizione (condizioni al contorno omesse), ω(f(n)) = {g(n) > cf(n)} e O(g(n)) = {f(n) ≤ cg(n)}, quindi g(n) > cf(n) ∩ f(n) ≤ cg(n) ⇒ f(n) < cg(n), che è esattamente ω(f(n)).