编程的核心是数据结构,而不是算法
Rob Pike, 最伟大的 C 语言大师之一 , 在Notes on C Programming(英文原文)中从另一个稍微不同的角度表述了 Unix 的哲学:
- 你无法断定程序会在什么地方耗费运行时间。瓶颈经常出现在想不到的地方,所以别急于胡乱找个地方改代码,除非你已经证实那儿就是瓶颈所在。
- 估量。在你没对代码进行估量,特别是没找到最耗时的那部分之前,别去优化速度。
- 花哨的算法在 n 很小时通常很慢,而 n 通常很小。花哨算法的常数复杂度很大。除非你确定 n 总是很大,否则不要用花哨算法(即使 n 很大,也优先考虑原则 2 )。
- 花哨的算法比简单算法更容易出 bug 、更难实现。尽量使用简单的算法配合简单的数据结构。
- 数据压倒一切。如果已经选择了正确的数据结构并且把一切都组织得井井有条,正确的算法也就不言自明。编程的核心是数据结构,而不是算法。
- 没有原则 6 。
Ken Thompson —— Unix 最初版本的设计者和实现者,禅宗偈语般地对 Pike 的原则4 作了强调:
拿不准就穷举
via: newsmth-algorithm
6.没有原则 6 。
我喜欢这条
算法本来就是为了大规模处理某个问题而引入的,在实际的工程中,字符串匹配用蛮力匹配法最好,只要这个地方不成瓶颈就行,以一个务实的态度来看待这个问题:)
我同感啊。還是務實點好啊。
拿不准就穷举
稳定最重要,如果老是让人帮助计算机干活,那就太可怕了。人会成为机器的奴隶。
哈哈,说得很到位啊~!!
不学算法前,头脑清晰,费力气学完之后,还得按算法的套路来凑,很累啊!
比较有道理,但主要是从实用的角度来说。
优化还是很重要,当然,就像他说的,要找准地方。看看linux操作系统内核,很多地方都很仔细地斟酌了。如果不优化,可能就慢百分之几十。
很多个个环节累加嵌套,这些粗糙的算法就会导致系统慢很多倍。
那些出色的软件,其实都已经经过了非常精心的优化的。当然,性能和稳定性之间的权衡,需要仔细地考虑。
转载行否?
写程序这么多年。深刻的感觉数据结构非常的重要,但算法也是非常重要的。还是回学校好。可以专门研究这些内容。在公司里也只能凑货了。
Not agree!