Je recherche une implémentation d'un arbre rouge-noir en C #, avec les caractéristiques suivantes: p>
T code> par différents champs de l'information. LI>
- La recherche dans l'arborescence devrait être avec le champ spécifique, il n'acceptera donc pas
t code>, mais cela acceptera le type de champ le triant. LI>
- la recherche ne devrait pas être la seule valeur exacte. Devrait soutenir la recherche du plus bas / supérieur. Li>
ul>
merci. p>
3 Réponses :
RIP TheSeet de C5 Collection Libs. P>
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é. P>
Y a-t-il des raisons spécifiques que triodictionnaire code> est insuffisant pour vous? P>
"que vous pourriez mettre en œuvre seuls sans trop de difficulté." I> 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
Oui; Je viens de vérifier en écumant la classe dans le réflecteur. En interne, il met les clés dans un tri =
Soyeddicary code> Contrairement à la section code>. Aussi, Umm, je ne sais pas exactement pourquoi je pensais pouvoir le prolonger facilement. Ce n'est pas clair qu'il pourrait. Tant pis.
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. P>
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. P>
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). P>
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. P>
Répondre à votre autre question, nommé "livre ou enseignant", le vraiment i> le meilleur moyen d'apprendre la programmation est de écrire des programmes i>. 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.