Cosa rappresenta esattamente la notazione grande Ө?


179

Sono davvero confuso sulle differenze tra O grande, Omega grande e Notazione Theta grande.

Capisco che il grande O è il limite superiore e il grande Omega è il limite inferiore, ma cosa rappresenta esattamente il grande Ө (theta)?

Ho letto che significa stretto , ma cosa significa?


Risposte:


93

Significa che l'algoritmo è sia big-O sia big-Omega nella data funzione.

Ad esempio, se lo è Ө(n), allora c'è una costante k, tale che la tua funzione (tempo di esecuzione, qualunque cosa), è più grande di n*kper sufficientemente grande n, e qualche altra costante Ktale che la tua funzione è più piccola di n*Kper sufficientemente grande n.

In altre parole, per sufficientemente grande n, è inserito tra due funzioni lineari:

Per k < Ke nsufficientemente grande,n*k < f(n) < n*K


Non è così, quelle variabili sono un po 'confuse, non sono correlate.
Aaron Robeson,

@commitandroider No, sono minuscole e maiuscole quindi diverse, sta usando il tipico stile matematico in cui due variabili "simili" (ma non correlate in alcun modo qui) usano maiuscole e minuscole.
Santropedro,

329

Per prima cosa capiamo cosa sono la grande O, la grande Theta e la grande Omega. Sono tutti insiemi di funzioni.

Big O sta dando il massimo asintotico , mentre il grande Omega sta dando un limite inferiore. Big Theta dà entrambi.

Tutto ciò che è Ө(f(n))è anche O(f(n)), ma non viceversa.
T(n)si dice Ө(f(n))che sia dentro O(f(n))e dentro Omega(f(n)).
Nella terminologia degli insiemi, Ө(f(n))è l' intersezione diO(f(n)) eOmega(f(n))

Ad esempio, unire il caso peggiore è sia O(n*log(n))e Omega(n*log(n))- e quindi è anche Ө(n*log(n)), ma lo è anche O(n^2), poiché n^2è asintoticamente "più grande" di esso. Tuttavia, è non è Ө(n^2) , dato che l'algoritmo non è Omega(n^2).

Una spiegazione matematica un po 'più profonda

O(n)è limite superiore asintotico. Se T(n)è O(f(n)), significa che da un certo n0, esiste una costante Ctale T(n) <= C * f(n). D'altra parte, big-Omega afferma che esiste una costante C2tale T(n) >= C2 * f(n))).

Non confondere!

Da non confondere con l'analisi dei casi peggiori, migliori e medi: tutte e tre le notazioni (Omega, O, Theta) non sono correlate all'analisi dei casi migliori, peggiori e medi degli algoritmi. Ognuno di questi può essere applicato a ciascuna analisi.

