• 締切済み

最適円順列を求めるアルゴリズムについて教えてください

ExcelのVBAでプログラムを作っているのですが、ある問題で   つまづいてしまいました。     問題は、30個のデータ(#1~#30とします)を円順列で   並べます。 (#1=10とか#18=24などの数値が入ります)   その場合の組み合わせは29!通りありますよね   そして、この組み合わせそれぞれである計算をさせます。   (ベクトル計算のようなものです)   その答えのもっとも最適な結果(今回の場合最小)が出る   組み合わせを見つけ出したいのです。   最適結果を導き出すアルゴリズムをご指導下さいお願いします。             

みんなの回答

回答No.2

データは円周上に等間隔で配置されるということでいいんですね?部分問題に分割できるなら分枝限定法や動的計画法の適用が考えられるんですが、どうも私にはうまい分割方法がわかりません。 むしろ、重心を中心になるべく近づけるという問題は、貪欲法でもうまくいきそうな気がします。この場合の貪欲法は、 1. まず適当にならべる。 2. すべてのデータのペアについて、それを交換したらどれだけ重心のずれが減るか求める。 3. どのペアを交換しても減らなければ終了。そうでなければ最もずれの減るペアを交換。 4. 2にもどる。 です。 もっとも、この方法で常に真の最適解が得られることを保証するには、ペアの交換では改善できなくて、3個以上のローテートで改善できるような例が存在しないことを証明しないといけませんが、私には荷が重いので他の方に譲ります。このカテゴリではなく数学あたりのカテゴリで、それなりのタイトルと定式化をすれば、回答があるかもしれません。

konatumatu
質問者

お礼

ありがとうございました。 回答していただいた内容から非常に 難しいことがよくわかりました  本人もっと簡単に考えていました…(^^ゞ ご指摘いただいたように、ほかのカテゴリで 質問してみます。  

回答No.1

29!通りの組み合わせのうち、最適なものをみつけたいということですね? どんな計算をして最適かどうかを決定するかがわかりませんが、一般には効率のよい方法はありません。最悪の場合、しらみつぶしということになり、人類が存在するうちに計算が終わらないでしょうね。 その最適を判断する計算の内容によっては、効率のよい方法や近似的な方法があるかもしれません。計算内容や近似解の可否を補足してもらえれば、なんらかのアドバイスもできるかもしれませんが。

konatumatu
質問者

補足

そうですね、しらみつぶしに探すとなると非常に大変です。 計算する内容は、たとえば、それぞれのデータが重さだったとします それを円形に並べた時に、それぞれの重さのバラつきによって重心が 円の中心からずれますよね、このずれが一番小さいものはどの組み合わせ なのか見つけ出すというような問題です。 どうかよろしくお願いします。

関連するQ&A

  • VBAで順列を表現する方法

    VBAによる順列の表記の仕方を教えてほしいです。 例えばn個の数値から2つの要素を並べる順列nP2の場合、1番目に選んだ数値が2番目の順列の選択候補から外れ、1番目と2番目の数値を順列として表示するようなVBAを組みたいです。 つまり同じ数字を2回以上使わないnPm(m≧2)という順列を作成したいのです。 どのようなプログラムを組めばよいか教えてください。

  • 円順列の組合せで最適値を求めたいのですが...

    こまっています。どなたか教えてください。 プログラムで下の問題を解こうと考えていたのですが... 問題は、30個の重さの違う(ばらつきの範囲は平均から10%程度) 物を円形に(均等に)並べます。その時の円の中心と重りの組合せ による重心がもっとも近いものを求めたいのです。 ベクトルの合成で一番小さくなる組合せと考えていただいて いいと思います。 組合せは29!通りあるのはわかるのですが... どのように計算して(考えて)いけばよいか見当もつかず困っています。 どうかよろしくお願いします。

  • アルゴリズムの信頼性を高くするためには?

    アルゴリズムの信頼性は、非常に重要な条件だと言われており、人間みたいに計算機が間違うことはほとんどありませんが、アルゴリズムの欠陥で「動作しなくなった」「間違った答えを表示する」等の結果的に間違った答えを出力することがあります。 そのようにならないようにプログラム及びアルゴリズムの信頼性を高くするにはどうすれば良いのでしょうか? よろしくお願いします。

  • 順列について

    簡単な問題なんだろうけど、答えが合わないです。。 順列のところで、3cm、5cm、7cm、8cm、10cmを 使って、異なる種類の三角形は、何通りできるか? という問題です。 答えは、7種類です。 組み合わせを考えると、9種類になるんですが、 なぜ7種類になるのでしょうか? すいませんが、教えて下さい(>_<)

  • 組み合わせと順列 アルゴリズム

    こんにちは 組み合わせと順列についてです。 順序関係のある要素で構成される集合から一定の数をとり、順列を辞書順で生成する方法がわかりません。 うまく説明できないので、例を示します。 たとえば26文字のアルファベットから4文字を選んで辞書順に生成するプログラムはどのようにやればいいのでしょうか? このアルファベットの例だと abcd abce abcf ・・・ abcz abdc abde ・・・ zyxw のようになると思います。 要素と長さが決まっている場合で順列を生成する部分は大丈夫です。(C++ STLのnext_permutationにあたる部分) 一応自分なりに考えたやり方は26進数4桁のように考えて、それを1ずつ増やし、全体で2回以上使われていないかを調べる と思ったんですが、あまりスマートじゃないし要素がとびとびのアルファベットのときなどに応用が利かないと思いました。 指摘していただければ補足しますので、よろしくお願いします。

  • 円順列の問題

    円順列の問題で分からない問題があります。 ・10人を2つのグループに分ける方法は何通りあるか。 答えは511通りなのですが…。これは1人も入らない場合はないのですよね。 回答お願いします。

  • 組み合わせ問題のアルゴリズム

    あらかじめ用意された整数を足して、その合計がある指定された整数と等しくなる組み合わせの数を調べるプログラムを書こうとしているのですが、苦労しています。 具体例がないと伝わりにくいかもしれないので例をあげると、 例えばあらかじめ用意された整数というのが 1・1・2・2・5・8 の4つで、 指定された整数が10である場合は、 8と2 8と1と1 5と2と2と1 という3通りの組み合わせがあるので、3を出力したいというわけです。 今まではもっと単純なアルゴリズムしか考えてこなかったので、こういった組み合わせのような問題が難しく感じられます。 こういう場合、アルゴリズムはどのようなものが考えられるでしょうか。 よろしくお願いします。

  • 円順列の問題で…

    7人から4人が選ばれて円形に並ぶ方法は何通りあるかという問題で、 7人から4人選ぶ場合は7P4通りで円順列として同じものが4つあるから 場合の数は 7P4/4=210通りというのはわかるのですが、 別解で組合せを使うと7C4×3P3となるあるのですが、一体3P3という数字はどう考えれば出てくるのでしょうか?

  • 確率で組み合わせと順列の考え方について

    1から9までの中から無造作に3種類の数字を選び、 3桁の数を作るとき、その数が3の倍数である確率を求めよ。 という問題で、答えでは組み合わせと順列どの考え方でも解けるそうですが、 組み合わせの解法しか載っていません。順列での解法を教えて下さい。 というかそもそも、組み合わせの解法はどの様な考え方なのでしょうか? 答えは3の倍数を作るために1-9の数を369.158.247でグループ分けをしてましたが、 組み合わせの考えだと区別しないんですよね?それってグループ内を区別してないのか、全ての数字を区別していないのか、よく分かりません。。。 よろしくお願いします。

  • 組み合わせでも順列でも解ける(?)問題

    赤シール2枚、青シール3枚、白シール2枚を添付図のような場所に1枚ずつ張るとき、全部で何通りの貼り方ができるか? 順列で解くと 7!/(2!3!2!) ですよね 組み合わせの 7C2・5C3・2C2 でも答えが出てくるのですが、単なる偶然ですか? たしか、組み合わせと順列のどちらでも解ける問題があったような気が・・・

専門家に質問してみよう