【问题标题】:What is `shuffle_order_engine` for?`shuffle_order_engine` 是干什么用的?
【发布时间】:2015-10-03 15:02:29
【问题描述】:

我想编写一个随机播放向量的代码行。自动完成建议shuffle_order_engine,这让我很好奇它是什么,因为它的名字暗示它可以满足我的需求。

通常我用std::shuffle(std::begin(v), std::end(v), gen) 打乱一个向量,其中gen 是随机数生成器(通常是mt19937_64)。

http://www.cplusplus.com/reference/random/shuffle_order_engine/sais,那个shuffle_order_engine是:

适配伪随机数的引擎适配器类模板 发电机引擎类型,以便数字以不同的方式交付 顺序。

嗯,cplusplus.com 没有提供示例。 shuffle_order_engine 和我的 shuffle 收养一样吗?

【问题讨论】:

    标签: c++ c++11 random shuffle


    【解决方案1】:

    不完全是。它缓冲伪 rng 的输出并返回接下来的几个结果中的任何一个,而不是下一个。与如果您请求相同大小的向量并用该序列填充它,然后对其进行洗牌相比,结果是相似的,但排列分布略有不同。 (我认为。)

    如果你想要的是一个打乱的随机序列,那么当然可以。为什么要重新发明轮子?

    【讨论】:

      【解决方案2】:

      C++ 的 shuffle_order_engine 实现了类似于 Bays-Durham shuffle 的东西,而 Bays-Durham shuffle 旨在提高弱随机数生成器的随机性质量,不一定要表现得与列表的随机洗牌。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-30
        • 2017-11-03
        • 2014-12-20
        • 2021-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多