Qu'est-ce qui compte comme une opération?

8

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 estO(f) (pour une fonction f) 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?

user85798
la source
@DW Aucun de ceux-ci n'est un doublon? (Je dirais, tous.)
Raphael
4
Copie possible de Qu'est
David Richerby

Réponses:

1

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.

Alex Li
la source
1
Bienvenue sur le site! Il s'agit d'une explication très simplifiée et je ne suis pas sûr qu'elle résout très bien le problème. En particulier, il existe plusieurs modèles de calcul. Avec les machines Turing, par exemple, vous ne pouvez même pas indexer dans un tableau en temps constant; avec des modèles de mots, vous pouvez faire de l'arithmétique surO(logn)-bits en temps constant, où nest la longueur de l'entrée. Il faut sélectionner un modèle approprié pour la chose qui a été analysée et les situations dans lesquelles l'analyse sera utilisée.
David Richerby