Est-ce techniquement un algorithme O(1) pour le “Hello World”?

Serait-ce être considéré comme un algorithme O(1) pour "Hello, World!" ??

public class Hello1
{
   public static void Main()
   {
      DateTime TwentyYearsLater = new DateTime(2035,01,01);
      while ( DateTime.Now < TwentyYearsLater )
      { 
          System.Console.WriteLine("It's still not time to print the hello ...");
      }
      System.Console.WriteLine("Hello, World!");
   }
}

Je suis en train de penser à l'aide de la

DateTime TwentyYearsLater = new DateTime(2035,01,01);
while ( DateTime.Now < TwentyYearsLater )
{ 
   //... 
}

extrait de code comme une boucle occupée à mettre une blague à chaque fois que quelqu'un demande un algorithme d'une certaine complexité. Serait-ce correct?

  • C'est O(N) complexité, non O(1)
  • Mais ne pas la boucle occupée ajouter un nombre constant d'opérations?
  • Non, vous ne savez pas combien de fois il va passer à travers la boucle, même si vous connaissez le montant exact de cette différence dans le temps entre le moment où vous démarrez le programme et la date spécifiée. C'est dépendante de la vitesse de l'ordinateur en cours d'exécution, il est, quoi d'autre est en cours d'exécution sur elle, comment le CPU horaires de la tâche, etc.
  • Il n'y a pas de N que l'algorithme dépend, de sorte que vous ne pouvez pas réellement dire que c'est un algorithme O(N).
  • Techniquement il n'y a pas d'entrée, de sorte N n'a même pas de sens. Mais vous pouvez envisager d' DateTime.Now une entrée qui fait encore la personne à charge sur le résultat. Si vous pouvez supposer une valeur réaliste pour DateTime.Now, alors oui, le programme des boucles d'une quantité constante de temps.
  • FYI bigocheatsheet.com
  • L'énoncé du problème doivent définir ce N est.
  • La machine quelque chose s'exécute sur est totalement indifférent à la complexité algorithmique. La complexité théorique de la mesure qui ne tient pas compte de toute la mise en œuvre des parties spécifiques.
  • C'est vrai pour la plupart des algorithmes. Lorsque vous écrivez un tri rapide pour une liste du nombre de comparaisons effectuées est complètement indépendante du matériel de l'exécuter; c'est seulement en fonction du nombre d'éléments dans la liste. Mais la boucle occupée voici les résultats dans le code qui effectue l'opération dans un manoir qui est dépendant du matériel en cours d'exécution. Une telle relation est très rare (et généralement pas sensible), mais certainement pas impossible.
  • Eh bien, dans ce cas, il est certainement le cas...
  • Aussi, Servy d'origine commentaire à propos de la machine qui exécute le programme a été une réponse à des OP question à propos d'un "nombre constant d'opérations," il n'est donc pas (directement) de présenter toutes les réclamations au sujet des machines et de la complexité algorithmique.
  • pas de "manoir". Pas quelque chose que je devrais normalement la peine de corriger, mais probablement à un certain moment, quelqu'un devrait vous laisser savoir...
  • Je pense qu'un peu de code qui dépend de l'extérieur défini DateTime.Now n'est pas considéré comme un algorithme en premier lieu.
  • Si vous utilisez l'exemple de Thread.Sommeil(new Timespan(365*20, 0,0,0)) au lieu de cela, cela élimine le problème de la "SystemTime" en entrée, ce qui peut rendre la question plus claire.
  • Tout d'abord. Un algorithme, sans aucun apport peut être considéré comme un algorithme? sorcière problemas de la résolution? Date et chaîne de caractères à imprimer pourraient être considérées comme des variables? PS:de 10 heures de travail, ne prenez pas ce commentaire sérieux
  • Ce n'est même pas un algorithme. Un algorithme implique de prendre des décisions à produire de la sortie désirée à partir d'une donnée d'entrée, mais cela imprime Bonjour tout le Monde, peu importe.
  • Il y a des gens ici qui définitivement devriez lire à propos de comment Big O est défini au lieu de marmonner quelque chose à propos de l'entrée, la sortie, le nombre de calculs bla, bla.
  • BTW la question montre très peu d'effort de recherche, pour dire le moins. Mais il est clair comme le cristal. Et quand une question provoque beaucoup de discussions, il doit être utile. +1 🙂
  • Vous assurez-vous commencé une discussion entre les intellectuels ici, OP.
  • Si nous supposons DateTime.Maintenant, en tant que paramètre, le programme des boucles de 0 fois suffisamment grandes valeurs de date / heure.Maintenant. Non pas qu'il ferait aucune différence, mais n aurait log(DateTime.Maintenant) pas DateTime.Maintenant.
  • TwentyYearsLater est essentiellement une entrée de l'algorithme, dans ce cas, c'est O(N). C'est à dire: l'algorithme prend exactement aussi longtemps que vous dire pour qu'il puisse prendre; il est directement proportionnelle à la quantité de temps que vous avez spécifié.
  • En général, les questions ayant trait à l'analyse des algorithmes pourrait obtenir de meilleures réponses à Informatique.
  • nom d'utilisateur vérifie
  • Ce n'est pas à même de répondre aux exigences de "Hello World". Il imprime un tas de trucs supplémentaires. Il ne passe pas mon "Hello World" test de régression suite...
  • ce n'est pas un algorithme, ce n'est pas la résolution de tout problème, il suffit de boucles, sauf si vous l'exécuter après la 1/1/2035
  • veuillez utiliser une minuterie à la place. la lecture de la boucle while fait mal