Toutes mes excuses pour la question des débutants, mais je suis un peu confus quant à ce qui compte exactement comme une "opération simple" lorsque l'on élabore la complexité temporelle d'un algorithme. En particulier, pourquoi considérons-nous que toutes les opérations sont égales?
Assurément, la division de deux très grands nombres prend plus de temps que l'ajout d'un à un nombre (comme dans chaque itération d'une boucle for). La multiplication, par exemple, peut consister en un certain nombre de petits ajouts. Donc, au lieu de simplement les additionner, ne devrions-nous pas appliquer une sorte de poids à chaque opération en fonction du type d'opération (addition, multiplication, etc.) et de la taille des nombres impliqués?
Mon problème est qu'on me demande de prouver que la complexité de mon algorithme est (pour une fonction ) et je ne sais pas comment procéder de manière mathématiquement rigoureuse en raison du flou inhérent à la définition d'une «opération simple». Alors, comment pourrais-je m'y prendre?
la source
Réponses:
Les opérations simples sont tout ce qui prend un temps constant à réaliser. La confusion est que la division ne semble pas prendre un temps constant, et en fait, en général, ce n'est pas le cas. MAIS!
La division et l'addition prennent toutes deux un temps constant si, par exemple, vous ajoutez deux entiers 32 bits ensemble, ce qui est généralement le cas. Cependant, si vous ajoutez des nombres arbitrairement grands, ils ne seront pas vraiment à temps constant, bien que parfois je pense que les gens le traiteront comme si c'était parce que les nombres sont supposés ne pas devenir trop gros.
la source