トップ «前の日記(2015-07-06(Mon)) 最新 次の日記(2015-07-08(Wed))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2015-07-07(Tue) 一度傘をとりに戻って、それから

group by

適当に検索して適当に試してみた。

sqlite> select * from ggroup;
id    name           numb
----  -------------  ----
1     foo            100 
2     foo            200 
3     bar            20  
4     baz            210 
5     bar            35  
6     baz            10  
7     baz            25 
sqlite> select name, sum(number) 
   ...> from ggroup 
   ...> group by name
   ...> order by id;
name  sum(number)  
----  -------------
foo   300          
bar   55           
baz   245   

いくらなんでも効率悪すぎ

EightQueensもう少し。
手詰まりになったら最初からやり直し、で どのくらい失敗を繰り返すのか 見えるように してみた。
何回か試して、非効率を痛感する。
一回で完了する場合もなくはないが、大抵 数回以上は 失敗している。10回以上になることもまま あった。

$ python watch_try_and_error.py
Eight Queen Start!
[[7, 0]]
[[7, 0], [1, 1]]
[[7, 0], [1, 1], [3, 2]]
[[7, 0], [1, 1], [3, 2], [6, 3]]
[[7, 0], [1, 1], [3, 2], [6, 3], [2, 4]]
1 Times Fault!
[[3, 0]]
[[3, 0], [1, 1]]
[[3, 0], [1, 1], [4, 2]]
[[3, 0], [1, 1], [4, 2], [2, 3]]
[[3, 0], [1, 1], [4, 2], [2, 3], [5, 4]]
2 Times Fault!
[[6, 0]]
[[6, 0], [1, 1]]
[[6, 0], [1, 1], [3, 2]]
[[6, 0], [1, 1], [3, 2], [0, 3]]
[[6, 0], [1, 1], [3, 2], [0, 3], [7, 4]]
[[6, 0], [1, 1], [3, 2], [0, 3], [7, 4], [4, 5]]
[[6, 0], [1, 1], [3, 2], [0, 3], [7, 4], [4, 5], [2, 6]]
After 2 times Fault, Now Success!
[[6, 0], [1, 1], [3, 2], [0, 3], [7, 4], [4, 5], [2, 6], [5, 7]]

たぶんもっと非効率

モンテカルロ法らしいものを使って EightQueensを再実装してみた。
y座標を8つ、ランダムな順序で(つまりダブらない)x座標と組み合わせて8つの位置を 設定し、互いに効いてないことを確認するだけ。
もちろん効いていたら破棄してやりなおし。

スクリプトはコンパクト(現時点で合計47行)にできたが、 失敗回数がひどい(稀には10回未満だったりするが)。

$ python monte_8q.py 
204 Times Fault and Success
[[0, 2], [1, 4], [2, 1], [3, 7], [4, 0], [5, 6], [6, 3], [7, 5]]
 
$ python monte_8q.py 
573 Times Fault and Success
[[0, 4], [1, 1], [2, 3], [3, 5], [4, 7], [5, 2], [6, 0], [7, 6]]
 
$ python monte_8q.py 
447 Times Fault and Success
[[0, 0], [1, 5], [2, 7], [3, 2], [4, 6], [5, 3], [6, 1], [7, 4]]
 
$ python monte_8q.py 
34 Times Fault and Success
[[0, 4], [1, 1], [2, 3], [3, 5], [4, 7], [5, 2], [6, 0], [7, 6]]
 
$ python monte_8q.py 
977 Times Fault and Success
[[0, 1], [1, 6], [2, 4], [3, 7], [4, 0], [5, 3], [6, 5], [7, 2]]

x座標もランダムに、あるいはダブるか否かお構いなくランダムにしたら どうなることか。

と思って、0-7の任意の数字をx, y座標に入れて8組作り、あってるかどうか 確認するだけの スクリプトも書いてみた。
もっとも、10分くらいまわしても終わらない。
そのためちゃんと動作するのか 確認できていない。
Cで書きなおしたほうがよさそう。


リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。