辞書の順序方式は、辞書ソートのアイデアに従って、すべての配置を1つずつ生成することです。
数学、辞書または辞書の順序(語彙順序、辞書順序、アルファベット順、または辞書順序としても知られています)は、アルファベット順に基づいてアルファベット順に単語が配置されたアルファベット順の方法です。この一般化は、主に、順序付けられた完全に順序付けられた要素のセット(多くの場合、アルファベットと呼ばれる)を定義する要素のシーケンス(しばしばコンピューターサイエンスでは単語と呼ばれることが多い)の合計順序を定義することにあります。
数字1、2、3 ... nの配置については、異なる配置のシーケンスは、対応する数値のシーケンスを左から右に1つずつ比較することによって決定されます。たとえば、5つの数字の12354と12345のアレンジメントの場合、12345のアレンジメントが前にあり、配置12354が背面にあります。この規則によれば、5つの数字のすべての配置の中で最初のものは12345で、最後のものは54321です。
たとえば、1、2、3で構成されるすべての配置は、小さいものから大規模です。
123,132,213,231,312,321
1、2、3、4で構成されるすべての配置:
1234、1243、1324、1342、1423、1432、
2134、2143、2314、2341、2413、2431、
3124、3142、3214、3241、3412、3421、
4123、4132、4213、4231、4312、4321。
まず、指定された文字セットの一連の文字を指定する必要があり、これに基づいて、各配置が順番に生成されます。
[例]文字セット{1,2,3}、より小さな数字が最初になるため、辞書順序で生成される完全な配置は、123、132、213、231、312、321です。
完全な順列を与えられた次の順列を生成すると、いわゆる次の順列は、辞書順序のない次の文字列に隣接する文字列です。これには、これが次のプレフィックスと可能な限り同じ接頭辞を持っていること、つまり、バリエーションは可能な限り短い接尾辞に限定される必要があります。
後者の配置と以前の配置の間には、一定の関係があります。後者の配置のソリューションプロセスは次のとおりです。
辞書でソートされたアレンジメント(p)= 2763541で、次のアレンジメントは何ですか?
2763541(最後の肯定的な注文を見つける35)
2763541(3後に最後の番号4を見つけ、3より大きい)
2764531(スイッチ3、4位)
2764135(5、3、1 4後)
以下は、P [1…n]の次の配置の説明です。
i = max {j |を見つけますp [j 1] <p [j]}(最後の肯定的な順序を見つける)
j = max {k |を見つけますp [i 1] <p [k]}(pよりも大きい最後のものを見つける[i 1])
交換p [i 1]およびp [j]はp [1]…p [i-2] p [j] p [i] p [i+1]…p [j-1] p [i-1] p [j+1]…p [n]を取得します。
p [j]の後に数を逆転させてp [1]…p [i-2] p [j] p [n]…p [j+1] p [i-1] p [j-1]…p [i]
コードの実装は次のとおりです。
private static int [] getPermutation(int [] in){int [] ns = in; int base = -1; (int i = ns.length-1; i> = base; i-){if(ns [i]> ns [base]){bigger = i; break;}} // system.out.println(bigger); swap(ns、base、bigger); reverse(ns、base+1、ns.length-1); return ns;左= i、右= j; while(左<右){swap(ns、左、右);左++;右 - ;}} private static void swap(int [] ns、int base、int bigger){int temp = ns [base]; ns [base] = ns [bigger]; ns [bigger] = temp;}要約します
上記は、Java言語辞書のソートアルゴリズムとコードの例の分析に関するものです。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!