Perché no


8

In CLRS (alle pagine 49-50), qual è il significato della seguente dichiarazione:

Σi=1nO(i) è solo una singola funzione anonima (di i), ma non è lo stesso di O(1)+O(2)++O(n), che in realtà non ha un'interpretazione ".


Ho cercato di formulare la tua domanda in modo più preciso; nota anche che qui abbiamo il supporto al lattice in modo da poter scrivere matematica ben formattata. Ti incoraggio ad essere più specifico: cosa è esattamente confuso? Quale parte sta causando problemi? (Forse puoi quindi modificare di conseguenza anche il titolo della domanda).
Juho,


1
Probabilmente, la somma espansa non ha nemmeno un'interpretazione; dovresti scrivereO()inizia con.
Raffaello

1
Qualcuno può spiegare il significato previsto di i=1nO(i)? Somma din funzioni di ordine "i"? Questo ha poco senso, come O(i)=O(1). Somma din funzioni indicizzate da ie di qualche ordine ??
Yves Daoust,

Risposte:


12

Da 1+2++n=O(n2), è allettante suggerirlo O(1)+O(2)++O(n)=O(n2)... ma questo non è in realtà valido. Il motivo è che potrebbe esserci una costante diversa per ogni termine della somma.

Un esempio

Lasciami fare un esempio. Considera le sommeS(1)=12, S(2)=12+22, S(3)=12+22+32, S(4)=12+22+32+42, e così via. Nota che12O(1), 22O(2), 32O(3), 42O(4)e così via per ogni termine della somma. Pertanto, sarebbe ragionevole scrivereS(j)=12++j2 Nella forma S(j)=O(1)++O(j). Quindi possiamo concludere questoS(j)=O(j2)? No. Infatti,S(n)=n(n+1)(2n+1)/6, così S(n)=Θ(n3).

Se ciò non aiuta, proviamo il seguente sviluppo matematico più preciso:

Una formalizzazione

Ricordiamo che l'interpretazione, diciamo, O(n2) è che è un insieme di funzioni non negative f(n) (vale a dire, l'insieme di funzioni f(n) tale che esistono costanti c0,d0 tale che f(n)cn2 per tutti nd).

Il più vicino possiamo arrivare a un'interpretazione di O(1)+O(2)++O(n) è che è l'insieme di funzioni del modulo f1(n)+f2(n)++fn(n) tale che f1(n)O(1), f2(n)O(2), ..., fn(n)O(n).

Ma ora le costanti per ciascuno fipuò essere diverso. Quindi, ciascunofi è una funzione non negativa fi tale che esistono costanti ci0,di0 con fi(n)cii per tutti ndi.

Ora, dato questo, cosa possiamo dire g(n)=f1(n)+f2(n)++fn(n)? Non molto utile Sappiamo che esiste una costanted=max(d1,d2,,dn)tale che per tutti . Cosa possiamo dire di questa somma? Bene, la risposta è che non possiamo dire nulla. Potrebbe essere arbitrariamente grande. È allettante lasciare che e dire che ... ma in realtà non è corretto, poiché abbiamo bisogno di un singolo valore costante di che funzioni per tutti , e il valore è una funzione di , non una costante.g(n)c11+c22++cnnndc=max(c1,c2,,cn)g(n)c(1+2++n)cn2=O(n2)cnmax(c1,c2,,cn)n

Quindi potrebbe non esserci alcuna costante tale che ; potrebbe non esserci alcuna costante tale che . Non esiste alcuna garanzia che .cg(n)c(1+2++n)cg(n)cn2g(n)O(n2)

Per più lettura

Consulta https://math.stackexchange.com/q/86076/14578 e le Somma dei termini Landau rivisitati per altre domande che trattano questo problema generale.


2
TLDR: vuoi che siano tutti uguali ma non lo sono, formalmente. fO(_)
Raffaello

1

Il motivo per cui il commento di CLRS è confuso è che, tecnicamente, è definito come . Quello che sta realmente accadendo è che CLRS sta abusando della notazione per motivi di semplicità:i=1nO(i)O(1)+O(2)+O(n)

  • O(1) rappresenta un insieme di funzioni. Include, ad esempio, , e .f(n)=1f(n)=1/nf(n)=n1/n
  • Quando scrivi stai tecnicamente aggiungendo due set e con un'operazione di sommario . Quando questo viene fatto con più di un numero costante di termini, può portare a comportamenti imprevisti, come spiega chiaramente DW in un'altra risposta.O(1)+O(2)O(1)O(2)

Invece, CLRS vorrebbe quindi che tu interpretassi come dove la funzione generica . Ad esempio, scriverebbero che è o .i=1nO(i)i=1nf(i)f(i)O(i)i=1n3i5i=1nO(i)O(n2)


Questa spiegazione non è del tutto corretta. Non c'è niente di sbagliato nell'aggiunta di . È ben definito. è un insieme di funzioni, è un insieme di funzioni e quando sono insiemi di funzioni, viene normalmente considerato l'insieme di funzioni . Questo è ciò che è comunemente inteso quando aggiungiamo due notazioni big-Oh, e tutto funziona bene fintanto che aggiungi solo due (o un numero costante di) simboli big-Oh. Il punto in cui ti trovi nei guai è quando il numero di dipendenti non è una costante, come spiegato nella mia risposta. O(1)+O(2)O(1)O(2)S,TS+T{f(n)+g(n):f(n)S,g(n)T}
DW

Concordo sul fatto che questa è la definizione comune di aggiunta di set e che è ben definita, anche se non penso che sia ciò che si intende di uso comune. Come dici correttamente nella tua risposta sopra, l'uso di un'aggiunta impostata su più di un numero costante di termini porta a problemi.
Ari Trachtenberg,

Preferisco definire O (f (n)) come un elemento anonimo di un determinato insieme di funzioni, piuttosto che l'insieme stesso. Quindi significa " per alcune funzioni tali che ...", mentre significa " per alcune funzioni tali che ... ". Totalmente non è la stessa cosa. iO(i)if(i)fO(1)+O(2)++O(n)f1(1)+f2(2)++fn(n)f1,f2,,fn
JeffE,
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.