Que signifie ?

15

Que signifie ?logO(1)n

Je connais la notation big-O, mais cette notation n'a aucun sens pour moi. Je ne trouve rien non plus à ce sujet, car il n'y a aucun moyen qu'un moteur de recherche interprète cela correctement.

Pour un peu de contexte, la phrase où je l'ai trouvée se lit "[...] nous appelons une fonction [efficace] si elle utilise l' espace et tout au plus le temps par objet."O(logn)logO(1)n

Oebele
la source
1
Je suis d'accord qu'il ne faut pas écrire des choses comme ça, à moins d'être très clair sur ce que cela signifie (et de dire au lecteur ce que c'est) et d'utiliser les mêmes règles de manière cohérente.
Raphael
1
Oui, on devrait plutôt l'écrire comme. (log(n))O(1)
1
@RickyDemer Ce n'est pas le point que Raphaël fait valoir. signifie exactement . logblahn(logn)blah
David Richerby
4
@Raphael Il s'agit d'une notation standard dans le domaine. Quiconque le sait saurait ce que cela signifie.
Yuval Filmus
1
@YuvalFilmus Je pense que la variété des réponses en désaccord est une preuve concluante que votre affirmation est fausse et qu'il faut en effet s'abstenir d'utiliser une telle notation.
Raphael

Réponses:

16

Vous devez ignorer un instant le fort sentiment que le " " est au mauvais endroit et continuer à travailler avec la définition malgré tout. f ( n ) = log O ( 1 ) n signifie qu'il existe des constantes k et n 0 telles que, pour tout n n 0 , f ( n ) log k 1 n = log k n .Of(n)=logO(1)nkn0nn0f(n)logk1n=logkn

Notez que signifie ( log n ) k . Les fonctions de la forme log O ( 1 ) n sont souvent appelées polylogarithmiques et vous pourriez entendre les gens dire: « f est polylog  n ».logkn(logn)klogO(1)nfn

Vous remarquerez qu'il est facile de prouver que , puisque 2 n k n pour tout n 0 , où k = 2 . Vous vous demandez peut-être si 2 log n = log O ( 1 ) n . La réponse est oui puisque, pour assez grand n , log n 2 , donc 2 log n log 2 n pour assez grand 2n=O(n)2nknn0k=22logn=logO(1)nnlogn22lognlog2n .n

Sur une note connexe, vous verrez souvent des polynômes écrits comme : même idée.nO(1)

David Richerby
la source
Cela n'est pas pris en charge par la convention relative aux espaces réservés.
Raphael
Je retire mon commentaire: vous écrivez dans tous les endroits importants, ce qui est suffisant.
Raphael
@Raphael OK. Je n'avais pas encore eu le temps de le vérifier mais j'avais l'impression que vous commandiez des quantificateurs différemment de moi. Je ne suis pas sûr que nous définissions la même classe de fonctions.
David Richerby
Je pense que vous définissez mon (2), et Tom définit . cR>0{logcn}
Raphael
9

Il s'agit d'un abus de notation qui peut être interprété par la convention de l'espace réservé généralement acceptée : chaque fois que vous trouvez un terme Landau , remplacez-le (dans votre esprit ou sur le papier) par une fonction arbitraire g O ( f ) .O(f)gO(f)

Donc si vous trouvez

f(n)=logO(1)n

tu dois lire

pour certains g O ( 1 ) .f(n)=logg(n)ngO(1).(1)

Notez la différence de dire " à la puissance d'une constante": g = n 1 / n est une possibilité distincte.logg=n1/n

Avertissement: L'auteur utilise peut-être encore plus d' abus de notation et souhaite que vous lisiez

pour certains g O ( 1 ) .f(n)O(logg(n)n)gO(1).(2)

Notez la différence entre (1) et (2); bien que cela fonctionne pour définir le même ensemble de fonctions à valeur positive ici, cela ne fonctionne pas toujours. Ne déplacez pas dans les expressions sans précaution!O

