Non, votre code a le temps de la complexité de l' O(2^|<DeltaTime>|)
,
Pour un bon codage de l'heure actuelle.
S'il vous plaît, laissez-moi d'abord de m'excuser pour mon anglais.
Qu'est-ce que et comment Big O travaille dans CS
Big O la notation n'est pas utilisé pour attacher la saisie d'un programme avec son temps d'exécution.
Big O la notation est, laissant la rigueur derrière, une façon d'exprimer la asymptotique rapport de deux quantités.
Dans le cas de l'algorithme d'analyse de ces deux grandeurs sont pas l'entrée (pour lequel il faut d'abord avoir une "mesure" de la fonction) et le temps d'exécution.
Ils sont de la longueur du codage d'une instance du problème1 et une mesure de l'intérêt.
Les plus couramment utilisés sont les paramètres
- Le nombre d'étapes nécessaires pour compléter l'algorithme dans un modèle de calcul.
- L'espace requis, si un tel concept existe, par le modèle de calcul.
Est implicitement supposé un TM comme le modèle ainsi que le premier point se traduit par le nombre de demandes de la transition2 fonction, c'est à dire "étapes", et le second se traduit par le nombre de bande différente des cellules écrit au moins une fois.
Est-il aussi souvent implicitement supposé que nous pouvons utiliser une polynomialement liées à l'encodage à la place de celui d'origine, par exemple une fonction qui recherche un tableau du début à la fin a O(n)
de la complexité, malgré le fait que le codage d'une instance d'un tel tableau doit avoir une longueur d' n*b+(n-1)
où b
(constante) nombre de symboles de chaque élément. C'est parce qu' b
est considéré comme une constante du modèle de calcul et donc l'expression ci-dessus et n
sont asymptotiquement le même.
Cela explique aussi pourquoi un algorithme semblable à la Division de première instance est une exponentielle algorithme malgré le fait d'être essentiellement un for(i=2; i<=sqr(N); i++)
algorithme de type3.
Voir cette.
Cela signifie également que big O la notation peut utiliser autant de paramètres, on peut à décrire le problème, n'est-il pas rare d'avoir un k paramètre pour certains algorithmes.
Donc, ce n'est pas à propos de la "entrée" ou que "il n'y a pas d'entrée".
Étude de cas maintenant
Big O la notation n'est pas question de votre algorithme, c'est juste suppose que vous savez ce que vous faites. C'est essentiellement un outil applicable partout, même à un algorithme, qui peut être délibérément difficile (comme le vôtre).
Pour résoudre votre problème, vous avez utilisé la date du jour et une date future, de sorte qu'ils doivent être une partie du problème en quelque sorte; il suffit de mettre: ils font partie de l'instance du problème.
Plus précisément l'instance est:
<DeltaTime>
Où l' <>
signifie tout, non pathologique, de codage de choix.
Voir ci-dessous pour les très importantes précisions.
Si votre grand O de la complexité en temps est juste O(2^|<DeltaTime>|)
, parce que vous faites un certain nombre d'itération qui dépend de la valeur de temps en cours.
Il est inutile de mettre les autres constantes numériques comme la notation asymptotique est utile, car elle élimine les constantes (ainsi, par exemple, l'utilisation d' O(10^|<DeltaTime>|*any_time_unit)
est inutile).
Où la partie la plus délicate est
Nous avons fait une hypothèse importante ci-dessus: le fait que le modèle de calcul reificates5 fois, et par le temps, je veux dire la (vraie?) le temps physique.
Il n'y a pas un tel concept dans la norme, modèle de calcul, un TM ne sais pas le temps, nous le lien du temps avec le nombre d'étapes car c'est notre réalité de travail4.
Dans votre modèle, cependant le temps est de la partie de calcul, vous pouvez utiliser la terminologie de la fonctionnelle de gens en disant que le Principal n'est pas pure, mais le concept est le même.
Pour comprendre cela, il convient de noter que rien n'empêche le Cadre à l'aide d'un faux temps qui courent deux fois, cinq, dix fois plus rapide que le temps physique. De cette façon, votre code sera exécuté dans un "demi", "un cinquième", "un dixième" de "temps".
Cette réflexion est importante pour le choix de l'encodage d' <DeltaTime>
, ce qui est essentiellement un condensé de l'écriture <(CurrentTime, TimeInFuture)>.
Puisque le temps n'existe pas au prieuré, le codage de CurrentTime pourrait très bien être la parole Maintenant (ou autre choix) le jour avant pourrait être codé comme Hier, il y en brisant l'hypothèse que la longueur du codage augmentation de la physique temps va de l'avant (et l'un des DeltaTime diminue)
Nous avons correctement le modèle de temps dans notre modèle de calcul afin de faire quelque chose d'utile.
Le seul choix que nous pouvons faire est de coder les horodatages avec l'augmentation des longueurs (mais pas encore à l'aide de unaire) que le temps physique de l'avant. C'est le seul vrai bien de temps dont nous avons besoin et celui de l'encodage des besoins de l'attraper.
Est-ce qu'avec ce type de codage que votre algorithme peut être donné une fois de la complexité.
Votre confusion, le cas échéant, résulter du fait que le mot temps dans les phrases "qu'est-Ce que son temps de la complexité?" et "Combien de temps cela prend-il?" pour les très très différente des choses
Hélas la terminologie utiliser les mêmes mots, mais vous pouvez essayer d'utiliser "les étapes de la complexité" dans votre tête et re-poser votre question, j'espère que cela va vous aider à comprendre la réponse est vraiment ^_^
1 Ce qui explique aussi la nécessité d'une approche asymptotique que chaque instance a un autre, mais non arbitraire, de la longueur.
2 j'espère que je suis en utilisant le terme correct en anglais ici.
3 Aussi c'est pourquoi on trouve souvent des log(log(n))
termes dans le calcul.
4 Id est, une étape doit occuper une partie finie, mais pas nulle, ni pas connecté, l'intervalle de temps.
5 Cela signifie que le mode de calcul en tant que connaissance de la physique du temps, c'est peut l'exprimer avec ses termes. Une analogie sont comment les génériques de travail dans le .NET framework.