
■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時間かかるハナシです。
※あと、運用的には
「最も効率の良い運び方が判るまで【運ばない】」
という選択肢はないハズなので^^;;;;
「許容時間いっぱいまで調べて、その時点での暫定ベストで我慢する」
という選択肢を想定しています。
# なので、中断書出処理要るよね、最終的には。