Notazione O grande nidificata


8

Diciamo che ho un grafico |G| con |E|=O(V2)bordi. Voglio eseguire BFS susol che ha un tempo di esecuzione di O(V+E).

È naturale scrivere che il tempo di esecuzione su questo grafico sarebbe O(O(V2)+V) e quindi semplificare O(V2).

Ci sono insidie ​​nell'usare una scorciatoia "remove-the-nested-O" (non solo in questo caso, ma più in generale)?


4
Se lavori attraverso la definizione di big-O, vedrai che gli O nidificati sono sia naturali che ridondanti, e che la regola di far cadere l'O interna è corretta.
Dave Clarke,

Dato che V è in O (V ^ 2) immagino che potresti sostituire O (V ^ 2) con V se non sapessi cosa stavi facendo?
The Unfun Cat,

3
Se non sai cosa stai facendo, puoi fare cose arbitrariamente sbagliate.
Dave Clarke,

4
Infatti. = non è = in terra big-O.
Dave Clarke,

3
Vedi anche questa eccellente domanda su math.SE about = nella notazione Landau.
Raffaello

Risposte:


14

Vorrei iniziare con una raccomandazione: tratta la notazione di Landau proprio come (dovresti) trattare l'arrotondamento: arrotondare raramente, arrotondare in ritardo. Se conosci qualcosa di più preciso diO(.), usalo fino a quando non hai finito con tutti i calcoli e alla fine Landauify.


Per quanto riguarda la domanda, analizziamo questo abuso della notazione¹. Come interpreteremmo qualcosa del generehO(f+O(g))? Dovremmo sostituireOcon la sua definizione da dentro e fuori. Quindi otteniamo

gO(g).hO(f+g)

e poi

gO(g).d>0.n.h(n)d(f(n)+g(n))

che equivale a

c>0.d>0.n.h(n)d(f(n)+cg(n)).

Come certamente² d(f(n)+cg(n))cd(f(n)+g(n)), vediamo che questo equivale a hO(f+g); la perdita di precisione viene ignorata daO Comunque.


Che dire di altre combinazioni, diciamo hO(f+Ω(g))? Se proviamo lo stesso qui, otteniamo

gΩ(g).hO(f+g).

Ma questa è una tautologia: hè certamente delimitato da qualcosa di arbitrariamente grande. Quindi, combinare i limiti superiore e inferiore in questo modo non è significativo.


  1. O(.)e gli altri simboli Landau associano le funzioni alle classi di funzioni. Inserirla in una classe di funzioni non è immediatamente significativa.
  2. Almeno se consideriamo solo funzioni positive, che possiamo tranquillamente assumere quando parliamo di runtime. Non sono sicuro che funzioni in generale.

2

Volevo solo aggiungere questo perché l'ho incontrato di recente. Mentre questo collegamento va bene con l'aggiunta e la moltiplicazione (quando non si mescolanoO con Ω; vedere la risposta accettata), prestare attenzione quando si usano esponenti. Per esempio:

O(nO(m))O(nm).
In questo esempio, n2m appartiene alla prima classe ma non alla seconda.

1

Per definizione, O(g) è un set e se si utilizza questa notazione nidificata, si avrebbe un set in un set, il che sarebbe sbagliato.

La definizione della notazione O.

O(g)={f|c>0X0>0X>X0:|f(X)|c*|g(X)|}

L'errore

Hai usato termini come O(O(n)+K) dove k e n sono funzioni e O(n)è un set. Ma qual è il risultato di una funzione aggiunta a un set? Non è definito!

Versione corretta

Invece di utilizzare i simboli Landau nidificati, puoi fare quanto segue: O(m+K),mO(n)


2
Sì, ma la notazione Landau viene spesso abusata per motivi di (presunta) facilità d'uso, quindi è meglio assicurarsi che tutti comprendano la stessa cosa. Vedi qui per un approccio strutturato.
Raffaello

0

Nella sezione 9.3 "OManipolazione "del libro Concrete Mathematics (Seconda Edizione), Knuth ha elencato alcune regole di manipolazione sulO-notazione (Di seguito, suppongo che entrambi f(n) e g(n)sono positivi; notare che l'ordinamento delle regole è stato modificato).

(1).nm=O(nm'),mm'(3).f(n)=O(f(n))(5).O(O(f(n)))=O(f(n))(4).cO(f(n))=O(f(n))(2).O(f(n))+O(g(n))=O(f(n)+g(n))(6).O(f(n))O(g(n))=O(f(n)g(n))=f(n)O(g(n))

Con (3), puoi avvolgere / scartare una funzione f(n)con una notazione O. Quindi con (5), puoi effettivamente avvolgere / scartare (o chiamato, annidare ) volte arbitrariamente finite. Usando (4), puoi anche aggiungere / rimuovere i fattori di moltiplicazione costanti da / aO.

Quindi, (2) e (6) consentono di manipolare nidificati O-notazioni nel modo compatibile con + e ×.

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.