如何在O(n log n)复杂度中按降序将值插入到LinkedList中?

时间:2016-05-09 11:40:40

标签: java algorithm time-complexity asymptotic-complexity

我必须实现自定义ProperyQueue,我决定使用LinkedList作为我的值的容器。要插入的顺序是高值 - 低优先级。因此,队列具有降序排列的值,优先级升高为元素'价值较小。如何实现插入方法使用O(n log n)的复杂度?

这是优先级队列:

public class PriorityQueue<E extends Comparable<? super E>> implements Comparable {
    private LinkedList<E> queue;
    private int size;


    public PriorityQueue(int size) {
        this.size = size;
        queue = new LinkedList<>();
    }

    public PriorityQueue() {
        this(50000);
    }

  public void insert(E value) {
        if (queue.size() == size) {
            try {
                throw new SizeLimitExceededException();
            } catch (SizeLimitExceededException e) {
                e.printStackTrace();
            }
        }
        if (value == null) {
            throw new NullPointerException();
        } else {
            queue.add(value);
            size--;
        }
        Collections.sort(queue);
        Collections.reverse(queue);
    }

}

我的插入方法的复杂性是O(n pow(n))我该如何改进它,我应该使用什么算法?

1 个答案:

答案 0 :(得分:1)

为什么不简单地使用TreeSet
各个元素的compareTo方法应首先比较优先级(返回较高优先级的负值),然后对其他属性进行一些比较,以使它们唯一。