| 发表于:2007-02-22 00:05:003楼 得分:0 |
效率分为2部分, 1是计算本身的效率;2是计算次数的多少. 计算次数上,思路如下:先用快速排序算法对100个数排序(这里其实用什么算法问题不大,因为就算你用的是最慢的起泡法,总的用时在这个问题上也可以忽略的) 然后因为你计算的是(a*c)/(b*d) 的值约等于p ,由于这个p的值是用户给出,因此我们难以对特定的p进行优化,最多只能是 如果p接近0, 如果p约等于1/n,(n> =2) 如果p接近1, 对于所有的p大于1,我们都另p=1/p,然后再计算,这样所有的p> 1的情况都不存在了. 对上面3种情况分别使用不同的循环策略,这样可以预期靠更少的循环次数达到结果. 由于你不是需要找出一组满足条件的数字,而是找出全部,那么无论如何循环次数都少不到哪里去的,加上对double做运算本来就不快,所以你别对最后的结果有太多期望,快也不会快到哪里去,因为运算量摆那里了. 至于(a*c)/(b*d)的计算效率,由于对你的具体数组中的内容并不确定,因此也无法靠数字间的特殊性提供投机取巧的算法. 总的说来,你如果希望有好的执行效率,同时又对影响效率的重要因素都不能加以限制,成果不会太大. 不过事先排序一下是有帮助的,另外在某些地方暂时性地把数字强制转换成int,也能提供一些帮助.但不会太大. | | |
|