std::next_permutation 実装の説明
std::next_permutation アルゴリズムは、指定されたシーケンスの辞書順に次に大きい順列を計算します。その実装を理解することは、その動作を理解するために非常に重要です。
アルゴリズムの概要
アルゴリズムはシーケンスを右から左に反復して、一番左の「アセンダー」(つまり、 、後続要素よりも小さい要素)。アセンダーが見つからない場合は、シーケンスが降順であることを意味します。この場合、シーケンスを逆にして最小の順列を取得します。
それ以外の場合、アルゴリズムはシーケンスの右側にある最小の要素を見つけて続行します。アセンダー (「k」と呼ばれます) の。この要素はアセンダーと交換されます。最後に、アセンダーの右側の要素が逆になり、降順が維持されます。
変数の役割
ループ フロー
ループは、i がシーケンスの先頭 (begin) に到達するまで繰り返されます。各反復内で:
例
シーケンス {1, 2, 4, 3} を考えます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3