Quelle est la complexité de l'opérateurinen Python? Est-ce thêta (n)?
Est-ce la même chose que ce qui suit?
def find(L, x)
for e in L:
if e == x:
return True
return False
L est une liste.
La complexité de in
dépend entièrement de ce que L
est. e in L
deviendra L.__contains__(e)
.
Voir ce document sur la complexité time pour la complexité de plusieurs types intégrés.
Voici le résumé pour in
:
Le pire des cas O(n) pour les ensembles et les dessins est très rare, mais cela peut arriver si __hash__
est mal implémenté. Cela ne se produit que si tout dans votre ensemble a la même valeur de hachage.
Cela dépend entièrement du type de conteneur. Les conteneurs de hachage (dict
, set
) utilisent le hachage et sont essentiellement de type O (1). Les séquences typiques (list
, Tuple
) sont implémentées comme vous le devinez et sont O (n). Les arbres seraient en moyenne O (log n). Etc. Chacun de ces types aurait une méthode __contains__
appropriée avec ses caractéristiques big-O.
Cela dépend du conteneur que vous testez. C'est généralement ce que vous attendez - linéaire pour les infrastructures de données ordonnées, constant pour les non ordonnés. Bien sûr, il existe deux types (ordonné ou non ordonné) qui peuvent être pris en charge par une variante de l’arbre.