我需要實現自定義優先級隊列,而不使用PriorityQueue形式的Java.Util ...我有三種基本方法:插入,刪除和清除。所有的操作必須在O(log n)的時間內完成。我怎樣才能做到這一點?我應該使用哪些算法進行這些操作?最後,我應該使用哪種類型的容器來保存通用值?如何在java中使用基本方法實現通用的PriorityQueue?
這是我到目前爲止已經完成了...
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();
}
}
}
不多..但幫助將不勝感激!
O(log N)不是恆定時間。 O(1)是恆定時間。你不能在固定時間內實現它,但O(日誌N)是內置庫實現的。我假設你已經閱讀了內置庫,因爲它有源代碼和文檔....你是否真的需要實現Comparable?爲什麼你會使用未分類的集合,即Stack作爲底層結構? –
'PriorityQueue'在內部使用[heap](https://en.wikipedia.org/wiki/Heap_(data_structure))。 – Jeffrey
Stack不是一個好主意,也許arrayList會更好?但是我正面臨着操作算法的問題...... – Gustavo