我正在清理遗留代码。在里面我有一个优先级队列从1986 ^ _ ^。 将它与C ++接口连接后,越来越不符合std。我在“市场”(std + boost)上的所有priority_queues之间做了一些基准测试。
Boost提供priority_queue名称boost::d_ary::heap
。这个队列需要一个名为boost::heap::arity<int>
的参数,Boost的文档没有提供明确的解释,只是链接到堆的实现。
现在我把boost::heap::arity<128>
我真的很满意,但我不知道它是什么意思。你们其中一个,有一点解释?
答案 0 :(得分:3)
优先级队列通常实现为heaps。堆是完整的树,顶部的部分顺序。这种完整的树通常存储在阵列中。 arity描述了树的每个节点最多有多少个孩子。对于两个arity,树是二叉树,依此类推。从抽象的角度来看,对应于堆的树的深度大约为log(n)/log(d)
(其中d
是堆的arity)。
堆的性能(理论上)取决于arity,实际上最重要的是缓存效率。您应该运行一些基准来测试性能。我认为128的值相当高,我个人使用的范围从2到16。