我正在阅读算法简介这本书,寻找在二叉搜索树中处理重复键的最佳方法。
此用例提到了几种方法:
在节点x:b
处保留一个布尔标记x
,并根据{{x
的值设置x:left
为x:right
或x:b
1}},每次我们在FALSE
和TRUE
之间交替
插入与x
相同的密钥的节点时访问x
。
在x
保留一个具有相同键的节点列表,并将'插入'到列表中。
将x
随机设置为x:left
或x:right
。
我了解每个实现都有自己的性能命中/未命中,而STL
可能与Boost Containers
的实现方式不同。
C++11
规范中提到的性能限制是否是处理重复密钥的最差时间性能,例如multimap
?
答案 0 :(得分:0)
就插入/删除时间而言,2总是更好,因为它不会增加树的大小,并且在插入或删除副本时不需要进行复杂的结构更改。
如果副本数量很少,则选项3是最佳空间。
选项1将需要存储1个额外的信息(在大多数实现中需要2个字节),但与1相比,树的高度将是最佳的。
TL; DR:实施2有点困难,但如果重复数量很大,则值得。否则使用3.我不会使用1.