Je me suis souvenu que le tas peut être utilisé pour rechercher si un élément s'y trouve ou non avec une complexité temporelle O(logN). Mais soudain, je ne peux pas obtenir les détails. Je ne peux que trouver getmin delete ajouter et ainsi de suite.
Quelqu'un peut-il donner un indice?
Vous devez rechercher dans chaque élément du tas afin de déterminer si un élément est à l'intérieur.
Une optimisation est cependant possible (nous supposons un tas maximum ici). Si vous avez atteint un nœud avec une valeur inférieure à l'élément que vous recherchez, vous n'avez pas besoin de chercher plus loin à partir de ce nœud. Cependant, même avec cette optimisation, la recherche est toujours O(N) (besoin de vérifier N/2 nœuds en moyenne).
Trop tard, mais toujours en ajoutant cela pour quelqu'un qui pourrait tomber ici.
La recherche dans un tas, telle qu'elle est, aura besoin de O(N) temps. Mais si vous pouvez prendre le coup d'un prétraitement unique de faire sortir tous les éléments séquentiellement dans un tableau, vous obtiendrez un tableau trié en O (N.logN). Effectivement un tri en tas. Maintenant, votre nouveau tableau trié peut être recherché dans O(logN) time.
Je pense que ce que vous recherchez est un BST (arbre de recherche binaire).
L'ajout d'un index aux valeurs de tas peut résoudre ce problème. Dans python cela peut être fait à l'aide d'un dictionnaire. Mettez à jour l'index du nœud dans le dictionnaire chaque fois que vous effectuez une opération dans le tas min.
Vous ne devez l'implémenter que si la longueur de votre segment min est énorme et que vous souhaitez effectuer plusieurs recherches dans le segment min. Il faudra du temps pour coder le suivi de l'index, mais cela augmentera la vitesse du programme d'au moins 50 à 60%.