用于处理二叉搜索树中的重复键的性能规范

时间:2015-02-02 18:48:13

标签: c++ algorithm boost stl

我正在阅读算法简介这本书,寻找在二叉搜索树中处理重复键的最佳方法。

此用例提到了几种方法:

  1. 在节点x:b处保留一个布尔标记x,并根据{{x的值设置x:leftx:rightx:b 1}},每次我们在FALSETRUE之间交替 插入与x相同的密钥的节点时访问x

  2. x保留一个具有相同键的节点列表,并将'插入'到列表中。

  3. x随机设置为x:leftx:right

  4. 我了解每个实现都有自己的性能命中/未命中,而STL可能与Boost Containers的实现方式不同。

    C++11规范中提到的性能限制是否是处理重复密钥的最差时间性能,例如multimap

1 个答案:

答案 0 :(得分:0)

就插入/删除时间而言,2总是更好,因为它不会增加树的大小,并且在插入或删除副本时不需要进行复杂的结构更改。

如果副本数量很少,则选项3是最佳空间。

选项1将需要存储1个额外的信息(在大多数实现中需要2个字节),但与1相比,树的高度将是最佳的。

TL; DR:实施2有点困难,但如果重复数量很大,则值得。否则使用3.我不会使用1.