相对于使用堆,使用带有 insert() 的向量作为优先级队列的开销是多少? (c++)

Posted

技术标签:

【中文标题】相对于使用堆,使用带有 insert() 的向量作为优先级队列的开销是多少? (c++)【英文标题】:Is the overhead for utilizing a vector with insert() as a priority queue relative to utilizing a heap? (c++) 【发布时间】:2020-03-04 19:50:09 【问题描述】:

我目前正在从事一个项目,在该项目中我实现了一个结构指针向量以用作优先级队列。我使用 for 循环来确定向量中的位置(如果不小于后面),然后使用 insert() 将结构指针放置在队列中的位置。我使用back() 作为队列的前面,这样我就可以维护向量的弹出功能。

我只是想确定使用堆库是否会增加速度,因为这个项目取决于时间。如果您愿意,可以提供代码,堆/向量的大小可能会大大增加,因为这是 hanoi A* 搜索算法的塔。

我想如果有人知道的话,我也会询问未来的知识,以便为我节省一些调试断点洗牌。

【问题讨论】:

为什么不直接使用std::priority_queue?您的需求的哪些部分导致您自己实现它? 很难确定。 vector 的连续数据使得插入操作速度惊人。 std:priority_queue<T, std::vector<T>>也是如此 【参考方案1】:

我做了一个简单的基准测试,首先将N random ints 插入优先级队列,然后弹出N 顶部元素。

预计,当队列大小较小时,使用线性搜索排序的std::vector 会胜出,而std::priority_queue(实现为具有O(log N) 最坏情况插入时间的最大堆)会在队列大小很大时胜出.

可以在here找到基准代码。

【讨论】:

以上是关于相对于使用堆,使用带有 insert() 的向量作为优先级队列的开销是多少? (c++)的主要内容,如果未能解决你的问题,请参考以下文章

带有临时表的 RODBC::sqlQuery 提供空字符向量,尽管查询在 SSMS 中工作,较小的查询在相同的连接下工作

低秩矩阵填充|奇异值阈值算法

点与向量之间的相对角度

罗德里格斯相对于向量的一组点的旋转

相对于布局放置和移动一组带有 kivy 的图像

如何相对于角色复制带有ansible的文件?