Big O La Notation Des Devoirs--Fragment De Code De L'Algorithme D'Analyse?
Pour les devoirs, j'ai été donné le 8 fragments de code d'analyser et de donner un Grand-Oh notation pour le temps d'exécution. Quelqu'un peut-il me dire si je suis sur la bonne voie?
//Fragment 1
for(int i = 0; i < n; i++)
sum++;
Je pense à O(N) pour le fragment 1
//Fragment 2
for(int i = 0; i < n; i+=2)
sum++;
O(N) pour le fragment 2 ainsi
//Fragment 3
for(int i = 0; i < n; i++)
for( int j = 0; j < n; j++)
sum++;
O(N^2) pour le fragment 3
//Fragment 4
for(int i = 0; i < n; i+=2)
sum++;
for(int j = 0; j < n; j++)
sum++;
O(N) pour le fragment 4
//Fragment 5
for(int i = 0; i < n; i++)
for( int j = 0; j < n * n; j++)
sum++;
O(N^2) pour le fragment 5, mais le n * n est en me jetant un peu donc je ne suis pas tout à fait sûr
//Fragment 6
for(int i = 0; i < n; i++)
for( int j = 0; j < i; j++)
sum++;
O(N^2) pour le fragment 6 ainsi
//Fragment 7
for(int i = 0; i < n; i++)
for( int j = 0; j < n * n; j++)
for(int k = 0; k < j; k++)
sum++;
O(N^3) pour le fragment 7, mais une fois de plus le n * n est me jetant hors
//Fragment 8
for(int i = 1; i < n; i = i * 2)
sum++;
O(N) pour le fragment 8
- Je suis en désaccord avec la "localisée" commentaire. Le calcul de Grand-Oh est un élément central de l'analyse d'algorithme. Spécifiques des exemples de code avec les estimations de la Grande-Oh peut être extrêmement précieux pour les gens qui essaient de devenir à l'aise dans ce domaine.
Vous devez vous connecter pour publier un commentaire.
Je pense fragment 5 est O(n^3), et, de même, fragment 7 est O(n^5)*. Il ressemble également à O(log(n)) pour le fragment 8.
Pour le n * n des problèmes, vous devez exécuter le corps de la boucle n * n fois, de sorte qu'il serait O(n^2), alors vous avez composé avec l'ordre de l'autre code. Fragment 8 en fait double le comptoir au lieu de l'incrémentation, de sorte que le plus le problème, le moins de travail supplémentaire que vous avez à faire, c'est donc O(log(n))
*edit: Fragment 7 est O(n^5), pas de O(n^4) comme je l'ai déjà pensé. C'est parce que les deux j et k aller de 1 à n * n. Désolé, je n'ai pas compris cela plus tôt.
Fragment 7 est O(n^5), pas de O(n^4) comme actuellement accepté commentaire revendications. Sinon, c'est correct.
Pour le cas 8 essayez d'écrire le nombre d'itérations pour certaines valeurs de N et de voir ce que le motif ressemble ... ce n'est pas O(N)
Vous semblent être sur la bonne voie. En ce qui concerne le N*N quel effet pensez-vous que cela aurait? Il est un autre facteur de N de sorte qu'il serait susceptible d'être d'un ordre supérieur.
Juste un avertissement, j'ai vu un autre post de ce genre et c'était extrêmement bas ont voté. Être prudent. Ici est le post.
Vous êtes sur la bonne voie, mais voici une astuce de comment les choses pourraient être plus claire le long du chemin. Supposons que vous avez un peu de code :
Droit, tenir compte du fait que vous disposez d'un code à différents niveaux. Dans cet exemple, vous ne pouvez voir les 3 niveaux de la mesure :
...
À aucun moment vous ne devez essayer de calculer tout-en-1 go. C'est là que la plupart des débutants, en quelque sorte, de l'erreur de calcul. Calculer individuellement pour chaque niveau, puis de le multiplier tous ensemble.
Bonne chance!