Complexité asymptotique de .NET les classes de collection
Sont des ressources à propos de la complexité asymptotique (big-O et le reste) de méthodes d' .NET les classes de collection (Dictionary<K,V>
, List<T>
etc...)?
Je sais que la C5, la bibliothèque de documentation comprend quelques informations à ce sujet (exemple), mais je suis intéressé par la norme .NET des collections de la... (et PowerCollections' information serait bien aussi).
- Par la complexité de la classe, je voudrais examiner la complexité cyclomatique plutôt que asymptotique de l'espace/temps-de la complexité. J'avais attribut de ce dernier pour les opérations au sein d'une classe.
- Vous pouvez toujours écrire un programme de l'horloge de la fonction particulière qui vous intéresse, de tracer les résultats en fonction de N pour les différents modèles d'entrée. Je pense que la principale raison de leur complexité temporelle n'est pas documentée, c'est que c'est un détail d'implémentation, de sorte que le .NET de l'équipe réserve le droit de modifier les spécificités de la mise en œuvre dans l'avenir. En tant que tel, le cahier des charges pour l'utilisation de ces classes en fonction de leur fonctionnalité et de ne pas leur performance. Si une caractéristique est très importante pour vos besoins, alors il est probablement mieux de le mettre en œuvre l'algorithme de vous-même.
Vous devez vous connecter pour publier un commentaire.
MSDN ces Listes:
Dictionnaire<,>
List<>
SortedList<,>
(edit: mauvais lien; voici le version générique)SortedDictionary<,>
etc. Par exemple:
Cette page résume quelques temps comlplexities pour les différents types de collection avec Java, mais ils doivent être exactement de la même façon .NET.
J'ai pris les tableaux de la page et modifiée ou agrandie pour l' .NET framework.
Voir aussi les pages MSDN pour SortedDictionary et SortedList, qui décrivent en détail le temps de complexité requis pour les diverses opérations.
Recherche
D'extraction et d'Insertion
Suppression doit avoir la même complexité que l'insertion de la collection.
SortedList a quelques particularités notables pour l'insertion et l'extraction.
D'Insertion (méthode Add):
De recherche (propriété d'Élément):
Noter que
ArrayList
est équivalent àList<T>
en termes de complexité de toutes les opérations.Je ne sais pas en général (l'autre réponse vient de poster peut-être vous donne exactement ce que vous êtes après) - mais vous pouvez en tenir compte, et d'autres méthodes de cours à l'aide de ILSpy (un peu maladroit avec FSharp code, vrai) et cela donne finalement une fonction C#:
Ok, donc ce n'est pas exactement " bon " code en C# sur les termes, mais la présence de la
while(true)
boucle implique qu'il ne peut pas être O(1) au moins; que pour ce qu'elle est réellement... eh bien, ma tête me fait mal trop de choses à découvrir 🙂Cette page présente de courtes notes sur les principaux avantages & cons pour la plupart .NET Collections :
http://geekswithblogs.net/BlackRabbitCoder/archive/2011/06/16/c.net-fundamentals-choosing-the-right-collection-class.aspx
Il n'y a pas une telle chose comme "la complexité de la collecte des classes". Plutôt, différentes opérations sur ces collections ont différentes complexités. Par exemple, l'ajout d'un élément à un
Dictionary<K, V>
...Alors que la récupération d'un élément à partir d'un
Dictionary<K, V>
...La documentation dit qu'elle est construite sur un arbre binaire, et ne mentionne pas le suivi de l'élément maximal. Si la documentation est correcte, cela signifie qu'il doit être: O( log n). Il y avait au moins une erreur dans la documentation des collections (en se référant à un tableau adossés à une structure de données comme un arbre de recherche binaire), mais cela a été corrigé.