作者Uni1122 (淡雪)
看板CSSE
标题Re: 程式效率
时间Thu Oct 19 22:26:39 2006
※ 引述《invalid (everlasting)》之铭言:
: ※ 引述《gwliao (gwliao)》之铭言:
: : 这是算一次Cost/Fitness value的时间.
: : 假如能减少number of iterations的话, Total running time应该会减少.
: : 不知你是用别人的Solver还是自己写?
: : 假如是自己写话, 可以想想产生Next generation的方法.
: : 用Solver的话, 那要试试能调的参数.
: : 有啊, 读多一点书和写多一点程式.
: : 可以未写程式前, 先猜这有没有意义.
: 我觉得在演算法的层次上
: 在写之前本来就可以根据演算法本身的time/size complexity
: 来选择,如果是自己想的演算法
: 最好是自己推一下complexity (数学要够好XD)
: 这样才算是真正的设计演算法
: 必竟实作後牵涉的因素太多,倒推回去有的时候不是很准
: 而之前讨论的部份感觉起来其实满接近实作的范围
: 递回与回圈的比较,相信以看的懂组语的人来说根本就不是问题
: 而某些rule of thumb的确是可以在profile前提升效能
: 譬如针对cpu cache或是software pipeline的常识
: 或是阵列宣告等的小技巧
: 不过绝大多数的最佳化技巧,可能在某个平台上相当适合
: 而到另一个平台上就可能因为核心架构的不同而变成累赘
: 所以大部份的最佳化都会强烈建议等到profile後再进行
: 不然有可能是事倍功半
: 书的话比较少,毕竟演算法上的改良才是最有效的
: 实作上的技巧也会随硬体演进变化,没有太多不变的真理
: 在没有pipeline上的cpu玩software pipeline就一点用都没有
: 比起这个,良好的coding style更能够带来巨大的效益啊
演算法进化推一个先
这堆讨论串,让我想到了以前在上演算法时,老师有提到过的
演算法为何会出现,主要就是因为以前电脑不够好CPU不够快
如果你一只程式,要多耗费掉CPU的1秒的时间,那成本就会不知道要多多少
(以前的CPU使用时间是要算钱的,不过那是在没有PC的时代)
也因此就突出显出演算法的重要性,你可以多省几秒就可以多省一些研究经费
不过这是在金钱上的考量
但是在现今的硬体进步下,在PC上可能会觉得多那一秒没差,
或许在PC真的多那一秒没差,但是如果是在SERVER上跑这种程式
你跑一次要多一秒,那跑一万次就要多出1万秒,大概2.7小时
那这就是时间成本上的浪费了,但其实里面或许还有更多的考量在里面
这也是谓何就算在现在硬体已经成长到这样地步的情况下,依然会教你怎样写演算法
很多很多时候,你比别人多出一秒也能多做很多事情
尽管你需要为了这一秒,去花费更多时间再写演算法,但我认为是值得的
因为这就是属於自己的成长,相对的以後或许你可以用此演算法去套用在其他程式上
而不必要再去多花时间思考你就有一只很棒的程式,因为你脑袋就已经有这种架构
会很好很快速的帮你去建构你要的程式
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.225.99.201
1F:→ marukocc:嗯...我觉得你根本不懂什麽是演算法 10/20 00:10
2F:推 ykjiang:你太老实了 :) 10/20 00:54
3F:推 eva19452002:那可以请1F说明一下何谓演算法的真谛吗 10/21 00:51