2016-05-07 3 views
0

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 haben
public 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!

+0

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? –

+0

'PriorityQueue' verwendet intern einen [heap] (https://en.wikipedia.org/wiki/Heap_ (data_structure)). – Jeffrey

+0

Stack war keine sehr gute Idee, vielleicht wäre eine ArrayList besser? Aber ich habe Probleme mit den Algorithmen für die Operationen ... – Gustavo

Antwort

1

Ich sehe Ihre 'Entfernen' Operation nimmt das größte Element. Es scheint, als würde ein "Max Heap" zu deinen Zwecken passen.

https://en.wikipedia.org/wiki/Heap_(data_structure)

+0

Fellow Kritiker: Das ** ist ** eine Antwort. Ohne die Verbindung hätte es immer noch Bedeutung. –

Verwandte Themen