Qual è la differenza tra limite inferiore e limite stretto?


100

Con il riferimento a questa risposta , cos'è Theta (tight bound)?

Omega è il limite inferiore, abbastanza compreso, il tempo minimo che può richiedere un algoritmo. E sappiamo che Big-O è per il limite superiore, significa il tempo massimo che può richiedere un algoritmo. Ma non ho idea del Theta.

Risposte:


155

Big O è il limite superiore, mentre Omega è il limite inferiore. Theta richiede sia Big O che Omega, quindi è per questo che viene definito un limite stretto (deve essere sia il limite superiore che quello inferiore).

Ad esempio, un algoritmo che Omega(n log n)richiede almeno n log ntempo, ma non ha limiti superiori. Una presa di algoritmo Theta(n log n)è di gran lunga preferenziale poiché richiede almeno n log n (Omega n log n) e non più di n log n (Big On log n).


7
Oh .. Ora il termine "vincolo stretto" mi sembra abbastanza autoesplicativo. Grazie Chris. Stupido, forse mi aspettavo un'idea complessa. :)
Adeel Ansari

6
Sì, ci sono molte annotazioni fantasiose lanciate in giro, ma non è troppo complessa una volta che l'hai presa sotto la cintura.
Chris Bunch

4
Questo documento disponibile gratuitamente da Virginia Tech spiega con esempi le differenze nelle prestazioni tra algoritmi di diversa complessità e spiega brevemente l'Analisi asintotica: people.cs.vt.edu/shaffer/Book/C++3e20120102.pdf
Alan

Cosa intendi per "Un algoritmo che prende Theta (n log n) è di gran lunga preferenziale poiché richiede almeno n log n (Omega n log n) e non più di n log n (Big O n log n).", Come in, è l'esatta complessità di un algoritmo come hai scritto ha detto almeno Omega (nlogn) e al massimo BigO (nlogn)?
Nikhil Verma

1
In termini semplici possiamo chiamare: limite superiore (Big (O)) come il caso peggiore? vincolato come il caso medio? limite inferiore (Omega) come il caso migliore?
Revanth

113

La notazione Θ ( notazione theta) è chiamata tight-bound perché è più precisa di notazione O e Ω notazione (omega notazione).

Se fossi pigro, potrei dire che la ricerca binaria su un array ordinato è O (n 2 ), O (n 3 ) e O (2 n ), e sarei tecnicamente corretto in ogni caso. Questo perché la notazione O specifica solo un limite superiore e la ricerca binaria è limitata sul lato alto da tutte queste funzioni, ma non molto strettamente. Queste stime pigre sarebbero inutili .

La notazione Θ risolve questo problema combinando la notazione O e la notazione Ω. Se dico che la ricerca binaria è Θ (log n), ciò fornisce informazioni più precise. Ti dice che l'algoritmo è limitato su entrambi i lati dalla funzione data, quindi non sarà mai significativamente più veloce o più lento di quanto dichiarato.


11
If I were lazy, I could say that binary search on a sorted array is O(n2), O(n3), and O(2n), and I would be technically correct in every case- Sembra che la maggior parte delle persone nel mondo dei computer sia solo pigra poiché tutti parlano principalmente solo delle complessità di Big O.
RBT

If I were lazy, I could say that binary search on a sorted array is O(n2), O(n3), and O(2n), and I would be technically correct in every caseNel caso in cui qualcuno sia confuso con questo: per quel tipo di funzioni che non sono asintoticamente strette viene usata la notazione con minuscola o. Esempio: - Il limite 2n ^ 2 = O (n ^ 2) è asintoticamente stretto, ma il limite 2n = O (n ^ 2) non lo è. Per saperne di più: stackoverflow.com/questions/1364444/…
Dragos Strugar,

18

Se hai qualcosa che è O (f (n)) significa che ci sono k , g (n) tali che f (n)kg (n) .

Se hai qualcosa che è Ω (f (n)) significa che ci sono k , g (n) tali che f (n)kg (n) .

