J'ai un tas file d'attente prioritaire max où chaque élément est une classe appelée tâche, qui se présente comme suit (implémenté en Java, mais la question est la langue agnostique):Complexité de Différencier Priorité Queue Heap Via Key
class Task{
int ID
int Priority
int Time
public Task(int i, int p, int t){
this.ID = i;
this.Priority = p;
this.Time = t;
}
//Getters, etc
}
Le tas est évidemment trié par priorité. L'opération que je souhaite effectuer consiste à trouver l'élément de priorité la plus élevée, à diminuer sa valeur Time et à la retirer du tas si le score de temps passe à 0. TOUTEFOIS, voici la capture: il est possible d'avoir plusieurs tâches avec même priorité. Dans ce cas, je compare les scores ID de toutes ces Tâches et opère sur le plus bas.
Quel serait le pire temps de fonctionnement d'une telle opération? Si chaque élément a la même priorité, je finirais par chercher dans tout l'arbre, ce qui signifie que cela ne pourrait pas être fait en moins de O (n) temps, correct? Cela semble impossible à contourner parce que les identifiants ne sont pas triés. Cependant, on me dit que c'est possible de faire en O (log n), ce que je ne comprends pas du tout. Quelqu'un pourrait-il préciser où j'aborde ce problème?
les tags que vous avez choisis n'ont pas beaucoup d'abonnés, je vous suggère d'utiliser une balise de langue même si la question est agnostique de la langue –
Bon conseil, merci. – Chase