Je sais que ce n'est pas strictement une question de programmation, mais il est em> une question de science informatique, donc j'espère que quelqu'un peut m'aider. P>
Je travaille sur mes algorithmes devoirs et déterminer le Big-Oh, Big-Omega, Theta, etc., de plusieurs algorithmes. Je les prouve en trouvant leurs valeurs C et N 0 SUB> et tout va bien. P>
Cependant, j'ai rencontré mes deux derniers problèmes dans l'ensemble et je me débatte de savoir comment les faire (et Google n'aide pas beaucoup). P>
Je n'ai pas eu à comprendre le Big-OH / OMEGA des sommations avant. P>
Mes deux derniers problèmes sont: P>
et p>
Ma question est, comment puis-je montrer ça? p>
Par exemple, dans la première, intuitivement, je ne peux pas voir comment cette sommation de I 2 sup> est O (n 3 sup>). Le second me confond encore plus. Quelqu'un peut-il expliquer comment montrer le Big-Oh et la Big-Omega de ces sommations? p>
5 Réponses :
http://fr.wikipedia.org/wiki/big_o_notation P>
n répétitions de g (m) = O (f (m)) est somme de i = 1..n de i * g (i) est Définition: g (n) = O (f (n)) si certains c, m existent pour tous N> M, La somme est pour i = 1..n de Si f est monotonique dans i, cela signifie que chaque terme est <= i f (n) <= n em> f (n). Donc la somme est inférieure à Bien sûr, log_2 (x) et x ^ 2 sont à la fois monotonique. P> O (n * f (m)) code> pour n'importe quel f (n). p>
o (n * f (n)) code> si g (n) = O (f (n)) et f est monotonique. p>
g (n) <= c * f (n) code> code> < / p>
i * f (i) code>. p>
n * c * f (n) code> de sorte que la somme est
o (n * f (n)) code> (témoigné par le même c, m que cela rend g (n) = o (f (n))) p>
Ce que j'ai écrit s'applique à la question, si vous prenez le fait que g (x) = x ^ 2 est en effet O (x ^ 2) et g (log_2 (x) est en effet O (log x).
mon devinez em> est que le point de question signifie que si vous résumez les résultats de certains calculs pour lesquels la durée de fonctionnement est proportionnelle à I 2 sup> dans la première cas, et proportionnelle au journal 2 sub> i dans le second cas. Dans les deux cas, la période de fonctionnement de la somme globale est "dominée" par les valeurs plus volumineuses de n dans la sommation, et donc l'évaluation globale de la BIG-O des deux sera N * O (F) où f est la fonction que vous " ressomme. p>
O (f) n'est qu'une notation pour les fonctions; Vous n'êtes pas obligé d'apporter des moments de course. :-)
O (f) est une notation pour comment les temps de fonctionnement des fonctions échelle i> - Je ne suis pas sûr de ce que vous entendez sur "apporter des temps de course", dès que vous parlez de la notation O Vous parlez déjà de temps de course en quelque sorte.
Non, o (f) est une notation pour la croissance d'une fonction. E.g., la fonction F (n) = N ^ 2 + 3 * N + 5 est O (n ^ 2). Cela n'a rien à voir avec les temps de course: dire que "F est O (n ^ 2)" est juste une déclaration sur le comportement asymptotique de F (n) comme n-> ∞, il n'y a aucune mention de calcul ou d'algorithmes ou de leur temps d'exécution.
D'accord, je suis corrigé à cet égard. En fait, je ne suis pas vraiment sûr de savoir pourquoi j'ai écrit ce que j'ai fait dans ce commentaire - je blâme les samedis paresseux. ;)
Probablement, votre CPU multipliera des entiers 32 bits en temps constant. Mais Big-Oh ne se soucie pas de "moins de quatre milliards", alors vous devez peut-être examiner des algorithmes de multiplication? P>
Selon Wolfram , l'algorithme de multiplication "traditionnel" est O (n 2 sup>). Bien que n em> dans ce cas est le nombre de chiffres, et donc vraiment log (n) em> dans le nombre réel. Je devrais donc être capable de faire carré les entiers 1..n dans le temps O (n.log (n)). Sommation est O (log (n 2 sup>)), qui est évidemment O (journal (n)), pour une complexité globale de O (n.log (n)). P>
Je peux donc bien comprendre votre confusion. P>
Vous pensez à la multiplication réelle, qui est trop littérale. Je pense que la question dans le manuel implique est que je ^ 2 est en réalité la complexité d'une certaine opération. Si tel est le cas, alors O (N ^ 3) a du sens.
La réponse est bien mais elle répond à la mauvaise question. Astuce: Ce n'est pas une question sur le temps de course.
La question ne dit rien (ni ne demande) de temps de course. C'est juste une déclaration sur les fonctions: dans l'ancien cas, la somme (i = 1 à n) (i ^ 2) est la fonction n (n + 1) / 2, qui est O (n ^ 2). De même dans la seconde, la somme est LG (n!), Qui est O (n LG N).
La somme (i = 1 à n) (i) est la fonction n (n + 1) / 2, la somme (i = 1 à n) (i ^ 2) a une forme fermée plus compliquée, mais Wolfram Alpha fait tout plus simple;). Je veux dire que je pourrais résoudre la fonction génératrice, mais je digresse la somme (i = 1 à n) (i ^ 2) est la fonction 1/6 * (2 * N ^ 3 + 3 * n ^ 2 + n)
L'approche la plus simple qui me saute est une preuve par induction.
Pour le premier, il faut essentiellement montrer que p> si nous utilisons le principe généralisé d'induction et prendre un cas de base de n = 1 et k = 2. p> Nous obtenons Bien sûr Prenez l'hypothèse inductive, alors nous savons que P> Afficher maintenant Par conséquent, notre résultat initial est correct. P> pour la deuxième preuve dont vous avez besoin pour montrer que
L'étape principale est 1 <2 * 1 code>. p>
somme (i = 1 à n) i ^ 2
somme (i = 1 à n) i ^ 2 + (n + 1) ^ 2
k * n ^ 3 + (n + 1) ^ 2
k * n ^ 3 + n ^ 2 + 2n + 1
k * n ^ 3
somme (i = 1 à n) log_2 (i)> = k * n * journal (n) code>, que je laisserai comme un exercice pour le lecteur;). P>
somme (i = 1 à n) log_2 (i) + log_2 (n + 1)> = k * n * journal (n) + k * journal (n +1) code>, pour certains K, donc clairement k est 1. p> p>
σ (i = 1 à n) i 2 sup> = n (n + 1) (2n + 1) / 6, qui est O (n 3 sup >). P> li>
Notez que (n!) 2 sup> = (1 N) (2 (n-1)) (3 (n-2)) ... (N-1) 2) (n 1)
= Π (i = 1 à n) i (n + 1-i)
> = π (i = 1 à n) n
[Par exemple, parce que pour chaque I = 1 à N, (I-1) (NI)> = 0. Comparez avec Graham / Knuth / PataShnik , Section 4.4]
= n n sup>.
Ainsi, n! > = n n / 2 sup>, et donc
Σ (i = 1 à n) journal i = journal π (i = 1 à n) i = journal n! > = journal n n / 2 sup> = =
(n / 2) journal n, qui est Ω (n journal n). p> li>
ul>
Juste pour clarifier - sont-ce une somme de I², ou une somme de quelque chose qui est O (n²)?
@Charlie Sels, tout ce que je dis, serait une supposition. C'est la 2 questions, dans leur intégralité.
Je pense que le premier est vrai si vous appliquez l'algorithme standard i> multiplication - pas utiliser le matériel
mul code> qui est une opération constante.
Prenez-vous CS170 à Berkeley?
Voir Stackoverflow.com/q/9252891/632951