作者micklin (Mick@Tucson)
看板CSSE
标题Re: 程式效率
时间Wed Sep 13 21:16:07 2006
※ 引述《kola12 (kola)》之铭言:
: 这个主题我觉得原po的问题还蛮简单的
: 原po就是觉得他多花点时间把程式最佳化,可以缩短程式执行的时间
: 但是你能把程式最佳到什麽程度?
: 真的如原po所想的=>他花在程式最佳化的时间=程式增进效率後缩短的执行时间?
: 这个问题很难评估
: 所以最好的做法就是用另外一台电脑跑程式
: 一边跑一边改
: 一般软体开发时间是算人力/时,没在算程式执行的时间的
: 所以这边用软体专案管理的方法来解决这个问题
: 应该是没有什麽意义的
我的表达能力似乎很差 / \
用例子来看好了,
对於一个函数, f(x,y)=x+y-x*x+x*y, 如果我们现在要对此函数求值,
又假设运算元都是二元运算子, 函数己储存在二元树中,
那程式的写法可以用最简单的递回来做, 也可以用stack来做,
递回的程式码简单好写
function foo(node){
if node is an operator
return (foo(left) op foo(right))
otherwise
return node value
}
用stack的话, 乘g起来很罗嗦, 但不管是用STL的stack还是自己建的stack,
速度都会变快, 变快的时间有多少? 不知道。
但这是确定会变快的选择, 如果我明天就要把程式交出去,
那我只好用递回, 简单又不容易出错,
但是如果我要要求效率, 我会自己建一个stack类别来最佳化我要的运算。
又如排序, 泡沫排序法很快就能写好, 换成quick sort在理论上可以得到比较好的表现,
但是如果整个程式也就sort这麽一次, 而且sort的资料量不大,
那我花时间写quick sort的意义就不大,
当然我是假设不用元件或套件或函式库, 要自己写的时候。
大家都知道建index可以很快找到资料, 但是我要怎麽评估有没有必要用hashing?
资料量不够大的时候, 就没意义了, 差距大概只有0.0001秒吧 orz
花在hasing的时间变的没意义了。
其实我一开始想知道的就是, 能不能在写程式前就知道这样写有没有意义?
有专门的书或文章在探讨这一类的问题吗?
或者板友们有可以分享的心得吗?
现在倒是看到了不少建议与心得, 感激 m(_ _)m
新问题~
80/20法则适用於我的这个问题吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 70.171.224.50
1F:推 taiwancat:%80的人在BBS找答案 能回答问题的那%20的人在认真读书.. 09/13 23:01
2F:推 xam:programming pearl 09/13 23:17