我正在清理遗留代码。里面有一个1986年的优先队列^_^。 将其与 C++ 接口(interface)连接后,越来越不符合标准。我在“市场”上的所有优先级队列之间做了一些基准测试(std + boost)。
Boost提供了一个priority_queue名称boost::d_ary::heap
。此队列需要一个名为 boost::heap::arity<int>
的参数,Boost的文档并没有提供明确的解释,只是提供了堆实现的链接。
目前我输入boost::heap::arity<128>
我真的很满意,但我不知道这意味着什么。你们中的一位能解释一下吗?
最佳答案
优先级队列通常实现为 heaps 。堆是顶部有部分顺序的完整树。这样的完整树一般存储在一个数组中。数量描述了树的每个节点最多有多少个子节点。对于二元数,树是二叉树,依此类推。从抽象的角度来看,对应于堆的树的深度大致为 log(n)/log(d)
(其中 d
是堆的数量)。
堆的性能(理论上)取决于数量,实际上最重要的是缓存效率。您应该运行一些基准测试来测试性能。我认为128的值相当高,我个人使用的范围是2到16。
关于c++ - boost::heap::arity,它是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38612377/