在 java 中以 O(N) 构建堆而不是 O(NlogN)
Building heap in O(N) in java instead of O(NlogN)
为了构建堆,我们在 java 中使用了 PriorityQueue class。有没有办法使用内置 library/class 直接从 O(N) 的数组构建堆,而不是单独推送每个元素以在 O(NlogN) 中构建堆?
使用the constructor that takes a collection:
new PriorityQueue<String>(Arrays.asList(yourArray));
一如既往,Java 文档没有提及任何关于复杂性的内容,但阅读 the source code 表明 OpenJDK 使用典型的 O(n)
heapify 方法,而不是插入一个循环:
private void initFromCollection(Collection<? extends E> c) {
initElementsFromCollection(c);
heapify();
}
为了构建堆,我们在 java 中使用了 PriorityQueue class。有没有办法使用内置 library/class 直接从 O(N) 的数组构建堆,而不是单独推送每个元素以在 O(NlogN) 中构建堆?
使用the constructor that takes a collection:
new PriorityQueue<String>(Arrays.asList(yourArray));
一如既往,Java 文档没有提及任何关于复杂性的内容,但阅读 the source code 表明 OpenJDK 使用典型的 O(n)
heapify 方法,而不是插入一个循环:
private void initFromCollection(Collection<? extends E> c) {
initElementsFromCollection(c);
heapify();
}