不自然で強引な…

  • _Kyle(1291004)
  • 2012/09/19 (Wed) 21:24:05
 # 画像はかなり違う気が… (ーー;)

ボツ回答シリーズです。

日の目を見ることがなかった
「不自然で強引な解決」や「急場しのぎの解決」
はコチラで供養することに。

---------------------------

「"不自然"とか"強引"とかいう以前に、
 回答しなきゃ"解決"にならないぢゃん」

って突っ込みはナシの方向で…^^;;;;

qa7697154 :(10) りふぁくたりんぐ3

  • _Kyle(1291004)
  • 2012/09/29 (Sat) 14:52:06
■k0CLC_t10
http://cdvba.bbs.fc2.com/?act=reply&tid=3595424#c6803039

続けてりふぁくたりんぐって… (ーー;)

ぃゃ、修正小出しにして記事数稼いでるとか、
そういうハナシではナクテ (^^;;;;;;;;

 # そもそも記事数稼ぐインセンティブないし。^^;;
 # そもそも読む人いないしwww orz 

テスト終わるのをじっと正座して待ってるわけぢゃないけど、
それでもやっぱ、コード眺めてる時間が結構あるわけで。
コード眺めてると、やっぱいろいろアラが目に付くわけで。
なにしろン十億回とか回すから、ちょっと直すだけで速くなったりするわけで。
速くなると、やっぱタイム測ってみたくなるわけで。

あと、マメに動作テストしないと、
いったんバグっちゃうとデバグ難しいというのもあったり。

なにしろン十億回とか回すから、
ステップインで挙動追ってみるわけにもいかんしね。
ウォッチウィンドウで配列開いてみたところで、
合ってるかどうか目視では判断できんしね。

バグでなくても、修正のしようによっては
「要素数少ない場合は速くなるのに、要素数多い場合はかえって遅くなる」
みたいなこともあるしね。

で、動作テストするとなると
下位バージョンと並べて何度も走らせるしか
検証のしようがないという… orz

そんなわけで、再帰回数は今回も変化ナシ。 orz

でも速くなった \(^o^)/

 # ロジックレベルの改良も、
 # とりあえずあと【2つ+α】予定してマス。一応。

---------------------------

◆スコア

http://abyssinia2010.web.fc2.com/qa7697154/t10score.txt

要素20対 試行7
 t09 595ms
 t10 539ms

要素21対 試行7
 t09 1,030ms
 t10  933ms

要素22対 試行6
 t09 2,904ms
 t10 2,601ms

要素23対 試行10
 t09 1,272ms
 t10 1,119ms

要素24対 試行1
 t09 1,794ms
 t10 1,531ms

要素25対 試行4
 t09 2,404ms
 t10 2,159ms

要素26対 試行2
 t09 5,986ms
 t10 5,212ms

要素27対 試行1
 t09 5,099ms
 t10 4,356ms

要素28対 試行7
 t09 5,975ms
 t10 5,174ms

要素29対 試行1
 t09 11,589ms
 t10  9,876ms

 ココまで10秒以内でクリア \(^o^)/

要素30対 最長  12,433ms
要素31対 最長  21,020ms
要素32対 最長  35,088ms
要素33対 最長  49,823ms
要素34対 最長  30,188ms ココまで1分以内。
要素35対 最長  63,084ms
要素36対 最長  78,894ms
要素37対 最長 198,796ms 3分
要素38対 最長 182,516ms 3分
要素39対 最長 320,033ms 5分

 ココまで10分以内。

要素40対 最長  211,920ms 3分半
要素41対 最長  654,595ms 11分
要素42対 最長  546,137ms 9分
要素43対 最長  499,609ms 8分
要素44対 最長 1,010,537ms 17分
要素45対 最長 2,284,109ms 38分
要素46対 最長 3,314,226ms 55分 きわどい (ーー;)
要素47対 最長 3,029,152ms 50分
要素48対 最長 2,427,712ms 40分 未知の領域へ…
要素49対 最長 3,162,405ms 53分 40台クリア \(^o^)/

要素50対 最長 17,816,531ms 【5時間】 orz

ん~、50の壁が…。

---------------------------

つぎいってみよ~♪

qa7697154 :(**) t09速すぎ疑惑?

  • _Kyle(1291004)
  • 2012/09/28 (Fri) 00:51:03
 # 書いたタイミングはほぼ1日空いてるんだけど
 # 上げるタイミングはなぜか一緒という…。
------------------------------------------------------

疑惑…つか、自分で不安になってきたので(汗

http://abyssinia2010.web.fc2.com/qa7697154/t09test.txt

ご覧のとおり、いちおーあってる模様。
移動数が多くなってくると、検証しようがないけどね。

-------------------

ちなみに、最小値をとる解が複数ある場合には
バージョンによって異なる解(別解)を見つけてくることはアリマス。

それから、移動数の増加に対して、総コストの増加が小さいのは
部屋数一定の状態で、移動数だけ増やした場合
【 出す側も入れる側も選択肢が増えるので 】
ほとんどの机について、最も近い部屋に入れることができて、
「移動39のうち29がコスト1」とか、そういう状況になるからです。

qa7697154 :(09) りふぁくたりんぐ2

  • _Kyle(1291004)
  • 2012/09/28 (Fri) 00:37:32
■k0CLC_t09
http://cdvba.bbs.fc2.com/?act=reply&tid=3595424#c6803038

ごめん、t08の実装はいくらなんでもぐだぐだ過ぎた模様 orz

ちょっと直したら、再帰数変わらずで、所要時間半減。
コーディングってやっぱ大事よね (^^;;;;;;;;;;;

 ※ちなみに、Currency型でビット演算ってのも試してみたけど
  桁が多い場合、String型をピンポイントでいじる方が速いデス。

   # でも「戻し処理」は、MIDでそこだけ戻すより
   # まるっと退避して上書きした方が速いのよね。(ーー;)

 ※それから、予備処理の部分は相変わらずぐだぐだですけど
  移動数100でも150msなので、大勢に影響ないデス。

---------------------------

◆スコア

http://abyssinia2010.web.fc2.com/qa7697154/t09score.txt

要素20対 試行9
 t08 1,529ms
 t09  474ms

要素21対 試行7
 t08 7,072ms
 t09 1,645ms

要素22対 試行5 
 t08 4,975ms
 t09 1,471ms

要素23対 試行9 
 t08 12,276ms
 t09  2,163ms

要素24対 試行9 
 t08 10,399ms
 t09  2,137ms

要素25対 試行8 
 t08 33,484ms
 t09  3,806ms

要素26対 試行7
 t08 42,897ms
 t09  3,841ms

要素27対 最長  6,222ms
要素28対 最長 14,397ms
要素29対 最長 10,833ms

要素30対 最長 19,385ms 30まで1分未満できたよ! \(^o^)/
要素31対 最長 24,158ms
要素32対 最長 28,853ms これは結構いけるかも?
要素33対 最長 34,585ms まだまだいけそう!
要素34対 最長 81,275ms
要素35対 最長 127,367ms
要素36対 最長 156,836ms
要素37対 最長 151,114ms
要素38対 最長 114,212ms
要素39対 最長 463,002ms 8分

要素40対 最長  412,221ms 7分 大台(?)乗った \(^o^)/
要素41対 最長  580,702ms 10分
要素42対 最長  675,746ms 11分 
要素43対 最長  695,819ms 12分 このまま行くのか!? (@_@;)
要素44対 最長 1,116,480ms 19分
要素45対 最長 2,610,656ms 44分
要素46対 最長 1,275,916ms 21分 まだいけるのか! (@_@;)
要素47対 最長 1,994,588ms 33分
要素48対 試行3:文字列領域が不足しています。(Error 14)

う~ん、そうきたか。^^;;;;;;;

しかし、この所要時間の推移はもしかして、
ブレークスルーしたっぽい???

 # いちおう、予定…つか、見込みとしては
 # 『(00) 状況把握』でちょろっと書いたように
 # 「計算量が"移動数"ではなく"部屋数"に依存する」
 # 状況になるハズなんだけれども…。

 # 「解が違う」ってオチはないよね?? (^^;;;;;;;;;;;

---------------------------

では改めて。

つぎいってみよ~♪

qa7697154 :(08) いつか来た道

  • _Kyle(1291004)
  • 2012/09/26 (Wed) 18:24:31
■k0CLC_t08
http://cdvba.bbs.fc2.com/?act=reply&tid=3595424#c6803037

「空き部屋の状態によってその後必要な労力が決まる」

日曜日に「エウレカ!」って叫んだのはコレね。

---------------------------

一応。

移動数をNとすると、
そもそもの「移動の仕方」は N! 【も】あるわけだけど
「空き部屋の状態」は 2^N 【しか】ない。

ある時点の「空き部屋の状態」とその時点のコストCを覚えておけば
同じ「空き部屋の状態」でかつコストがC以上ならアウトよね、というハナシ。

残りを埋めるのに必要なコストが同じなら、
不利な状態から続けて勝てるわけがない。

---------------------------

気付いてみりゃ当たり前のハナシだけどね (^^;;;;;;

最初から「なんとかメモ化できないかなぁ」って思ってたんだけど
覚えるべき局面が複雑すぎて詰まってたのよね。

 # ちなみに、この実装は「メモ化」ぢゃないけどね。

 # 底まで見てるわけぢゃないから、
 # 「今後どれだけのコストが必要か」を把握するのは困難。
 # 枝刈らずに底まで舐めるならやれるけど、
 # N!を2^Nまで落とせたとしても、それはそれで大きな数だしね。

---------------------------

で、注目のスコアは…

◆スコア

http://abyssinia2010.web.fc2.com/qa7697154/t08score.txt

\(^o^)/

要素13対 
 最短  38msec.
 最長 120msec.

要素14対 
 最短  66msec.
 最長 159msec.

要素15対 
 最短  47msec.
 最長 224msec.

要素16対 
 最短  70msec.
 最長 916msec.

 ※試行2
   t07が2分以上かかってる課題を1秒足らずで片付けてるのって凄くない?

要素17対 
 最短 108msec.
 最長 596msec.

要素18対 
 最短 86msec.
 最長 814msec.

 ※試行2
   t07:7分を725ミリ秒でクリア
 ※ここまでオール1秒未満 \(^o^)/

要素19対 
 最短  122msec.
 最長 1,579msec.

 ※試行1
   t07:58分を1.5秒でクリア \(^o^)/

要素20対 
 最短  164msec.
 最長 2,260msec.

 ※初めて2秒超えた。 

要素21対 最長  3,870msec. 3秒超えた。
要素22対 最長  3,917msec.
要素23対 最長  11,838msec. いきなり11秒超え。 むぅ。
要素24対 最長  8,281msec.
要素25対 最長  53,075msec. 1分弱。(ーー;) 
要素26対 最長  36,741msec. 
要素27対 最長 178,488msec. 3分 でも、増え方はおとなしいよね。 
要素28対 最長 348,723msec. 6分 (わたし基準では)まだいけるけど…
要素29対 最長 240,920msec. 4分
要素30対 最長1,291,579msec. 21分
要素31対 最長2,069,600msec. 35分
要素32対 最長1,616,548msec. 27分
要素33対 最長3,346,210msec. 56分
要素34対 最長4,959,475msec. 83分 限界突破。orz

-----------------------------

ん~、ジツをいえば、もっといけると思ってたんだけどなぁ…。

でも、まだ刈れるよね♪

 # つか、参照設定するだけでもかなり速くなるよね。
 # Removeとか、妙なことしてるし。

次いってみよー。

qa7697154 :(07) りふぁくたりんぐ?

  • _Kyle(1291004)
  • 2012/09/25 (Tue) 06:50:27
■k0CLC_t07
http://cdvba.bbs.fc2.com/?act=reply&tid=3595424#c6803036

りふぁくたりんぐ…するつもりがかえって饂飩になった orz

でも速くなった \(^o^)/

-----------------------------
◆スコア

http://abyssinia2010.web.fc2.com/qa7697154/t07score.txt

t06とt07でときどき逆転してるのは、探索順の違いです。

要素13対 
 最短  56msec.
 最長 700msec.

要素14対 
 最短  62msec.
 最長 6506msec.

要素15対 
 最短   39msec.
 最長 17,164msec.

要素16対 
 最短   36msec.
 最長 20,282msec.

要素17対 
 最短   104msec.
 最長 204,604msec. 3分半

要素18対 
 最短   209msec.
 最長 42,471msec.

要素19対 
 最短   50msec.
 最長 31,222msec.

要素20対 
 最短    40msec.
 最長 326,667msec. 5分半

要素21対 
 最短    110msec.
 最長 4,053,920msec. 68分 むぅ…。

要素22対 
 最短    140msec.
 最長 3,121,538msec. 52分 びみょーなセンが続くなぁ。

 ※22対でも、10回中6回は1分未満なんだけどね。
 ※ちなみに、元コードだと10億年くらいの課題w

-----------------------------

さて、次はいよいよ…♪

qa7697154 :(06) どれを出しても一緒 (v1.1)

  • _Kyle(1291004)
  • 2012/09/22 (Sat) 23:24:56
■k0CLC_t06
http://cdvba.bbs.fc2.com/?act=reply&tid=3595424#c6803035

「同じ部屋から出すなら、どれを出しても一緒よね」というハナシ。

元質の例でいうと、
A群5行目の部屋15から出すケースと、6行目の部屋15から出すケースを
区別する必要はないということです。

…なんですが…コレは饂飩というよりむしろ…えれふぁんとよね。 orz


でも速くなった \(^o^)/

-----------------------------
◆スコア

http://abyssinia2010.web.fc2.com/qa7697154/t06score.txt

 ※バージョン,所要時間(msec.),再帰回数,コスト,要素数

要素13対 
 最短  100msec.
 最長 3,262msec.

要素14対 
 最短   96msec.
 最長 23,120msec.

要素15対 
 最短   235msec.
 最長 12,708msec.

要素16対 
 最短    76msec.
 最長 503,095msec. 8分

要素17対 
 最短   215msec.
 最長 215,610msec. 4分

要素18対 
 最短    173msec.
 最長 2,638,790msec. 44分 う~ん。

要素19対 
 最短   713msec.
 最長 762,013msec. 13分

要素20対 
 最短    610msec.
 最長 5,622,867msec. 94分 実用限界超えた orz

  ※要素20対というのは、元コードだと【200万年】かかる課題です。
-----------------------------

次回、りふぁくたりんぐします。

qa7697154 :(05) どこに置いても一緒

  • _Kyle(1291004)
  • 2012/09/22 (Sat) 07:18:17
■k0CLC_t05
http://cdvba.bbs.fc2.com/?act=reply&tid=3595424#c6803034

「同じ部屋に入れるなら、どこに置いても一緒よね」というハナシ。

元質の例でいうと、
B群4行目の部屋6に入れるケースと、5行目の部屋6に入れるケースを
区別する必要はないということです。

…なんですが…饂飩になった。 orz

まぁ、元質の添付画像のように
事前にソートされてるならハナシは簡単なんですが…。

-----------------------------
◆スコア

http://abyssinia2010.web.fc2.com/qa7697154/t05score.txt
イミディエイトに吐いた生データです。

 # 結局、テキストファイルがいちばん見やすいよね。軽いしね。

ちゃんと…つか、圧倒的に速くなっとりますね。\(^o^)/

左から、
バージョン,所要時間(msec.),再帰回数,コスト,要素数

上から

 ・要素11対:t04と10回比較
   最長1081msec. 余裕です。

 ・要素12対:同じく
   最長 682msec. 楽勝です。 

 ・要素13対:t05単独10回 # t04と比較したら日が暮れるのでw
   最長 18,641msec. 実用範囲内?

 ・要素14対:同じく
   最長 24,411msec. まだいけます。

 ・要素15対:同じく
   最長 390,741msec. 6分半。う~ん。

 ・要素16対:同じく # 元コードだと【9年】かかる課題です。
   最長 606,035msec. 10分。昼休み中にはおわるけど…

ご覧のとおり、要素数(移動数)よりもむしろ、
最終的な移動コストが多いケースで時間がかかってます。

-----------------------------

で、次に何やるかはきっと予想ついてると思いますが
どう実装するかで結構悩んでたり。う~ん。

qa7697154 :(04) 近いものから試す+1

  • _Kyle(1291004)
  • 2012/09/21 (Fri) 21:18:43
■k0CLC_t04
http://cdvba.bbs.fc2.com/?act=reply&tid=3595424#c6803033

いきなり胡乱な感じになっちゃいましたが
ソートテーブル作ってる部分は
(時間があったら)そのうち直します^^;;;;;;;

-----------------------------

●近いものから試す

総当りの場合は、どうせ全部調べるのでどこから調べても一緒ですが
t03は総当りではないので

 【 見込みのありそうな枝から調べた方が賢いよね 】

というハナシ。

具体的には、出す部屋それぞれについて、
事前に近い部屋を順に覚えておいて
近い部屋から試す…というハナシなんですが、
実際やってみると速くならない。 (ーー;)

再帰回数は減るんですけどね、おおむね。
 # 確率論的な問題なので逆転することもアリ

ただ、子Pの
 in_Idx = outAry(outIdx, i)
この1文が意外に重くて、再帰回数の減りが相殺されちゃう感じです。
 # なにしろ、ン十億回×itmCnt とか回すので。

 # ソートテーブルの作り方がぐだぐだなのは
 # あんま関係ないです。
 # 要素20対でも40mse.程度なので。

なので…

-----------------------------

t05でやるハズだったのを一緒に入れちゃいました。

●固定費を事前に払い込む

t03は「その時点でのコストが暫定ベストを超えたらアウト」
なわけですが、実際のところ
「最初の辺で暫定ベスト近く」になっても実質アウトですよね。
残りの机を労力ゼロで運ぶことはできないので
どうしたっていずれ超えちゃう。

そこで
 「残りの机を運ぶのに最低限これだけのコストはかかる」
という数字を事前に積んでおいて
その分をコストテーブルの数字から差し引いておきます。

-----------------------------

●要素12対

未ソートのランダムデータ(その都度生成)でテスト

試行1
 t03   719 msec.   340,995 回
 t04   141 msec.   30,267 回
試行2
 t03 24,104 msec. 14,188,813 回
 t04 14,291 msec.  5,371,598 回
試行3
 t03   742 msec.   368,712 回
 t04   396 msec.   122,676 回
試行4
 t03  6,283 msec.  3,428,394 回
 t04  2,729 msec.   993,598 回
試行5
 t03 56,896 msec. 35,597,517 回
 t04 59,991 msec. 23,359,315 回

同じ要素数でもバラつきが凄いですね。
でも、t03⇒t04で一応速くなってます。
 # 試行5の所要時間は逆転してるけど。

-----------------------------

t04 10回平均
 要素10対  407msec.
 要素11対 3,564msec.

 # 要素11対のときは、10回中8回が1秒未満で残りが14秒と17秒
 # キツいケースにあたると凄く時間かかるので
 # 10回程度の平均とってもあまり意味ないのよね。(ーー;)

※なお、要素12対というと、なんかショボい感じですが
 元コードだと6時間かかるハナシです。

※あと、運用的には
 「最も効率の良い運び方が判るまで【運ばない】」
 という選択肢はないハズなので^^;;;;
 「許容時間いっぱいまで調べて、その時点での暫定ベストで我慢する」
 という選択肢を想定しています。

  # なので、中断書出処理要るよね、最終的には。

qa7697154 :(03) 暫定ベスト判定

  • _Kyle(1291004)
  • 2012/09/21 (Fri) 18:03:03
■k0CLC_t03
http://cdvba.bbs.fc2.com/?act=reply&tid=3595424#c6803032

元コード
 再帰回数:6,235,301 回 / 所要時間:158,818 msec.
k0CLC_t01
 再帰回数:6,235,301 回 / 所要時間: 69,589 msec.
k0CLC_t02
 再帰回数:6,235,301 回 / 所要時間: 6,921 msec.
k0CLC_t03
 再帰回数: 285,263 回 / 所要時間: 512 msec.  \(^o^)/

要素10対で1秒切りました。\(^o^)/
所要時間は元コード比で【0.3パーセント】です。

◆変更点

「その時点での労力が、暫定ベストの労力を超えたらアウト」判定

それだけ。

部分和で言えば「残和が負になったらアウト」判定に相当します。
もうダメだと判ったら、途中であきらめるというハナシ。

----------------------------------------------

でも、

「要素1つ増えるだけで所要時間が10倍超かかるんだったら
 いくら速くしてもキリなくね?」

…って思いますよね。

 【 "指数関数時間かかる"というのは元来そういうことです 】

単位計算あたりの処理時間をいくら短くしても
要素が少し増えただけで相殺されてしまうということです。

しかし、実際に測ってみると…

以下、未ソートのランダムデータ(その都度生成)で
5回ずつ測った結果の平均です。

----------------------------------------------
 05対    65 msec. /      86 回
 06対    68 msec. /     384 回
 07対    74 msec. /    1,472 回
 08対    89 msec. /    8,791 回
 09対   166 msec. /    62,450 回
 10対   664 msec. /   413,138 回
 11対  4,509 msec. /  2,969,619 回
 12対  85,008 msec. /  58,057,592 回
 13対 430,226 msec. / 260,527,634 回

【総当りの場合は】要素がNからN+1に増えると、
再帰回数も所要時間もN+1倍になります。

しかし、t03は【総当りではない】ので、要素がNからN+1に増えても、
再帰回数や所要時間がN+1倍になるわけではありません。

また、要素数が同じでも課題の状況によって
再帰回数・所要時間が変化しますし、逆転もあります。

ちなみに要素10対のケースですが
課題A512msc.に対して、平均だと664msc.かかっています。
課題Aが軽い課題だったのかというとそうではなくて
事前にソートするか否かの違いです。

そこで…ツヅク

qa7697154 :(02) ざっくり直す (v1.2)

  • _Kyle(1291004)
  • 2012/09/20 (Thu) 07:03:16
まずは

#4,7,9,10さま

大変申し訳ありませんでした。 <(_ _)>

 >重みtab(t01(a), t02(a))
 >などように重みtabのなかにt01(a)のように配列がはいっているのをやめて、
 >(略)A群数×B群数の大きさの配列(抜き出した重みtab)をつくってしまったらどうでしょうか

自分でコード書いてみてようやく、おっしゃるところを理解できました。
o.................rz

 # あ、コード出てる。でもRuby。orz

=======================================================

さて。(^^;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 # めげないヤツだな、我ながら。

■k0CLC_t02
http://cdvba.bbs.fc2.com/?act=reply&tid=3595424#c6803031

元コード
 所要時間:158,818 msec./再帰回数:6,235,301 回
k0CLC_t01
 所要時間: 69,589 msec./再帰回数:6,235,301 回
k0CLC_t02
 所要時間: 6,921 msec./再帰回数:6,235,301 回 \(^o^)/

◆変更点

目に付いたところを片っ端からざっくり。

 # 直しすぎて、動作がちょっと不安ww

ただし、再帰回数が動いてないことからもわかるように
いずれもアルゴリズムレベルではなくロジックレベルの変更です。
同じ総当りでも、ロジックレベル,コーディングレベルの改善だけでも、こんなに違うというハナシ。

もちろん、再帰回数そのものを減らさないことには、すぐに詰まるんですけどね。

 ○要素11対(理論値) 再帰回数: 76,000 回 所要時間:80秒
 ○要素12対(理論値) 再帰回数:837,000 回 所要時間:840秒(14分) 

実用限界が11対から12対に伸びましたwww

----------------------------------------------

部分和お読みになった方は予想ついてると思いますが
ここからバサバサ枝刈っていきます。

現時点の手元最速は…
 所要時間: 511 msec./再帰回数:283,806 回
です。

\(^o^)/

qa7697154 :(01) 叩き台

  • _Kyle(1291004)
  • 2012/09/20 (Thu) 00:50:46
http://cdvba.bbs.fc2.com/?act=reply&tid=3595424#c6803030

元コード
 所要時間:158,818 msec./再帰回数:6,235,301 回
k0CLC_t01
 所要時間: 69,589 msec./再帰回数:6,235,301 回 \(^o^)/

日本語変数もですけど、ループカウンタaとかbとか気持ち悪いので
見た目だけわたし流に変更して叩き台にするつもりだったんですが
子Pのカウンタ宣言しただけで、いきなり所要時間半減しちゃいましたww

 # まぁ、再帰当たりの所要時間減らしても
 # 再帰数減らさんことには焼け石に水なんですけどね。

◆変更点

 ・起動マクロ(test)設置
 ・変数名と型変更
 ・タイムカウンタ・再帰カウンタ設置
 ・レイアウト変更

qa7697154 :(00) 状況把握 (v2.1)

  • _Kyle(1291004)
  • 2012/09/19 (Wed) 23:11:48
■アルゴリズムについての質問です
http://bekkoame.okwave.jp/qa7697154.html

 # いきなりシリーズ化?
 # おまけに記事番号二桁用意してあるしww

寝言読むと俄然やる気になるのよね。

 追記)
  寝言ほざいてたのはわたしのほうでした。
  #4,7,9,10さまに重ねてお詫び申し上げます。 <(_ _)>

--------------------------------------------------

さて。(^^;;

とりあえず元コード走らせ…

……って、あれ?

(ーー;)

min渡し忘れてるし。誰も触れてないし。

 # ちょっと悩んじゃったよ(ぉ

 # minの宣言文もないし、
 # 質問者さんの手元では動いてるみたいだから
 # 別のモジュールでPublic宣言してたのね (^^;;;;

 # Option Explicitがエラー吐いたとき
 # 「ん?」とは思ったんだけどね。
 # 単なる宣言忘れだと思ってた。

-------------------------

さて。(^^;;;;;

とりあえず元コード走らせて…

……って、あり?

(ーー;)

手元の環境で

 ●要素8対 所要時間:1,238 msec./再帰回数:69,281 回

1秒23って…。課題軽すぎてテストデータにならんし。

 # つか、#4氏
 # 「VBAで1秒前後の課題をRubyで100回まわして1秒程度」
 # って、何が書きたかったの?

-------------------------

さて。(^^;;;;;;;;;

とりあえず、ランダムデータでテストしてみると…

 ●要素9対 所要時間:13,357 msec./再帰回数:623,530 回
 ●要素10対 所要時間:158,818 msec./再帰回数:6,235,301 回

シンプルな総当りだからキレイに増えてくね、困ったことに。(^^;;;
この調子でいくと、単純計算で…

 ○要素11対(理論値) 再帰回数:68,588,311 回 所要時間:1,746秒(30分) 

もちろん運用によるけど、この辺がまぁ、実務上の限界よね。

で、

 ○要素12対(理論値) 再帰回数:7.5E+08 回/所要時間:300 分
 ○要素13対(理論値) 再帰回数:8.3E+09 回/所要時間:59 時間
 ○要素14対(理論値) 再帰回数:9.1E+10 回/所要時間:27 日
 ○要素15対(理論値) 再帰回数:1.0E+12 回/所要時間:10 ヶ月
 ○要素16対(理論値) 再帰回数:1.1E+13 回/所要時間:9 年

できれば100対までやりたいってことになると…

 ○要素100対(理論値) 再帰回数:3.3E+100 回/所要時間:2.7E+88 年

まぁ、こういう計算は質問者さんもしてみたハズで
だからこそ
「アルゴリズムについての質問です」
になったんだろうけどね。

コレをできれば昼休み中に終わらせたいってハナシよね (^^;;;;;;;;

 # ちょっと自信なくなって来たかもw(ぉぃ

 # ところで、昼休み中に終わればいいなんて誰も言ってないけど?
 # わたしが言った。

-------------------------

さて。(^^;;;;;;;;;;;;;;;;;;

とりあえず、テスト課題設定してみました。

[重み表]はそのまま使うことにして
 ※ いずれはこのサイズも影響してくるけどね。

課題A:要素10対

A群 B群
07 01
09 03
09 03
10 05
12 06
12 11
15 11
15 11
16 17
18 17

元コードスコア

 所要時間:158,818 msec./再帰回数:6,235,301 回
    
(投稿前に、内容をプレビューして確認できます)