作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [問題] array中-random產生數字的問題
時間Sun May 11 11:38:53 2008
: : 另外在test時
: : 若是
: : adtr 100000
: : adta -r 100000
: : 就盪在那邊不動了
: : 數字比較小的話就沒這個問題
: : 是因為我的insert太慢嗎??
: : 能請知道的各位指點一下嗎
: : 謝謝
:
: 應該是你的 insert 太慢了... 可以跟參考程式的 adtTest.dlist 比一下,
:
: 如果你比他還慢 (35 sec in my machine), 表示你的 insert 比 O(n) 還慢,
:
: 那真的是有問題, 可以用 static int + cout + debugger 來觀察一下.
:
: My adtTest.array runtime < 1 sec...
:
: --
:
※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 59.121.130.151
: 推 lendlicewang:謝謝教授 05/10 23:41
: 推 lendlicewang:似乎是有沒有開O3的問題... 05/11 03:34
: 推 lendlicewang:請問老師的執行檔有開O3嗎? 05/11 03:50
: → ric2k1:嗯, 我有開 -O, 不過有差很多嗎? (我想大概兩倍吧?) 05/11 09:42
: 推 bnsblue:老師 我用linear search是37.5 s, 改用binary search之後 05/11 10:59
: → bnsblue:只改進到32.75.... 05/11 11:00
: → bnsblue:P.S.我跑ref檔也是0.94s而已 05/11 11:01
: → ric2k1:測了一下, 有沒有 -O 只差 0.02s 而已 (0.92s vs 0.94s) 05/11 11:13
: → ric2k1:你確定你寫的bin search 正確嗎? O(n)跟O(log n)應該差很多 05/11 11:14
: 推 bnsblue:我再檢查一下XD 05/11 11:17
試了一下...
[dofile]
adtr 100000
adta -r 100000
usage
adtd -r 100000
usage
Binary search:
Opt mode : 0.92 (add) 0.89 (delete)
Debug mode: 0.94 (add) 0.90 (delete)
Linear search (改了我的 array.h):
Opt mode : 4.47 (add) 0.89 (delete)
Debug mode: 27s (add) 0.90 (delete)
1. Linear search 的確慢不少...
2. Linear search 的 opt 跟 debug mode 還差蠻多的... 這是蠻怪的.
3. Delete 都很快, 因為我直接 randomly generate positions for delete,
然後用 _data + pos 直接指到要 delete 的 iterator, 不用 find(),
所以都很快.
4. 我有用 tests/do 輸出的結果比對過, output 的結果是一樣的, 所以應該是沒寫錯.
5. Memory usage 都是 0.2695 M Bytes.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.130.151
1F:推 bnsblue:為什麼linear search的結果會比dlist的快那麼多呀@@ 05/11 11:45
2F:推 timrau:100000次new是很可怕的... 05/11 13:46
3F:→ ric2k1:剛剛看了一下 code, delete 是直接 randomly delete pos, 05/11 14:26
4F:→ ric2k1:並沒有 find(), 難怪那麼快... 改一下文章... 05/11 14:26
※ 編輯: ric2k1 來自: 59.121.130.151 (05/11 14:29)
5F:推 lendlicewang:delete之後不是也要做搬移的動作嗎??位什麼速度差這 05/11 15:19
6F:→ lendlicewang:麼多啊?? 05/11 15:19
7F:推 bnsblue:我也想問..而且我insert現在5秒左右 可是已經用binary了 05/11 19:14
8F:→ bnsblue:還是無法像老師的一樣,我想可能也是因為搬移東西的原因 05/11 19:15