Quelle est la complexité temporelle de chacune des opérations d'ensemble de python en notation Big O ?
J'utilise set type de Python pour une opération sur un grand nombre d'éléments. Je veux savoir comment les performances de chaque opération seront affectées par la taille de l'ensemble. Par exemple, add , et le test d'adhésion:
myset = set()
myset.add('foo')
'foo' in myset
Googler n'a pas trouvé de ressources, mais il semble raisonnable que la complexité temporelle de l'implémentation de l'ensemble de Python ait été soigneusement prise en compte.
S'il existe, un lien vers quelque chose comme this serait génial. Si rien de tel n'est disponible, alors peut-être pourrions-nous le résoudre?
Marques supplémentaires pour trouver la complexité temporelle de toutes les opérations définies.
Selon wiki Python: complexité temporelle , l'ensemble est implémenté comme table de hachage . Vous pouvez donc vous attendre à rechercher/insérer/supprimer dans O (1) moyenne. À moins que le facteur de charge de votre table de hachage ne soit trop élevé, vous faites face à des collisions et à O (n).
P.S. pour une raison quelconque, ils réclament O(n) pour une opération de suppression qui ressemble à un type erroné.
P.P.S. Cela est vrai pour CPython, pypy est un histoire différente .
L'opération in
doit être indépendante de la taille du conteneur, c'est-à-dire. O (1) - étant donné une fonction de hachage optimale. Cela devrait être presque vrai pour Python chaînes. Le hachage des chaînes est toujours critique, Python devrait être intelligent là-bas et donc vous pouvez vous attendre des résultats presque optimaux.