【问题标题】:boost::heap::arity, what is it?boost::heap::arity,它是什么?
【发布时间】:2016-07-27 12:01:26
【问题描述】:

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

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

现在我把boost::heap::arity<128>我真的很满意但我不知道这是什么意思。你们中的一个,有一点解释吗?

【问题讨论】:

    标签: c++ c++11 boost std


    【解决方案1】:

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

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

    【讨论】:

    • 太棒了!也许128个孩子有点太多了+1
    • “树通常嵌入到数组中存储” - 你的意思是“堆”吗?
    • 嗯,我的意思是上下文中的树哦,堆,现在修复它。
    猜你喜欢
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 2020-10-11
    相关资源
    最近更新 更多