Come discutere i coefficienti nella notazione big-O


10

Quale notazione viene usata per discutere i coefficienti delle funzioni nella notazione big-O?

Ho due funzioni:

  • f(X)=7X2+4X+2
  • g(X)=3X2+5X+4

Ovviamente, entrambe le funzioni sono , in effetti , ma ciò non consente un confronto oltre a quello. Come posso discutere i coefficienti 7 e 3. Ridurre il coefficiente a 3 non cambia la complessità asintotica ma fa comunque una differenza significativa nell'uso di runtime / memoria.Θ ( x 2 )O(X2)Θ(X2)

È sbagliato dire che è e è ? Esiste un'altra notazione che tiene conto dei coefficienti? O quale sarebbe il modo migliore per discuterne?O ( 7 x 2 ) g O ( 3 x 2 )fO(7X2)gO(3x2)


Non è sbagliato, è semplicemente ridondante, perché . O(7x2)=O(x2)

Risposte:


9

Big- e Big- Θ notazioni nascondere coefficienti del termine principale, quindi se si hanno due funzioni che sono sia Θ ( n 2 ) non è possibile confrontare i loro valori assoluti senza guardare le funzioni stesse. Di per sé non è sbagliato dire che 7 x 2 + 4 x + 2 = Θ ( 7 x 2 ) , ma non è informativo perché 7 x 2 + 4 x + 2 = Θ ( 3 x 2 )OΘΘ(n2)7x2+4x+2=Θ(7x2)7x2+4x+2=Θ(3x2)è anche vero (e, in effetti, è per qualsiasi costante positiva k ).Θ(kx2)k

Ci sono altre notazioni che potresti voler usare invece. Ad esempio, notazione è un'affermazione molto più forte di big- Θ :Θ

f(X)~g(X)limXf(X)g(X)=1

Ad esempio, , ma l'affermazione 7 x 2 + 4 x + 2 3 x 2 sarebbe falsa. Puoi pensare alla notazione tilde come Θ notazione che preserva i coefficienti principali, che sembra essere quello che stai cercando se ti preoccupi del coefficiente principale del termine di crescita dominante.7X2+4X+2~7X27X2+4X+2~3X2Θ


La notazione Tilde è ciò che sto cercando. Ero sicuro che ci fosse qualcosa che non riuscivo a ricordare come si chiamava e le ricerche si rivelarono inutili. Grazie!

6

La tilde è un approccio. Se vuoi restare con , potresti direO

ef(X)=7X2+O(X)

.g(X)=3X2+O(X)


Ancora meglio: dire f (x) = 7x ^ 2 + o (x ^ 2), usando la notazione little-o per chiarire che ciò che rimane è asintoticamente più piccolo di x ^ 2.
templatetypedef

2
O (x) è strettamente più piccolo di o (x ^ 2), quindi usarlo sarebbe meno chiaro che usare big-O. D'altra parte, usare little-o è sicuramente più comune quando vuoi dire che hai il primo termine giusto, perché non devi preoccuparti del termine successivo. (E se vogliamo essere completamente chiari, allora dovremmo spiegare perché non limitiamo a scrivere 7x ^ 2 + 4x + 2 in primo luogo, poiché è esattamente corretto.

Hai assolutamente ragione ... le mie scuse!
templatetypedef

f(X)=7X2+g(X)g(X)O(X)f(X)=7X2+4X+O(1)~
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.