我需要一个始终包含n迄今为止插入的最大项目的数据结构(没有特定的顺序).
所以,如果n是3,我们可以进行以下会话,其中插入一些数字并且容器的内容发生变化:
[] // now insert 1
[1] // now insert 0
[1,0] // now insert 4
[1,0,4] // now insert 3
[1,4,3] // now insert 0
[1,4,3] // now insert 3
[4,3,3]
Run Code Online (Sandbox Code Playgroud)
你明白了.数据结构的名称是什么?实现这个的最佳方法是什么?或者这是在一些图书馆?
我想使用一个容器,它有一个priority_queuefor元素(委托),它使用反向比较,因此pop将删除最小的元素.因此该insert函数首先检查要插入的新元素是否大于最小元素.如果是这样,我们抛出最小的并推动新元素.
(我有一个C++实现,但问题是与语言无关.)
我通过设置其优先级在MSMQ中发送消息.使用C#
我可以先从MSMQ获得高优先级的消息吗?
就像我们进入Priority Queue一样.
还有一件事......
假设有三个优先级
0 - 高1-中2 - 低
队列中的序列是2001122221111100
现在如果我发送高优先级的消息(0)将被放置?通过在MSMQ中设置优先级.它会像真正的优先级队列一样吗?
我想知道是否有可能在PriorityQueue中找到值的索引.只是看看它是"在线"的数字.有人知道吗?
在一个方法中,我收到一个泛型object E extends Comparable<E>作为参数.现在我想创建两个优先级comparator队列.其中一个使用E和其他使用E使用相反的队列comparator(即如果E使用'<',那么第二个队列必须使用'> =').请告诉我如何创建两个这样的队列.
queue2=new PriorityQueue<E>(0,Collections.reverseOrder(e));
Run Code Online (Sandbox Code Playgroud)
我收到的错误reverseOrder不适用.
请帮忙
我有一个涉及迭代优先级队列的java赋值.队列由带有字符串和int的对象组成,我需要有一种方法来检查队列中所有对象的单独对象的字符串.
这是一个迭代器对象的最佳方法吗?这看起来太乱了.我可以出列队并入队,但这似乎效率低下.也许是一个foreach循环?
这可能听起来很愚蠢,但是当你有(键,值)对的对象并且你根据键对它们进行排序时它是有意义的.用代码说明我的观点:
public class Pair implements Comparable<Pair> {
private int value;
private int key;
public Pair(int key, int value) {
this.key = key;
this.value = value;
}
@Override
public int compareTo(Pair o) {
if (this.key > o.key)
return 1;
else if (this.key < o.key)
return -1;
return 0;
}
}
public class program {
public static void main(String[] args) {
PriorityQueue<Pair> queue = new PriorityQueue<Pair>;
queue.add(new Pair(1,1));
queue.add(new Pair(1,2));
queue.add(new Pair(1,3));
Pair pair = queue.poll(); // What would be in pair? …Run Code Online (Sandbox Code Playgroud) 如果我想删除log(n)Java中的最高条目TreeSet,我会使用treeSet.pollFirst()- Scala mutable.TreeSet类的等价物是什么?
总之,我真正想要的是一个堆状的优先级队列中的数据结构,让我removeMax,add并updatePriority在对数时间.我看了Scala集合库,我很困惑 - 虽然mutable.PriorityQueue让我deque(即removeMax)在对数时间 - 它没有提供更新日志时间的优先级(我必须hackily扫描和删除项目并重新添加线性时间) .同样mutable.TreeSet会让我在对数时间内更新优先级(通过hackily删除和重新添加),但它没有removeMax(即pollFirst)操作.我应该使用什么样的集合容器?请不要将我介绍给外部依赖项.
在面试问题中,我被要求使用队列实现优先级队列,
在采访之后我用Google搜索并发现它可以使用两个队列实现,但我没有找到如何...
请任何人解释我.
提前致谢.
是否有一个不太复杂的方法来实现使用两个标准的优先级队列?队列获取与2个中创建ComparatorS和提供(除了add)的操作poll1()和poll2(),其中每个删除和返回根据相应的比较器的最小元素.
我的用例是分支定界优化.当您获得无限时间时,以最佳界限扩大候选人可证明是最佳的.假设无限时间可证明是错误的.
严格遵循这一策略通常最终在截止日期到来时根本没有解决方案.一个简单的创可贴首先是将搜索引向解决方案,然后切换到最佳约束策略.这是相当不令人满意的,因为发现的第一个解决方案可能是任意低质量的.
这就是为什么我想使用两个标准队列:在一个步骤中,展开最佳边界候选者,在另一个步骤中,根据一些启发式扩展"最佳外观"候选者.
另一种可能的用途是用于帕累托最优化.
val maxHeap = scala.collection.mutable.PriorityQueue[Int] //Gives MaxHeap
Run Code Online (Sandbox Code Playgroud)
使用Ordering将PriorityQueue转换为minHeap最简洁有效的方法是什么?