Meilleur BST auto-équilibré pour une insertion rapide d'un grand nombre de nœuds

J'ai pu trouver des détails sur plusieurs BST auto-équilibrés à travers plusieurs sources, mais je n'ai trouvé aucune bonne description détaillant celle qu'il est préférable d'utiliser dans différentes situations (ou si cela n'a vraiment pas d'importance).

Je veux un BST optimal pour stocker plus de dix millions de nœuds. L'ordre d'insertion des nœuds est fondamentalement aléatoire, et je n'aurai jamais besoin de supprimer des nœuds, donc le temps d'insertion est la seule chose qui aurait besoin d'être optimisée.

J'ai l'intention de l'utiliser pour stocker les états de jeu précédemment visités dans un jeu de puzzle, afin de pouvoir vérifier rapidement si une configuration précédente a déjà été rencontrée.

请先 登录 后评论

3 réponses

Community

Les deux BST auto-équilibrés que je connais le mieux sont le rouge-noir et le AVL, donc je ne peux pas dire avec certitude si d'autres solutions sont mieux, mais si je me souviens bien, le rouge-noir a une insertion plus rapide et une récupération plus lente par rapport à AVL.

Donc, si l'insertion est une priorité plus élevée que la récupération, le rouge-noir peut être une meilleure solution.

请先 登录 后评论
jmbucknall

Pourquoi utiliser un BST ? D'après votre description, un dictionnaire fonctionnera aussi bien, sinon mieux.

La seule raison d'utiliser un BST serait si vous vouliez répertorier le contenu du conteneur dans l'ordre des clés. Il ne semble certainement pas que vous vouliez faire cela, auquel cas optez pour la table de hachage. O(1) insertion et recherche, pas de souci de suppression, quoi de mieux ?

请先 登录 后评论
Jonas Kölker

[les tables de hachage ont] O(1) insertion et recherche

Je pense que c'est faux.

Tout d'abord, si vous limitez l'espace de clés à un espace fini, vous pouvez stocker les éléments dans un tableau et effectuer un balayage linéaire O(1). Ou vous pouvez trier le tableau de manière aléatoire, puis effectuer un balayage linéaire en temps prévu O (1). Quand la matière est finie, la matière est facilement O(1).

Alors, disons que votre table de hachage stockera n'importe quelle chaîne de bits arbitraire ; cela n'a pas beaucoup d'importance, tant qu'il y a un ensemble infini de clés, dont chacune est finie. Ensuite, vous devez lire tous les bits de toute requête et entrée d'insertion, sinon j'insère y0 dans un hachage vide et j'interroge sur y1, où y0 et y1 diffèrent à une seule position de bit que vous ne regardez pas.

Mais disons que les longueurs de clé ne sont pas un paramètre. Si votre insertion et votre recherche prennent O(1), en particulier le hachage prend un temps O(1), ce qui signifie que vous ne regardez qu'une quantité finie de sortie de la fonction de hachage (à partir de laquelle il est probable qu'il y ait be seulement une sortie finie, d'accord).

Cela signifie qu'avec un nombre fini de compartiments, il doit y avoir un ensemble infini de chaînes qui ont toutes la même valeur de hachage. Supposons que j'insère beaucoup, c'est-à-dire

请先 登录 后评论
  • 6 abonnés
  • 0 favoris,337 Feuilleter
  • Jonesinator posée à 2023-03-03 17:13