J'ai 100 ensembles d'objets A, chaque ensemble correspondant à un point de requête Qi, 1 <= i <= 100
.Structure de données efficace à la fois pour deleteMin et la recherche par opérations de touches
class A {
int id;
int distance;
float x;
float y;
}
Dans chaque itération de l'algorithme ma, je sélectionne un point d'interrogation Qi et extrait de l'ensemble de l'objet ayant la valeur de distance minimale correspondante. Ensuite, je dois trouver cet objet spécifique dans tous les 100 ensembles, en cherchant avec son identifiant, et supprimer tous ces objets.
Si j'utilise un tas pour chaque ensemble d'objets, il est bon marché d'extraire l'objet avec MIN(distance)
. Cependant, je ne serai pas capable de trouver le même objet dans d'autres tas en cherchant avec l'identifiant, car le tas est organisé avec la valeur de distance. De plus, la mise à jour du tas est coûteuse.
Une autre option que j'ai considérée est l'utilisation d'un map<id, (distance, x, y)>
pour chaque ensemble. De cette façon, la recherche (trouver l'opération) par ID est bon marché. Cependant, extraire l'élément avec la valeur minimale prend un temps linéaire (il doit examiner chaque élément de la carte).
Y a-t-il une structure de données que je pourrais utiliser pour les opérations dont j'ai besoin?
- extract_min (distance)
- find (id)
Merci à l'avance!
Avez-vous fait du formatage? Veuillez utiliser les boutons au-dessus de la case d'édition pour formater votre code correctement. –
Pas une fille C++, donc ne peut pas vraiment contribuer une réponse significative, mais parfois pour des cas comme celui-ci, la solution la plus facile est deux structures de données: map ou hashtable pour rechercher des éléments par index, article. – Juliet