- C++相談室 part116 [転載禁止]©2ch.net
332 :デフォルトの名無しさん[sage]:2015/03/26(木) 17:08:05.75 ID:BDjvcE7V - n桁のm進数の桁を入れ替えるプログラムを作りたいのですが、どうしたら効率的でしょうか。
桁数分(n個)ループを回すような愚直な方法しか思い付きません。 任意の並び替えを実現したいのですが、「○桁目を右に△個ずらす」ようなアルゴリズムでも構いません。 それを何回かやれば任意のケースに対応できると思うので。 nは16まで、mは64までに限っても良いです。
|
- C++相談室 part116 [転載禁止]©2ch.net
337 :デフォルトの名無しさん[sage]:2015/03/26(木) 18:25:41.64 ID:BDjvcE7V - 自分で言うのもなんですが>>332に書いた愚直な方法だとコストはO(m^n)で最悪ですね。
|
- C++相談室 part116 [転載禁止]©2ch.net
342 :デフォルトの名無しさん[sage]:2015/03/26(木) 20:10:26.73 ID:BDjvcE7V - もし、任意の入れ替えを諦めてサイクリックな置換にだけ対応しようとしたらコスト減らせたりするでしょうか。
例えば8桁の abcdefgh を ghabcdef に入れ替えるようなケースです。
|
- C++相談室 part116 [転載禁止]©2ch.net
343 :デフォルトの名無しさん[sage]:2015/03/26(木) 20:19:07.25 ID:BDjvcE7V - 配列要素全部を入れ替えようとしなければ>>340で一発ですかね?
ちょっと考えてみます。
|