Raphael
la source
3
Je pense que ce qui le fait cocher, c'est que est monotone et suffisamment surjectif pour chaque n fixe . Monotone rend la position de l' équivalent O et vous donne (2) ⇒ (1); dans l'autre sens, il faut que g existe, ce qui pourrait échouer si f ( n ) est en dehors de la plage de la fonction. Si vous voulez souligner que déplacer O est dangereux et ne couvre pas les fonctions «sauvages», très bien, mais dans ce cas spécifique, c'est correct pour le type de fonctions qui représentent les coûts. xlogx(n)nOgf(n)O
Gilles 'SO- arrête d'être méchant'
@Gilles J'ai affaibli la déclaration à un avertissement général.
Raphael
1
Cette réponse a été fortement modifiée, et maintenant je suis confus: prétendez-vous maintenant que (1) et (2) sont effectivement les mêmes?
Oebele
@Oebele Pour autant que je sache, ils ne sont pas en général, mais ici.
Raphael
Mais, quelque chose comme ne correspond pas (1) mais correspond (2) à droite? ou suis-je juste stupide maintenant? 3log2n
Oebele
6

Cela signifie que la fonction croît au maximum sous forme de à la puissance d'une constante, c'est-à-dire log 2 ( n ) ou log 5 ( n ) ou log 99999 ( n ) ...loglog2(n)log5(n)log99999(n)

Tom van der Zanden
la source
Cela peut être utilisé lorsque la croissance de la fonction est connue pour être limitée par une certaine puissance constante du , mais la constante particulière est inconnue ou n'est pas spécifiée. log
Yves Daoust
Cela n'est pas pris en charge par la convention relative aux espaces réservés.
Raphael
2

"Au plus " signifie qu'il existe une constante c telle que ce qui est mesuré est O ( log c n ) .logO(1)ncO(logcn)

Dans un contexte plus général, est équivalent à l'affirmation selon laquelle il existe des constantes a et b (éventuellement négatives) telles que f ( n ) O ( log a n ) et f ( n ) Ω ( log b n ) .f(n)logO(1)nabf(n)O(logan)f(n)Ω(logbn)

Il est facile d'ignorer la borne inférieure de . Dans un contexte où cela importerait (ce qui serait très rare si vous êtes exclusivement intéressé par l'étude de la croissance asymptotique ), vous ne devriez pas avoir une confiance totale dans le fait que l'auteur signifie réellement la borne inférieure, et devrait se fier au contexte pour assure-toi.Ω(logbn)


La signification littérale de la notation fait de l'arithmétique sur la famille de fonctions, résultant en la famille de toutes les fonctions log g ( n ) n , où g ( n ) O ( 1 ) . Cela fonctionne à peu près de la même manière que la multiplication de O ( g ( n ) ) par h ( n ) entraîne O ( g ( n ) h (logO(1)nlogg(n)ng(n)O(1)O(g(n))h(n) , sauf que vous obtenez un résultat qui n'est pas exprimé si simplement.O(g(n)h(n))


Étant donné que les détails de la limite inférieure se trouvent probablement en territoire inconnu, il convient de regarder certains contre-exemples. Rappelons que tout est borné en magnitude ; qu'il existe une constante c telle que pour tout n suffisamment grand , | g ( n ) | < c .g(n)O(1)cn|g(n)|<c

En ce qui concerne la croissance asymptotique , seule la limite supérieure importante, car, par exemple, vous savez déjà que la fonction est positive. Cependant, en général, vous devez faire attention à la borne inférieure g ( n ) > - c .g(n)<cg(n)>c

Cela signifie que, contrairement aux utilisations plus courantes de la notation big-oh, les fonctions qui diminuent trop rapidement peuvent ne pas être dans le ; par exemple, 1logO(1)n

1n=log(logn)/(loglogn)nlogO(1)n
lognloglognO(1)
O(1)

1logO(1)n


la source
Can't I just take b=0 and make your claimed lower bound go away?
David Richerby
1
@DavidRicherby No, b=0 still says that f is bounded below. Hurkyl: why isn't f(n)=1/n in logO(1)n?
Gilles 'SO- stop being evil'
@Gilles: More content added!
@Gilles OK, sure, it's bounded below by 1. Which is no bound at all for "most" applications of Landau notation in CS.
David Richerby
1) Your "move around O" rule does not always work, and I don't think "at most" usually has that meaning; it's just redundant. 2) Never does O imply a lower bound. That's when you use Θ. 3) If and how negative functions are dealt with by a given definition of O (even without abuse of notation) is not universally clear. Most definitions (in analysis of algorithms) exclude them. You seem to assume a definition that bounds the absolute value, which is fine.
Raphael