2016-09-08 5 views
0

今朝はquestionに遭遇しました。"int"から対応する順列値へのマッピング?

基本的には、6つの値の順列を作成しなければならないデータに関する質問です。 1からだから38

の範囲の各々は、第一の順列は、それぞれから数えて、

1 1 1 1 1 1  [ permutation 1 ] 
1 1 1 1 1 2  [ permutation 2 ] 
1 1 1 1 1 3... [ permutation 3 ] 

はずっと後

38 38 38 38 38 38 [ permutation 38^^6 ] 

出力は単に6つのネストされたループによって生成されると終了するであろう1~38;最も内側のループ内に6つのループカウンタを出力します。

今、私はその背後にある数学について疑問に思います。そして好奇心のうちする:何

  1. おそらくより興味深い任意の順列所与「順列インデックス」、計算することを「関数」であろう:「インデックス」をとり、例えば102382;対応する並べ替え出力を教えてください

何か考えている人は?

+3

値を再利用できるのですべてのポジションは、単純に値の "ベース39"フォーマットではありませんか? 0を使用できない場合はBase 38、 –

+0

の順列は1からNの順番で定義されます。ちょうど –

答えて

3

これは、ベース(バイナリ、8進または16進)の変更とまったく同じように機能します。 最初の1つの質問: 1 * 38^6 + 2 * 38^5 + 3 * 38^4 + 4 * 38^3 + ... + 6 * 38^0 第2の逆は 102382 mod 38は...再帰的 UPDATE は、私たちがベース2に10を変更したいと仮定しましょう:

10/2=5 remainder(modulus) **0** 
5/2=2 remainder   **1** 
2/2=1 remainder   **0** 
1/2=0 remainder   **1** 

後方 一般的には、ちょうどBでMを分割し、ベースBに変更するためにMを与えています残りの部分は新しいベースの数字になります

+0

と言っています。もしあなたが "逆"をもう少し展開しても構わないのですか?たぶんupvotingだけでなく、あなたの答えを受け入れるでしょう;-) – GhostCat

+0

これはベースの変更のためのアルゴリズムです。 9を2進数に変換したいと仮定しましょう。文字列は後方に構築されます。だから我々は始める: – jurhas

関連する問題