Ich muss eine benutzerdefinierte Prioritätswarteschlange implementieren, ohne das PriorityQueue-Formular Java.Util zu verwenden ... Ich habe drei grundlegende Methoden: Einfügen, Entfernen und Löschen. Alle Operationen müssen in konstanter Zeit O (log n) durchgeführt werden. Wie kann ich das erreichen? Welche Algorithmen sollte ich für diese Operationen verwenden? Und zu welcher Art von Container soll ich die generischen Werte behalten?Wie implementiert man eine generische PriorityQueue mit grundlegenden Methoden in Java?
Das ist, was ich bisher ...
getan habenpublic class PriorityQueue<E extends Comparable<? super E>> implements Comparable {
private Stack<E> queue = new Stack<>();
private int size;
public PriorityQueue(int size) {
this.size = size;
}
public PriorityQueue() {
size = 50000;
}
public void insert(E value) {
if (value == null) {
throw new NullPointerException();
}
//how can I insert a value and what container should I use ?
}
public void remove() {
//remove largest
}
public int compareTo(Object o) {
if (o != null && o instanceof PriorityQueue) {
PriorityQueue anotherQueue = (PriorityQueue) o;
return this.size - anotherQueue.size;
} else {
throw new ClassCastException();
}
}
}
nicht viel .. aber Hilfe wäre sehr dankbar!
O (log N) ist keine konstante Zeit. O (1) ist konstante Zeit. Sie können dies nicht in konstanter Zeit implementieren, aber O (Log N) ist das, was die eingebaute Bibliothek erreicht. Ich nehme an, Sie haben die eingebaute Bibliothek gelesen, da sie Quelle und Dokumentation hat ... Müssen Sie wirklich Vergleichbar implementieren? Warum würden Sie eine unsortierte Sammlung verwenden, d. H. Einen Stapel als zugrunde liegende Struktur? –
'PriorityQueue' verwendet intern einen [heap] (https://en.wikipedia.org/wiki/Heap_ (data_structure)). – Jeffrey
Stack war keine sehr gute Idee, vielleicht wäre eine ArrayList besser? Aber ich habe Probleme mit den Algorithmen für die Operationen ... – Gustavo