作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [問題] array中-random產生數字的問題
時間Sat May 10 23:24:42 2008
※ 引述《lendlicewang (鴛刀鴦刀情人看刀)》之銘言:
: 我的程式產生的數字跟教授的不一樣
: 爬文發現是呼叫constructor的問題
: 但我一次new都是2 * _capacity (第一次除外)
: _capacity也是按照0->1->2->4....這樣長大
: 請問還有什麼地方會照成random不一樣的問題嗎??
array 在長大時的確會因為產生新的 array 而重新呼叫 AdtTestObj() 許多次,
除此之外, 也可能因為你有宣告 AdtTestObj 的 local 變數或是執行 = 動作而
多呼叫了他的 constructor.
我想參考程式中 AdtTestObj() 的呼叫次數應該是 minimal 的, 所以如果你的
不一樣的話, 可以檢查一下 AdtTestObj() constructor 是被誰呼叫了 (用 debugger
來抓).
: 另外在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
1F:推 lendlicewang:謝謝教授 05/10 23:41
2F:推 lendlicewang:似乎是有沒有開O3的問題... 05/11 03:34
3F:推 lendlicewang:請問老師的執行檔有開O3嗎? 05/11 03:50
4F:→ ric2k1:嗯, 我有開 -O, 不過有差很多嗎? (我想大概兩倍吧?) 05/11 09:42
5F:推 bnsblue:老師 我用linear search是37.5 s, 改用binary search之後 05/11 10:59
6F:→ bnsblue:只改進到32.75.... 05/11 11:00
7F:→ bnsblue:P.S.我跑ref檔也是0.94s而已 05/11 11:01
8F:→ ric2k1:測了一下, 有沒有 -O 只差 0.02s 而已 (0.92s vs 0.94s) 05/11 11:13
9F:→ ric2k1:你確定你寫的bin search 正確嗎? O(n)跟O(log n)應該差很多 05/11 11:14
10F:推 bnsblue:我再檢查一下XD 05/11 11:17