E se hai qualcosa con O (f (n)) e Ω (f (n)) , allora è Θ (f (n) .

L' articolo di Wikipedia è decente, anche se un po 'denso.


Ora leggo la famiglia delle notazioni Bachmann-Landau. Grazie Charlie, ci sono stato prima, ma sono tornato senza procedere alla sua lunghezza.
Adeel Ansari

Ehi, è bello aggiornarsi ogni tanto sulle composizioni di dottorato.
Charlie Martin,

Si noti che la notazione O grande di Landau non è limitata alla complessità algoritmica.
Charlie Martin,

Sembra sbagliato. Nella prima riga dovrebbe leggere "Se hai qualcosa che è O (g (n))", cioè, ginvece di f, e il resto può essere lasciato così com'è. Lo stesso vale per la seconda riga: dovrebbe essere "Se hai qualcosa che è Ω (g (n))". Puoi ricontrollare per favore?
Fabio dice Reinstate Monica

L'intero argomento è così incasinato che qualcuno con quel merito potrebbe anche sbagliarlo: D Scherzi a parte, qualcuno deve aggiustare questa risposta. Questo confonde le persone (mi ha fatto molto).
Rad

5

Il limite superiore asintotico significa che un dato algoritmo viene eseguito durante il periodo di tempo massimo, a seconda del numero di input.

Prendiamo un algoritmo di ordinamento come esempio. Se tutti gli elementi di un array sono in ordine decrescente, per ordinarli occorrerà un tempo di esecuzione di O(n), mostrando la complessità del limite superiore. Se l'array è già ordinato, il valore sarà O(1).

Generalmente, O-notationviene utilizzato per la complessità del limite superiore.


Il limite asintoticamente stretto (c 1 g (n) ≤ f (n) ≤ c 2 g (n)) mostra la complessità del limite medio per una funzione, avente un valore tra i limiti del limite (limite superiore e limite inferiore), dove c 1 e c 2 sono costanti.


1
se l'array è ordinato, il limite sarà ancora O (n)
Arun Aravind

2
@ ArunAravind Puoi spiegare perché?
nbro

3

Le frasi tempo minimo e tempo massimo qui sono un po 'fuorvianti. Quando parliamo di grandi notazioni O, non è il tempo effettivo che ci interessa, è il modo in cui il tempo aumenta quando la nostra dimensione di input diventa più grande. E di solito stiamo parlando del tempo medio o peggiore, non del caso migliore , che di solito non è significativo per risolvere i nostri problemi.

Utilizzando la ricerca array nella risposta accettata all'altra domanda come esempio. Il tempo necessario per trovare un numero particolare nell'elenco di dimensione n è in media n / 2 * some_constant. Se lo tratti come una funzione f(n) = n/2*some_constant, non aumenta più velocemente di g(n) = n, nel senso dato da Charlie. Inoltre, aumenta non più lentamente di g(n)nessuno dei due. Quindi, g(n)è in realtà sia un limite superiore che un limite inferiore f(n)nella notazione Big-O, quindi la complessità della ricerca lineare è esattamente n , il che significa che è Theta (n).

A questo proposito, la spiegazione nella risposta accettata all'altra domanda non è del tutto corretta, la quale afferma che O (n) è il limite superiore perché l'algoritmo può funzionare a tempo costante per alcuni input (questo è il caso migliore che ho menzionato sopra, che non è proprio quello che vogliamo sapere sul tempo di esecuzione).


Quindi, possiamo dire che Ω è il caso migliore e O è il peggiore ?. . .. e dovremmo sostituire i termini come caso migliore e caso peggiore, rispettivamente?
Adeel Ansari

Il caso migliore è O (1) per qualsiasi problema?
Zach Langley

1
@Adeel, no, Theta e O possono entrambi riferirsi al caso medio o al caso peggiore. @ Zach, beh, non esattamente. Grazie per la segnalazione.
PolyThinker

0

Se fossi pigro, potrei dire che la ricerca binaria su un array ordinato è O (n2), O (n3) e O (2n), e sarei tecnicamente corretto in ogni caso.

Possiamo usare la notazione o ("little-oh") per denotare un limite superiore che non è asintoticamente stretto. Sia grande-oh che piccolo-oh sono simili. Ma, big-oh è probabilmente usato per definire il limite superiore asintoticamente stretto.


0

Precisamente il limite inferiore o $ \ omega $ bfon f (n) indica l'insieme di funzioni che sono asintoticamente minori o uguali a f (n) ie U g (n) ≤ cf (n) $ \ per tutti $ `un≥ n 'Per alcuni c, n' $ \ in $ $ \ Bbb {N} $

E il limite superiore o $ \ mathit {O} $ su f (n) indica l'insieme di funzioni che sono assintoticamente maggiori o uguali a f (n) che matematicamente dice,

$ g (n) \ ge cf (n) \ per tutti n \ ge n '$, per alcuni c, n' $ \ in $ $ \ Bbb {N} $.

Ora $ \ Theta $ è l'intersezione dei due scritti sopra

$\theta $

Come se un algoritmo fosse come "esattamente $ \ Omega \ left (f (n) \ right $", allora è meglio dire che è $ \ Theta \ left (f (n) \ right) $.

Oppure, possiamo anche dire che ci dà la velocità effettiva dove $ \omega $ci dà il limite più basso.


-2

La differenza fondamentale tra

Blockquote

asintoticamente limite superiore e asintoticamente stretto Asym. supersbound indica un dato algoritmo che può essere eseguito con la massima quantità di tempo a seconda del numero di input, ad esempio nell'algoritmo di ordinamento se tutti gli elementi dell'array (n) sono in ordine decrescente, quindi per ascenderli esso richiederà un tempo di esecuzione di O (n) che mostra la complessità del limite superiore, ma se sono già ordinati ci vorrà ohm (1). Quindi generalmente abbiamo usato la notazione "O" per la complessità del limite superiore.

Asym. il limite stretto mostra che per eg (c1g (n) <= f (n) <= c2g (n)) mostra il limite stretto in modo tale che la funzione abbia il valore tra due limiti (limite superiore e limite inferiore), dando il caso medio.


2
Non dovresti rispondere a vecchie domande se la tua risposta non aggiunge nulla alle risposte già accettate.
alestanis
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.