Permet de dire que j'ai un graphique et vous voulez voir si b in N[a]
. Qui est le plus rapide de la mise en œuvre et pourquoi?
a, b = range(2)
N = [set([b]), set([a,b])]
OU
N= [[b],[a,b]]
C'est évidemment simpliste, mais imaginez que le graphe devient vraiment dense.
Adhésion à l'essai dans un ensemble est largement plus rapide, surtout pour les grands ensembles. C'est parce que le jeu utilise un fonction de hachage à la carte d'un seau. Depuis Python implémentations de redimensionner automatiquement que la table de hachage, la vitesse peut être constante (
O(1)
), peu importe la taille de l'ensemble (en supposant que la fonction de hachage est suffisamment bonne).En revanche, pour évaluer si un objet est un membre de une liste, Python est de comparer chaque membre de l'égalité, c'est à dire le test est
O(n)
.b in N[a]
) de la liste de conteneurs, c'est-àN
, donc non, il n'est pas O(n) de toute façon.O(1)
(+notes) est une meilleure description queO(log n)
(-notes).O(1)
est la description correcte ici. Fixe.Tout dépend de ce que vous essayez d'accomplir. À l'aide de votre exemple verbatim, c'est plus rapide d'utiliser des listes, que vous n'avez pas à passer par la surcharge de la création de la scénographie:
Produit:
Toutefois, pour les raisons déjà mentionnées ici, vous bénéficiez de l'aide de jeux quand vous êtes recherche de grands ensembles. Il est impossible de dire, par votre exemple, où ce point d'inflexion est fait pour vous et si vous allez voir les avantages.
Je vous suggère de tester les deux méthodes pour aller avec tout ce qui est plus rapide pour votre cas d'utilisation.
Jeu ( je veux dire un hachage en fonction définie comme HashSet) est beaucoup plus rapide que la Liste à la recherche d'une valeur. La liste doit aller de manière séquentielle afin de savoir si la valeur existe. HashSet pouvez directement sauter et de localiser le seau et regarder pour une valeur presque constante de temps.