class template
std::shuffle_order_engine(C++11)
namespace std {
template<class Engine, size_t K>
class shuffle_order_engine;
using knuth_b = …;
}
概要
shuffle_order_engineクラスは、乱数生成エンジンが生成する乱数を調整し、バッファリングされた乱数列からランダムに値を選択する生成器アダプタである。
テンプレートパラメータKは、バッファリングする乱数列のサイズである。
このアルゴリズムは、以下のような動作を行う:
- 元となる乱数生成器で、
K個の乱数を生成し、バッファリングする。
- 元となる乱数生成器を
e、最後に選択した乱数をYとした場合、式i = K * (Y - e.min()) / (e.max() - e.min() + 1)によって、選択位置iを決定する。
- バッファリングされた乱数列を
vとした場合、Y = v[i]とし、乱数列のi番目を選択する。
- 式
v[i] = e()で、使用済みの乱数を、新たな乱数で置き換える。
Yを生成した乱数として返す。
この生成器アダプタは、標準内においてはlinear_congruential_engineクラスと組み合わせて、KnuthのリオーダーアルゴリズムB(knuth_b)の実装に使用されている。
要件
K > 0であること。
メンバ関数
構築・シード
| 名前 |
説明 |
対応バージョン |
(constructor) |
コンストラクタ |
C++11 |
~shuffle_order_engine() = default; |
デストラクタ |
C++11 |
seed |
シードを設定する |
C++11 |
生成
エンジンの特性
| 名前 |
説明 |
対応バージョン |
base |
元となる乱数生成器を取得する |
C++11 |
静的メンバ関数
エンジンの特性
| 名前 |
説明 |
対応バージョン |
min |
生成し得る値の最小値を取得する |
C++11 |
max |
生成し得る値の最大値を取得する |
C++11 |
メンバ型
| 型 |
説明 |
対応バージョン |
result_type |
擬似乱数生成結果型 typename Engine::result_type。 |
C++11 |
メンバ定数
| 定数 |
説明 |
対応バージョン |
static constexpr size_t table_size |
バッファリングする乱数列の要素数。テンプレートパラメータK。 |
C++11 |
非メンバ関数
例
出力
16807
282475249
1622650073
984943658
1144108930
470211272
101027544
1457850878
1458777923
2007237709
282475249
16807
1457850878
984943658
1622650073
2007237709
1144108930
823564440
101027544
1458777923
出力結果から、線形合同法が生成する順番が適度に入れ替えられ、乱雑さが増加していることがわかる。
バージョン
言語
処理系