J'ai un algorithme de comptage pour lequel j'essaie d'obtenir une description générale de big-o. Il est horriblement niché et horriblement exponentiel. Ici, il est:Simplification de la complexité Big-O de cet algorithme exponentiel
1. For each T_i in T
2. For k = 1 to max_k
3. For each of 2^k*(n choose k) items
4. For each t in T_i
5. check if the item is in t...etc.
Voici une ligne par ligne idée de chaque durée
- Ceci est une partition simple et je vais juste donner une c1 constante. Max_k est un petit nombre, toujours inférieur à n, peut-être autour de 4 ou 5. Je vais utiliser k ci-dessous. En considérant la ligne 1 constante, on peut généraliser cette ligne et savoir qu'elle ne se déclenchera jamais plus de 2^n fois au total dans le pire des cas, mais généralement une fraction de 2^n fois, donc nous appellerons celui-ci (2^n)/c2
- Ceci est l'opération simple if-instruction à l'intérieur de toutes ces boucles, donc c3.
Multipliant tous ces ensemble donne:
c1 * k * 2^k * (n choose k) * (2^n)/c2 * c3
Depuis que je veux une représentation grand-O, en ignorant les constantes donne:
k * 2^k * (n choose k) * (2^n)
On sait que (choisir n k) est limitée ci-dessus par (n * e/k)^k, donc:
O(k * 2^k * (n * e/k)^k * (2^n))
Mes questions on est, que puis-je ignorer ici ... 2^n est certainement le terme dominant puisque n est toujours plus grand que k, et typiquement beaucoup plus. Est-ce que cela peut être simplifié en O (2^n)? Ou O (2^terrible)? Ou devrais-je laisser dans le 2^k, comme dans O (2^k * 2^n)? (ou laisser tous les termes dans?)
Ma compréhension est que si k ou max_k peut rivaliser ou dépasser n, alors ils sont vitaux. Mais puisqu'ils sont toujours dominés, peuvent-ils être rejetés comme des termes inférieurs d'ordre polynomial? Je suppose que tout le désordre du temps de fonctionnement exponentiel me confond. Tout conseil est grandement appréciée.
+1 Réponse forte ... – MoonKnight
S'il est vrai que n est toujours supérieur à k, est-ce suffisant pour délimiter k et donc le supprimer? Je pense que c'est ce que vous dites mais je veux être sûr. Votre exemple n * lg (k) est assez clair - merci pour cela. –
@Chucktown: 'Si il est vrai que n est toujours supérieur à k, est-ce suffisant pour délimiter k et donc le supprimer?' Non. Quand on dit 'k is bounded' on veut dire qu'il y a un * c' CONSTANT * tel que 'k
amit