Di solito lo usiamo per analizzare la complessità degli algoritmi (come nell'esempio di ordinamento di fusione sopra). Quando diciamo "Algorithm A is O(f(n))", ciò che realmente intendiamo è "La complessità degli algoritmi nella peggiore analisi di 1 caso èO(f(n)) " - il che significa - è scale "simile" (o formalmente, non peggio) la funzione f(n).

Perché ci preoccupiamo del limite asintotico di un algoritmo?

Bene, ci sono molte ragioni per questo, ma credo che i più importanti siano:

  1. È molto più difficile determinare l' esatto funzione di complessità, quindi "compromettiamo" le notazioni big-O / big-Theta, che sono sufficientemente informative teoricamente.
  2. Anche il numero esatto di operazioni dipende dalla piattaforma . Ad esempio, se abbiamo un vettore (elenco) di 16 numeri. Quante operazioni ci vorranno? La risposta è, dipende. Alcune CPU consentono aggiunte vettoriali, mentre altre no, quindi la risposta varia tra diverse implementazioni e macchine diverse, il che è una proprietà indesiderata. La notazione big-O è tuttavia molto più costante tra macchine e implementazioni.

Per dimostrare questo problema, dai un'occhiata ai seguenti grafici: inserisci qui la descrizione dell'immagine

È chiaro che f(n) = 2*nè "peggio" di f(n) = n. Ma la differenza non è così drastica come dall'altra funzione. Possiamo vedere che f(n)=lognsta rapidamente diventando molto più basso rispetto alle altre funzioni e f(n) = n^2sta rapidamente diventando molto più alto delle altre.
Quindi - per i motivi sopra, "ignoriamo" i fattori costanti (2 * nell'esempio dei grafici) e prendiamo solo la notazione big-O.

Nell'esempio sopra, f(n)=n, f(n)=2*nsaranno sia in O(n)che in Omega(n)- e quindi anche in Theta(n).
D'altra parte - f(n)=lognsarà in O(n)(è "migliore" di f(n)=n), ma NON sarà in Omega(n)- e quindi NON sarà anche in Theta(n).
Simmeticamente, f(n)=n^2sarà in Omega(n), ma NON in O(n), e quindi - anche NON Theta(n).


1 Di solito, anche se non sempre. quando manca la classe di analisi (peggiore, media e migliore), intendiamo davvero il caso peggiore.


4
@krishnaChandra: allora f(n) = n^2è asintoticamente più forte n, e quindi è Omega (n). Tuttavia non è O (n) (perché per nvalori grandi , è più grande c*n, quindi , per tutti n). Poiché abbiamo detto che Theta (n) è l'intersezione di O (n) e Omega (n), poiché non è O (n), non può essere anche Theta (n).
Amit

8
È bello vedere qualcuno spiegare come la notazione big-O non sia correlata al tempo di esecuzione migliore / peggiore di un algoritmo. Ci sono così tanti siti Web che emergono quando google l'argomento che dice O (T (n)) indica il peggior tempo di esecuzione del caso.
Will Sewell,

1
@almel E '2 * n (2n, due volte n) non 2 ^ n
Amit

5
@VishalK 1. Big O è il limite superiore mentre n tende all'infinito. 2. Omega è il limite inferiore poiché n tende all'infinito. 3. Theta è sia il limite superiore che inferiore in quanto n tende all'infinito. Si noti che tutti i limiti sono validi solo "poiché n tende all'infinito", poiché i limiti non valgono per valori bassi di n (inferiore a n0 ). I limiti valgono per tutti nn0 , ma non sotto n0 dove i termini di ordine inferiore diventano dominanti.
Guadagnare il

1
@hey_you Leggi di nuovo la risposta. big O, Theta, Omega sono per funzioni, non per algoritmi. Unire l'ordinamento è il caso peggiore di Omega (n). È anche il caso migliore di O (n ^ 2). È anche il caso peggiore di Theta (nlogn). Fondamentalmente, per ogni analisi (peggiore / migliore / media / ...) hai una funzione di complessità T_best(n), T_worst(n), T_average(n). Non devono essere identici (e soprattutto non lo sono). O / Omega / Theta può essere applicato a uno qualsiasi di essi indipendentemente.
Amit

14

Theta (n):f(n) appartiene a una funzione Theta(g(n)), se esistono costanti positive c1e c2tali che f(n)possono essere inserite tra c1(g(n))e c2(g(n)). cioè dà sia il limite superiore che inferiore.

Theta (g (n)) = {f (n): esistono costanti positive c1, c2 e n1 tali che 0 <= c1 (g (n)) <= f (n) <= c2 (g (n)) per tutti n> = n1}

quando diciamo f(n)=c2(g(n))o f(n)=c1(g(n))rappresenta un limite asintoticamente stretto.

O (n): dà solo il limite superiore (può essere o meno stretto)

O (g (n)) = {f (n): esistono costanti positive c e n1 tali che 0 <= f (n) <= cg (n) per tutti n> = n1}

es : il limite 2*(n^2) = O(n^2)è stretto asintoticamente, mentre il limite 2*n = O(n^2)non è stretto asintoticamente.

o (n): dà solo il limite superiore (mai un limite stretto)

la notevole differenza tra O (n) & o (n) è f (n) è inferiore a cg (n) per tutti n> = n1 ma non uguale a come in O (n).

es : 2*n = o(n^2)ma2*(n^2) != o(n^2)


1
Non hai menzionato il grande Omega, che si riferisce al limite inferiore. Altrimenti, molto bella prima risposta e benvenuto!
Bohney,

1
mi è piaciuto il modo in cui ha incorniciato la definizione di Theta (n). Upvoted!
user720694,


1

Notazione Big Theta:

Niente da rovinare amico !!

Se abbiamo una funzione a valore positivo f (n) e g (n) accetta un argomento a valore positivo n, allora ϴ (g (n)) definito come {f (n): esistono costanti c1, c2 e n1 per tutti n> = n1}

dove c1 g (n) <= f (n) <= c2 g (n)

Facciamo un esempio:

let f (n) =

g (n) =

c1 = 5 e c2 = 8 e n1 = 1

Tra tutte le notazioni, la notazione fornisce la migliore intuizione sul tasso di crescita della funzione perché ci dà un limite stretto a differenza di big-oh e big -omega che danno rispettivamente i limiti superiore e inferiore.

ϴ ci dice che g (n) è il più vicino possibile a f (n), il tasso di crescita di g (n) è il più vicino possibile al tasso di crescita di f (n).

vedi l'immagine per avere una migliore intuizione


0

Prima di tutto la teoria

  1. Grande O = limite superiore O (n)

  2. Theta = Funzione ordine - theta (n)

  3. Omega = Notazione Q (limite inferiore) Q (n)

Perché le persone sono così confuse?

In molti blog e libri come questa affermazione è enfatizzata è come

"Questo è Big O (n ^ 3)" ecc.

e le persone spesso confondono come il tempo

O (n) == theta (n) == Q (n)

Ma ciò che vale la pena ricordare è che sono solo funzioni matematiche con i nomi O, Theta e Omega

quindi hanno la stessa formula generale del polinomio,

Permettere,

f (n) = 2n4 + 100n2 + 10n + 50 quindi,

g (n) = n4, quindi g (n) è la funzione che assume la funzione di input e restituisce la variabile con Biggerst Power,

Stesso f (n) & g (n) per sotto tutte le spiegazioni

Funzione O grande (fornisce il limite superiore)

Grande O (n4) = 3n4, perché 3n4> 2n4

3n4 è il valore di Big O (n4) Proprio come f (x) = 3x

n4 sta giocando un ruolo di x qui quindi

Sostituendo n4 con x'so, Big O (x ') = 2x', Ora siamo entrambi contenti che sia General Concept

Quindi 0 ≤ f (n) ≤ O (x ')

O (x ') = cg (n) = 3n4

Valore aggiunto,

0 ≤ 2n4 + 100n2 + 10n + 50 ≤ 3n4

3n4 è il nostro limite superiore

Theta (n) Fornisce un limite inferiore

Theta (n4) = cg (n) = 2n4 Perché 2n4 ≤ Il nostro esempio f (n)

2n4 è il valore di Theta (n4)

quindi, 0 ≤ cg (n) ≤ f (n)

0 ≤ 2n4 ≤ 2n4 + 100n2 + 10n + 50

2n4 è il nostro limite inferiore

Omega n - Funzione ordine

Questo è calcolato per scoprire che il tempo inferiore associato è simile al limite superiore,

Caso 1). Il limite superiore è simile al limite inferiore

if Upper Bound is Similar to Lower Bound, The Average Case is Similar

Example, 2n4 ≤ f(x) ≤ 2n4,
Then Omega(n) = 2n4

Caso 2). se il limite superiore non è simile al limite inferiore

in this case, Omega(n) is Not fixed but Omega(n) is the set of functions with the same order of growth as g(n).

Example 2n4 ≤ f(x) ≤ 3n4, This is Our Default Case,
Then, Omega(n) = c'n4, is a set of functions with 2 ≤ c' ≤ 3

Spero che questo abbia spiegato !!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.