std::next_permutation 実装の説明
std::next_permutation アルゴリズムは、指定されたシーケンスの辞書編集的に次に大きい順列を計算します。その実装を理解することは、その動作を理解するために非常に重要です。
アルゴリズムの概要
アルゴリズムは、シーケンスを右から左に反復して、左端の「アセンダー」 (つまり、 、後続要素よりも小さい要素)。アセンダーが見つからない場合は、シーケンスが降順であることを意味します。この場合、シーケンスを逆にして最小の順列を取得します。
それ以外の場合、アルゴリズムはシーケンスの右側にある最小の要素を見つけて続行します。アセンダー (「k」と呼ばれます) の。その後、この要素はアセンダーと交換されます。最後に、アセンダの右側の要素が降順を維持するために反転されます。
変数の役割
ループ フロー
ループは、i がシーケンスの先頭 (begin) に到達するまで反復されます。各反復内:
例
シーケンス {1, 2, 4, 3} を考えます。 .
以上がstd::next_permutation アルゴリズムは、辞書編集的に次に大きいシーケンスの順列を見つけるためにどのように機能するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。