【发布时间】:2012-01-08 06:56:26
【问题描述】:
This question 添加了约束。
我愿意允许不统一的选择,只要不偏向一边。
鉴于“sets are typically implemented as binary search trees”并且我希望它们包含某种深度或大小信息以进行平衡,我希望您可以对树进行某种加权随机游走。但是我不知道有任何远程便携的方式来做到这一点。
编辑:约束不适用于摊销时间。
【问题讨论】:
-
现在这是一个有趣的问题,但 我 会将它作为平衡树的一个特性来实现,这对于库实现来说很难做到。
-
std::set未定义为 bstree。它的复杂性要求本质上意味着它不能是其他任何东西,但树结构不是标准的一部分,因此也不是接口的一部分。 (如果你有一个实际的平衡树,你可以在 O(log n) 中随机选择一个元素,方法是随机选择左子或右子,直到你在底部。)也许应该为下一个建议一个random()接口标准;毕竟,已经有了random_shuffle算法,这也不例外。 (顺便说一句,您可以在 O(1) 中对std::unordered_set进行操作。) -
@KerrekSB:也许选择左、右或停止,所以至少每个元素都有机会。
-
@GMan:是的,当然,谢谢!必须相应地调整概率。
-
看来我得等 C++2x 中的
random()接口了。
标签: c++ set stl-algorithm