9
votes

Mise en œuvre de l'arbre noir noir en C #

Je recherche une implémentation d'un arbre rouge-noir en C #, avec les caractéristiques suivantes:

  • Rechercher, insérer et supprimer O (journal n).
  • Type des membres doit être générique.
  • Support dans comparer (t) , pour trier T par différents champs de l'information.
  • La recherche dans l'arborescence devrait être avec le champ spécifique, il n'acceptera donc pas t , mais cela acceptera le type de champ le triant.
  • la recherche ne devrait pas être la seule valeur exacte. Devrait soutenir la recherche du plus bas / supérieur.

    merci.


2 commentaires

Répondre à votre autre question, nommé "livre ou enseignant", le vraiment le meilleur moyen d'apprendre la programmation est de écrire des programmes . Ecrivez celui-ci à vous-même, puis vous apprendrez quelque chose.


@Pavel: Je pourrais écrire cela, mais je cherche quelque chose de prêt, je peux donc continuer à développer les côtés principaux de mon programme et à accélérer le développement.


3 Réponses :


2
votes

RIP TheSeet de C5 Collection Libs.


0 commentaires

12
votes

Vous venez de décrire surtout triéddiction , à l'exception de la recherche binaire la plus basse / la plus proche de la valeur la plus basse, que vous puissiez implémenter par vous-même sans beaucoup de difficulté.

Y a-t-il des raisons spécifiques que triodictionnaire est insuffisant pour vous?


3 commentaires

"que vous pourriez mettre en œuvre seuls sans trop de difficulté." Je ne crois pas que vous puissiez facilement prolonger le triodicité. En regardant les métadonnées et essayant simplement de l'étendre, les pièces internes nécessaires ne semblent pas accessibles. Ai-je tort?


Voulez-vous dire que le mot de tri implémente un arbre noir rouge? Si vous le faites, où avez-vous trouvé cela? Je n'en vois aucune mention sur les pages MSDN.


Oui; Je viens de vérifier en écumant la classe dans le réflecteur. En interne, il met les clés dans un tri = , qui est implémenté comme un arbre rouge / noir. Je ne suis pas sûr d'où j'en entendu parler - je me sens comme une ancienne version de la documentation MSDN entamé plus en détail sur la mise en œuvre de Soyeddicary Contrairement à la section . Aussi, Umm, je ne sais pas exactement pourquoi je pensais pouvoir le prolonger facilement. Ce n'est pas clair qu'il pourrait. Tant pis.



0
votes

C'est exactement le commandement de commandes dans PowerCollections. Il est à peu près identique à la triodicité (arbre noir rouge avec des génériques) avec l'ajout de la possibilité de définir une clé de démarrage / d'extrémité et de numériser toutes les valeurs de cette plage.

SortedDicionary uniquement permet d'expose une fonction getenumerator () qui commence au début de la collection et permet uniquement à un appel MOVENNEXT (), donc même si vous utilisez LINQ, rien de magie ne se produit rien: il commence au début et exécute votre expression sur chaque nœud, dans l'ordre, jusqu'à ce qu'il trouve ceux qui correspondent à votre expression LINQ.

CommandéDdicary a une fonction qui obtient un énumérateur à ou avant une clé particulière et qui fait la recherche dans O (log n).

Un mot de prudence cependant: l'énumérateur de la commande de commande de puissance ordonnée est implémentée à l'aide de "rendement" et la performance d'utilisation de la mémoire et de dénombrement est au moins O (n ^ 2) ... Vous pouvez modifier vous-même la mise en œuvre pour le faire implémenter Un énumérateur traditionnel et ces deux problèmes disparaissent. Je vais soumettre ce correctif à Codépex si je peux jamais trouver le temps.


0 commentaires