09/01/27 00:30:42
立ってしまったからには使うしか無いな。
8:デフォルトの名無しさん
09/01/27 00:43:56
乱数一回で3万件のシャッフルできるやつ明日までに作るから待ってろ。他のプログラム使わず。
9:デフォルトの名無しさん
09/01/27 00:50:47
たのんます。
10:デフォルトの名無しさん
09/01/27 02:39:14
30000!まで扱うのは出来るとしても、その範囲の乱数の生成法が思いつかん。
ちょうど2の1000乗とかだったら、rand()をシフトさせればいいが。
何桁なのかもわからん。
11:デフォルトの名無しさん
09/01/27 02:55:24
スターリングの公式に当てはめると30000!は2進数でおよそ403200桁らしい。
計算結果
URLリンク(www.google.com)
12:デフォルトの名無しさん
09/01/27 03:24:17
シャッフルの人に聞きたいんだが、どこが遅いかおおむね分かったりしないかな。
というかどれくらいかかってるの?
ファイル名ということであれば256バイト固定でやってもいいように思う。
3万回のallocのコストが影響してるのかもしれないし。
連続領域の2次元配列で、インデックスのみのシャッフル(>>956-957)を試してみて。
毎回allocするのはコストが高いかも。ファイル名取得コストも調べないとだけど。
それと、tempという変数がグローバル変数ならローカル変数に変えてみて。
13:デフォルトの名無しさん
09/01/27 06:15:10
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
14:デフォルトの名無しさん
09/01/27 08:32:07
>>6
リンクの仕組み
15:デフォルトの名無しさん
09/01/27 09:52:01
>>8
乱数「1回」って何だよ。
多倍長の乱数を作るのと、4バイトの乱数をたくさん作るのは本質的に何も変わらないって解ってる?
逆に言えば多倍長の乱数を「1回」作ってそれをLSBから必要なビット数ずつ取り出して使えば、どんなアルゴリズムでも乱数を「1回」以上作るのは必要は無い。
16:デフォルトの名無しさん
09/01/27 10:42:17
>>12
遅いっていっても、シャッフルするのに10秒はかからん感じです。
妥当なのかもです。
indexのシャッフルもやりました、tempはローカルっす。
17:デフォルトの名無しさん
09/01/27 11:03:54
>>16
ちょっと改めてソース出してみてよ。手が空いてたら試してみるから。
18:デフォルトの名無しさん
09/01/27 11:24:11
ディレクトリに3万の無作為なファイルが必要ですけど。。。
19:デフォルトの名無しさん
09/01/27 11:27:55
ん? ファイル名を入れ替えているだけじゃないの?
まぁ、ファイル名そのものにもランダム性が必要なわけじゃないなら10万くらいファイルが転がっているディレクトリくらい簡単に用意できるし。
# たまたま、今度の仕事は10*1000*10くらいの個数の画像ファイルが相手なんだw
20:デフォルトの名無しさん
09/01/27 11:36:53
!?ソース削ってたら2秒くらいで全件表示まで動くようになった
21:デフォルトの名無しさん
09/01/27 11:41:48
えー!まさかのうっかりミス?
劇的改善おめ。
何やって高速化したか聞きたいなw
22:デフォルトの名無しさん
09/01/27 11:46:58
シャッフル以外の処理の部分でした
30000件printfする前に30000中の該当データを弄る関数があって
そこをコメントアウトしたらはやくなりまうすた
シャッフル自体はまともにうごいてますた
23:デフォルトの名無しさん
09/01/27 11:50:26
「問題を再現する最小限のソースの提示」が問題解決に役立つ好例だな。
24:デフォルトの名無しさん
09/01/27 12:02:39
すんません、おそくなりました
もっと早くなりそうだったら、と思いうpしますた
きたなくてすいません
センスのない変数ネーミングですいません
URLリンク(kansai2channeler.hp.infoseek.co.jp)
25:デフォルトの名無しさん
09/01/27 12:23:18
>>24
実行してなくて以下完全に妄想で。
>>12さんの言うようにmallocのコスト減らしたいので
メモリの無駄を許容できるならfilename=calloc()のときに一緒にバカでかいテーブル作ってもいいかも。
あとstrcpy(filename[i], entry->dname);一発にすればtemp[]への一時strcpy()いらなくね?とか
26:デフォルトの名無しさん
09/01/27 12:38:16
>>24
処理中にファイルが増えるとまずいコードになってる
できれば1回で読みながらファイル数を数えるべきだけど
せめて2回目に読むときにiがcountを越えないようにするべき
27:デフォルトの名無しさん
09/01/27 12:44:16
1回で読みながらファイル数を数えるってことは
動的配列は使えないってことですか