Unix文化——不要过度优化,有关算法
2010-03-06 00:44
253 查看
这里的过度也包括“提早”。
下面的话是Rob Pike,最伟大的C语言大师之一说的,放在这里,已示惊醒:
1.你无法断定程序会在什么地方耗费运行时间。瓶颈经常出现在想不到的地方,所以别急着胡乱找个地方改代码,除非你已经证明那儿就是瓶颈所在;
2.估量。在你没对代码进行估量,特别是没找到最耗时的那部分之前,别去优化速度;
3.花哨的算法在n很小时通常很慢,而n通常很小。花哨算法的常数复杂度很大。除非你确定n总是很大,否则不要使用花哨算法。(即使n很大,也优先考虑原则2)
4.花哨的算法比简单算法更容易出bug,更难实现。尽量使用简单的算法配合简单的数据结构;
5.数据压倒一切。如果已经选择了正确的数据结构并且把一切都组织的井井有条,正确的算法也就不言自明。编程的核心是数据结构,而不是算法。
Ken Thompson对第四条给了更加精辟的补充
——拿不准就穷举。
以上摘自《Unix编程艺术》。从这些简单的文字,我们可以看到当年的大师,尤其是unix程序员对待数据结构,对待算法的态度,同时也能看到他们对待简单与复杂的辩证的视角。这些值得我们自己写程序时好好思考,即使在当今大数据量越来越显重要的情况下。
——你处理的数据量的大小决定了你真正的能力。
两种不同的观点,都对,都要吸收。
下面的话是Rob Pike,最伟大的C语言大师之一说的,放在这里,已示惊醒:
1.你无法断定程序会在什么地方耗费运行时间。瓶颈经常出现在想不到的地方,所以别急着胡乱找个地方改代码,除非你已经证明那儿就是瓶颈所在;
2.估量。在你没对代码进行估量,特别是没找到最耗时的那部分之前,别去优化速度;
3.花哨的算法在n很小时通常很慢,而n通常很小。花哨算法的常数复杂度很大。除非你确定n总是很大,否则不要使用花哨算法。(即使n很大,也优先考虑原则2)
4.花哨的算法比简单算法更容易出bug,更难实现。尽量使用简单的算法配合简单的数据结构;
5.数据压倒一切。如果已经选择了正确的数据结构并且把一切都组织的井井有条,正确的算法也就不言自明。编程的核心是数据结构,而不是算法。
Ken Thompson对第四条给了更加精辟的补充
——拿不准就穷举。
以上摘自《Unix编程艺术》。从这些简单的文字,我们可以看到当年的大师,尤其是unix程序员对待数据结构,对待算法的态度,同时也能看到他们对待简单与复杂的辩证的视角。这些值得我们自己写程序时好好思考,即使在当今大数据量越来越显重要的情况下。
——你处理的数据量的大小决定了你真正的能力。
两种不同的观点,都对,都要吸收。
相关文章推荐
- 不要过度追求精简或者说是优化代码
- 强大的随机算法-简洁的O(n)时间复杂度解决查找第k大数问题优化算法
- 【DayDayUp】【算法_图_最短路_之一_Dijkstra和几种优化姿势】
- 常见优化算法批量梯度下降、小批量梯度下降、随机梯度下降的对比
- 海量数据库的查询优化及分页算法方案
- 不要过度依赖自己控制之外的东西
- 各类近似优化算法学者
- 聊聊这个与代码优化有关的选择题 (某公司实习生招聘笔试试题)
- 过度优化导致的线程安全问题
- 八皇后的优化算法-位运算
- 利用代间差分遗传算法优化分形图像编码速度
- g2o(General Graph Optimization)---通用图优化算法
- 深度学习优化算法Momentum RMSprop Adam
- 路由表的建立算法和有关的刷新协议
- 海量数据库的查询优化及分页算法方案
- P103 Dijkstra算法 单源最短路问题优化算法
- 集体编程智慧--第五章:优化算法
- 那些有关求解next数组的算法
- hdu 1874 最短路问题 地杰斯特拉算法及其heap优化
- 我为什么劝你不要过度纠结于技术细节?