Ich habe eine Prioritätswarteschlange max heap, wobei jedes Element eine Klasse ist Aufgabe genannt, die wie folgt aussieht (in Java implementiert, aber Frage ist sprachunabhängig):Zeitkomplexität von Differenziert Priority 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
}
Der Heap ist offensichtlich nach Priorität sortiert. Die Operation, die ich ausführen möchte, ist das Item mit der höchsten Priorität zu finden, den Time Wert zu dekrementieren und es aus dem Heap zu entfernen, wenn sich der Time Score auf 0 ändert. JETZT ist hier der Haken: Es darf mehr als eine Task geben gleiche Priorität. In diesem Fall vergleiche ich die ID-Werte aller dieser Aufgaben und arbeite mit der niedrigsten.
Was wäre die Worst-Case-Laufzeit eines solchen Vorgangs? Wenn jedes Element dieselbe Priorität hat, würde ich am Ende den gesamten Baum durchsuchen, was bedeutet, dass dies unmöglich in weniger als 0 (n) Zeit durchgeführt werden kann, richtig? Dies scheint unmöglich zu sein, weil die IDs unsortiert sind. Allerdings wurde mir gesagt, dass dies in O (log n) möglich ist, was ich überhaupt nicht verstehe. Würde jemand klären können, wo ich mich dem Unrecht annähere?
die Tags, die Sie gewählt haben, haben nicht viele Anhänger, ich schlage vor, Sie verwenden ein Sprach-Tag, auch wenn die Frage Sprache Agnostic ist –
Guter Tipp, danke. – Chase