标签: priority-queue

优于O(logn)的最小堆增加密钥?

我正在使用优先级队列,该队列最初将其元素的优先级基于启发式算法.当元素出列时,启发式更新,并且队列中当前的元素可能会增加其键.

我知道有堆(特别是Fibonacci堆)已经摊销O(1)减少了关键操作,但是有没有任何堆结构在增加键操作上有类似的界限?

对于我的应用程序来说,这远远不是一个性能问题(二进制堆工作正常)它真的只是学术上的好奇心.

编辑:澄清一下,我正在寻找一个数据结构,它具有比O(logn)时间更快的增加键操作,而不是减少键.我的应用程序永远不会减少密钥,因为启发式过度估计优先级.

heap performance complexity-theory priority-queue

9
推荐指数
1
解决办法
3402
查看次数

在FIFO Qeueing系统中,实现优先级消息传递的最佳方式是什么

对于不一致支持优先级消息(如AMQP)的面向消息的中间件,当队列只有FIFO语义时,实现优先级消耗的最佳方法是什么?一般用例是一种系统,其中当队列中存在大量积压的消息时,消费者在较低优先级的消息之前接收具有较高优先级的消息.

messaging priority-queue message-queue amqp rabbitmq

9
推荐指数
1
解决办法
7771
查看次数

基于数据库的优先级队列

有没有人知道基于数据库的优先级队列实现?

我正在处理大量数据,因此将其全部保存在内存中是不可行的.

谢谢!

database priority-queue

9
推荐指数
1
解决办法
1953
查看次数

为什么使用std :: multiset作为优先级队列比使用std :: priority_queue更快?

我尝试用std :: priority_queue替换std :: multiset。但是我对速度结果感到失望。该算法的运行时间增加了50%...

以下是相应的命令:

top() = begin();
pop() = erase(knn.begin());
push() = insert();
Run Code Online (Sandbox Code Playgroud)

我对priority_queue实现的速度感到惊讶,我预期会有不同的结果(对于PQ更好)...从概念上讲,多集被用作优先级队列。为什么优先级队列和多重集即使在情况下也具有如此不同的性能-O2

十个结果的平均值,MSVS 2010,Win XP,32位,方法findAllKNN2()(请参见下面的内容)

MS
N           time [s]
100 000     0.5
1 000 000   8

PQ
N           time [s]
100 000     0.8
1 000 000   12
Run Code Online (Sandbox Code Playgroud)

什么会导致这些结果?尚未对源代码进行其他更改...感谢您的帮助...

MS实施:

template <typename Point>
struct TKDNodePriority
{
    KDNode <Point> *node;
    typename Point::Type priority;

    TKDNodePriority() : node ( NULL ), priority ( 0 ) {}
    TKDNodePriority ( KDNode <Point> *node_, typename Point::Type priority_ ) : node ( …
Run Code Online (Sandbox Code Playgroud)

c++ performance priority-queue multimap multiset

9
推荐指数
3
解决办法
3609
查看次数

有什么方法可以在Redmine中快速(拖放)重新排序任务?

我们使用Redmine来记录和跟踪我们的所有任务,错误和功能.我们有一个月的发布周期,确保Redmine中项目的顺序与每个项目的相对优先级相对应是很重要的,这样人们就不会处理不那么重要的事情了.

目前为了实现这一目标,我们在Redmine中创建了一个名为"rank"的自定义字段,并为每个项目分配了1-1000的整数.这最初工作,但重新排序项目和重新排序只是痛苦,因为相同的项目最终被编辑多次,以使其在优先级列表上的正确位置.有没有办法能够拖放项目来重新排序?我怀疑我们有一个独特的要求,其他人必须有某种方式这样做?

马克斯,感谢您的帮助

memory-management project priority-queue redmine redmine-plugins

9
推荐指数
1
解决办法
4348
查看次数

设置priority_queue容器的优点

使用stl,priority_queue您可以设置基础容器,例如a vector.为stl指定容器有哪些优点priority_queue

c++ stl priority-queue

9
推荐指数
1
解决办法
5356
查看次数

在这种情况下,为什么STL priority_queue不比multiset快得多?

我正在比较STL(g ++)priority_queue的性能,发现push和pop没有我想象的那么快.请参阅以下代码:

#include <set>
#include <queue>

using namespace std;

typedef multiset<int> IntSet;

void testMap()
{
    srand( 0 );

    IntSet iSet;

    for ( size_t i = 0; i < 1000; ++i )
    {
        iSet.insert(rand());
    }

    for ( size_t i = 0; i < 100000; ++i )
    {
        int v = *(iSet.begin());
        iSet.erase( iSet.begin() );
        v = rand();
        iSet.insert(v);
    }
}

typedef priority_queue<int> IntQueue;

void testPriorityQueue()
{
    srand(0);
    IntQueue q;

    for ( size_t i = 0; i < 1000; ++i )
    { …
Run Code Online (Sandbox Code Playgroud)

c++ performance stl priority-queue multiset

9
推荐指数
1
解决办法
3746
查看次数

为什么优先级队列的默认初始容量为11

Java文档指定 Creates a PriorityQueue with the default initial capacity (11) that orders its elements according to their natural ordering.

我试图理解为什么?11的优点是什么?

java priority-queue

9
推荐指数
0
解决办法
1311
查看次数

如何根据Element属性从PriorityQueue中删除元素?

我试着Maximum Waiting Time进入我的内心PQueue.这 Maximum Waiting TimePQueue自动检查我是否有任何links等待Maximum Waiting Time删除它.我对我的代码进行了这项更改,但它在删除链接后正好停止了.我想PQueue根据等待时间条件删除我的所有元素.你能告诉我这里缺少什么吗?

这是我的班级:

public class MyClass {

    public static PriorityQueue <LinkNodeLight> PQueue = new PriorityQueue <> (); 


    private static Set<String> DuplicationLinksHub = new LinkedHashSet <> ();         

    private static Integer IntraLinkCount = new Integer (0);                 
    private static Integer InterLinkCount = new Integer (0);                 
    private static Integer DuplicationLinksCount = new Integer (0);     
    private static Integer MaxWaitTime = new Integer (60000); // 1 M= …
Run Code Online (Sandbox Code Playgroud)

java search priority-queue

9
推荐指数
1
解决办法
820
查看次数

如何更新堆中的元素?(优先队列)

使用最小/最大堆算法时,优先级可能会发生变化.处理此问题的一种方法是删除并插入元素以更新队列顺序.

对于使用数组实现的优先级队列,这可能是一个似乎可以避免的性能瓶颈,特别是对于优先级变化较小的情况.

即使这不是优先级队列的标准操作,这也是一个可以根据我的需要进行修改的自定义实现.

是否有众所周知的最佳实践方法来更新min/max-heap中的元素?


背景信息:我不是二叉树专家,我继承了一些代码,这些代码在优先级队列中重新插入了元素.我为重新排序新元素的min-heap做了一个重新插入函数 - 这给了一个可测量的改进(删除和插入),但这似乎是其他人可能已经解决的更优雅的问题办法.

我可以链接到代码,如果它有所帮助,但宁愿不太关注实现细节 - 因为这个Q&A可能保持一般.

algorithm priority-queue insert-update min-heap

9
推荐指数
2
解决办法
1万
查看次数