boost::heap::arity,这是什么?

boost::heap::arity, what is it?

我正在清理遗留代码。里面我有一个1986年的优先队列^_^。 在将它与 C++ 接口连接后,它越来越不符合标准。我在 "market"(std + boost)上的所有 priority_queues 之间做了一些基准测试。

Boost 提供了一个 priority_queue 名称 boost::d_ary::heap。这个队列需要一个名为boost::heap::arity<int>的参数,Boost的文档没有给出明确的解释,只是对堆的实现做了一个link。

目前我把boost::heap::arity<128>我真的很满意,但我不知道它是什么意思。你们中的一位,有什么解释吗?

通常优先级队列实现为heaps。堆是具有部分顶部顺序的满树。这样一棵完整的树一般存储在一个数组中。 arity 描述了树的每个节点最多有多少个 children。对于二元数,树是二叉树,依此类推。从抽象的角度来看,对应于堆的树的深度大约为 log(n)/log(d)(其中 d 是堆的数量)。

堆的性能确实(理论上)取决于数量,实际上最重要的是缓存效率。您应该 运行 一些基准来测试性能。我觉得128这个值比较高,我个人使用2到16的范围。