『アルゴリズムコンテスト入門経典』第七章7.1,7.2,7.3(総括)


7.1一般的にaを求めると、bはh(a,b)=kを満たし、kは固定的な関数であり、aを列挙し、kでbを逆方向に求めることで、1つのサイクルを減らすことができ、2つ以上の場合は同じである.1.テクニックまとめabcdefghを求めて相補的に等しいかどうかを判断すると、0~nからそれぞれ対応し、0~nからi=a[i]を1対1対ずつ判断することで、それぞれが存在するかどうかを判断し、結果を導く.2.できるだけ除算表示の関係を乗算に変換し、intカットを避ける
7.2
重複する配列と重複しない配列を生成するには、c++ライブラリのnext_を使用します.牙列缺损
sort(p,p+n)
do
{
}while(next_permutation(p,p+n)

彼の原理はpを辞書順に増加するたびにdo whileを用いて1234...nという処理を行う.すべての配列が得られ,1回の変化後に前回のシーケンスと同様に変化し続けることが分かった.
手書きのアルゴリズム、繰り返し不可能なタイプの原理はif(cur=n)なら出力して、else(必ずなくさない){再帰}
重複がある場合はc 1,c 2で成長を続けるか否かを判断する
出力時にif(!i||p[i]!=p[i-1])の繰り返し出力を避けるために1番目のみ出力
7.3 1.インクリメンタル構造法は,前より1つ大きいものを毎回入れることで,最終出力順序は辞書順に並べられる.
テクニック:シーケンスを決めて、{1,2},{2,1}を小さいから大きいまで並べて、このように1つの{1,2}だけを出力します;
2.ビットベクトル法でノードがインクリメンタル構造法より多いのは、すべてのBに対応するAを判断して出力する必要があるため、無効な状態が多いが、ほとんどのノードが最後の1、2階にあることが明らかである.
3.バイナリ法は簡単ですが、1<