作者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