草庐IT

PriorityQueue

全部标签

java - 使用自定义比较器在 O(n) 中创建 PriorityQueue

我试图用带有自定义比较器的Priorityqueue实现MST,但我在O(n)时间内用它构建最小堆时遇到问题。问题是只有一个Priorityqueue的构造函数允许在O(n)中创建PriorityQueue,但它不接受任何比较器作为参数。我希望它使用我的自定义比较器。这个问题有解决方法吗?PriorityQueue.addAll()将失去使用Min-heap进行MST的目的,因为它是O(nlogn)方法。这是我的代码。ArrayListar=newArrayList();for(inti=0;ipr=newPriorityQueue(ar);以及我想使用的比较器:-PriorityQu

java - 从集合构造 PriorityQueue 的时间复杂度是多少?

带有Collection的JavaPriorityQueue构造函数的复杂性是什么?我使用了构造函数:PriorityQueue(Collectionc)复杂度是O(n)还是O(n*log(n))? 最佳答案 从集合(即使是未排序的集合)中初始化PriorityQueue的时间复杂度为O(n)。这在内部使用了一个名为siftDown()的过程来就地“堆化”数组。(这在文献中也被称为下推。)这是违反直觉的。将一个元素插入堆中似乎是O(logn),因此插入n个元素会导致O(nlogn)复杂度。如果您一次插入一个元素,就会出现这种情况。(

java - Java PriorityQueue(堆)插入n个元素的时间复杂度?

这个问题在这里已经有了答案:HowcanbuildingaheapbeO(n)timecomplexity?(18个答案)关闭5年前。我想知道JavaPriorityQueue.Add()对n元素的时间复杂度是多少。我知道插入单个元素的潜在更坏情况是O(log(n)),但我不清楚插入n集合的时间复杂度是多少元素?我从各种来源(没有证据)中看到,构建一个n元素的优先级队列堆的时间是O(n),并且还看到声称它是O(nlog(n)),这是有意义的,因为插入是O(log(n)),它乘以n时间确实等于O(nlog(n))注意:我只对最坏的情况感兴趣,而不是摊销。这个问题假设有一种逻辑方法来描述用

Java - 寻找比 PriorityQueue 更快的东西

我正在对大量数据使用java。[我尽量简化问题]实际上我有一个小类(Element),其中包含一个intKEY和一个doubleWEIGHT(带有getters和setters)。我从一个文件中读取了很多这样的对象,我必须得到最好的(最重的)M个对象。实际上,我正在使用带有比较器的PriorityQueue来比较两个元素,它可以工作,但速度太慢。你知道(我知道你知道)有什么更快的方法吗?谢谢 最佳答案 基于堆的优先队列是解决这个问题的一个很好的数据结构。正如健全性检查一样,验证您是否正确使用了队列。如果您想要最高权重的项目,请使用m

java - 简单的 Java PriorityQueue<String> 错误

我所做的就是将三个字符串添加到JavaPriorityQueue,然后将它们打印出来这是我的代码:importjava.util.*;importjava.lang.*;classMain{publicstaticvoidmain(String[]args)throwsjava.lang.Exception{PriorityQueuepq=newPriorityQueue();pq.add("abc");pq.add("ability");pq.add("aberdeen");Strings="ability";System.out.println(s.compareTo("aberd

java - java priorityQueue poll()方法的大O是什么

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭9年前。Improvethisquestion我检查了http://en.wikipedia.org/wiki/Priority_queue它说Naive实现是o(n)。如果我使用二进制搜索,它将是log(n)。但我不确定它是否用于Java。以及如何在priorityQueue上使用二进制搜索?谢谢。

带有自定义比较器的 Java PriorityQueue

我正在使用PriorityQueue和我自己的比较器,但不知何故最终结果并不总是好的。我应该按平均成绩排序,而不是姓名,而不是id.no。最后它应该返回留在排序队列中的名字。其余的名字很好,但它们的顺序不是。输入(姓名,平均成绩,id.no):addJohn3,7550addMark3,824addShafaet3,735pollpolladdSamiha3,8536polladdAshley3,942addMaria3,646addAnik3,9549addDan3,9550poll预期输出:DanAshleyShafaetMaria我的结果:DanAshleyMariaShafae

java - 如何在 PriorityQueue 中找到项目的索引? ( java )

我想知道我是否有可能在PriorityQueue中找到值的索引。只是为了看看它是“在线”的数字。有人知道吗? 最佳答案 有一个普林斯顿写的索引优先级队列。algs4.cs.princeton.edu/24pq/IndexMinPQ.java.html关键思想是在项目及其在优先级队列中的位置之间建立两个索引映射。当你更新优先级队列时,你还需要更新那两个索引映射。希望这能解决您的问题:-) 关于java-如何在PriorityQueue中找到项目的索引?(java),我们在StackOver

Java PriorityQueue去除任意元素性能

假设我有一个javaPriorityQueue(java作为堆实现),我迭代它以根据某些条件删除元素:PriorityQueueq=newPriorityQueue();...Iteratorit=q.iterator();while(it.hasNext()){if(someCriterion(it.next()))it.remove();}每个remove()操作需要多长时间?我不确定它是O(log(n))还是O(1)。 最佳答案 如果您使用的是Sun实现,它是O(log(n))。来自Javadocs:Implementatio

java - 允许重复的 TreeSet 或 TreeMap

我需要一个Collection来对元素进行排序,但不删除重复元素。我选择了TreeSet,因为TreeSet实际上将值添加到支持的TreeMap:publicbooleanadd(Ee){returnm.put(e,PRESENT)==null;}并且TreeMap使用Comparatorscompare逻辑删除重复项我编写了一个Comparator,它在元素相等的情况下返回1而不是0。因此,在元素相等的情况下,带有此Comparator的TreeSet不会覆盖重复项,只会对其进行排序。我已经针对简单的String对象对其进行了测试,但我需要一组自定义对象。publicstaticvo