如何提高代码效率

转载来自:http://www.cnblogs.com/E-star/archive/2012/05/06/2486594.html

摘自上海交大bbs:

奋是基础,一切的前提
奋之上是忍耐
大部分时候大部分人的“习惯”都是跟“效率”作对的
奋让你有机会去跟这些习惯做斗争

在 ACM 竞赛的级别,写代码不是在解题,而是实现早已在脑子里准备好的一个逻辑流程。
这个追求跟大部分没有训练过的人的习惯相反,要扭转这种习惯,第一步可以做尝试有:

1. 把准备和敲键盘分割为两个动作。
2. 把敲键盘和运行分割为两个动作。
3. 编译错误这件事情几乎总是会发生,但“尝试”减少编译错误的过程,确实对提高准备
效率很有帮助帮助。

写程序的 准备->写代码->测试 三阶段,普通人之间差距最小的就是第二个阶段。速度都
是在“短到完全不充分或者长得非常没建设性”的准备期,以及“没完没了地冒出计划外
BUG 或者遭受?到不行的 Debug 灾难”的测试期,被拖慢下来的。

如果你是队里的队员,那么以下几点是必须做到的:

1. 敲键盘中的任何时候,如果发呆超过三分钟,说明没准备好,滚下机器去想清楚。
2. 编译器告诉你某个变量没声明,结果你突然发现不知道应该在哪里声明它。这时候同样
说明准备没做好(根本就是对象和逻辑都是乱的),滚下机器去想清楚。
3. 为 ACM 竞赛而写的代码,不需要 DEBUG 模式。

作为一种粗略的判断标准,“一次过 Sample 的概率”是很重要的。好好准备了的程序,
如果经常不能写好立刻过 Sample,那一定是准备方法有问题。

最后再强调一件事情??发现程序有逻辑错,或者干脆算法有遗漏了的情况,别着急打补
丁。一个工作需要一个补丁,就很有概率需要更多的或者更大的补丁,很多时候你遗漏的
不是一个 Case 而是一类情况、一个大的角度,这种情况只有通过重新检查算法逻辑或者
实现逻辑才能扭转过来,拍脑袋打上的补丁只会增加未来差错的负担而已。


这是我整理过的关于ACM题目常用到的算法代码,word文档,条理清晰,绝对有用。目录如下: 一.数论 1.阶乘最后非零位 2. 模线性方程(组) 3. 素数表 4. 素数随机判定(miller_rabin) 5. 质因数分解 6. 最大公约数欧拉函数 二.图论_匹配 1. 二分图最大匹配(hungary邻接表形式) 2. 二分图最大匹配(hungary邻接表形式,邻接阵接口) 3. 二分图最大匹配(hungary邻接阵形式) 4. 二分图最大匹配(hungary正向表形式) 5. 二分图最佳匹配(kuhn_munkras邻接阵形式) 6. 一般图匹配(邻接表形式) 7. 一般图匹配(邻接表形式,邻接阵接口) 8. 一般图匹配(邻接阵形式) 9. 一般图匹配(正向表形式) 三.图论_生成树 1. 最小生成树(kruskal邻接表形式) 2. 最小生成树(kruskal正向表形式) 3. 最小生成树(prim+binary_heap邻接表形式) 4. 最小生成树(prim+binary_heap正向表形式) 5. 最小生成树(prim+mapped_heap邻接表形式) 6. 最小生成树(prim+mapped_heap正向表形式) 7. 最小生成树(prim邻接阵形式) 8. 最小树形图(邻接阵形式) 四.图论_网络流 1. 上下界最大流(邻接表形式) 2. 上下界最大流(邻接阵形式) 3. 上下界最小流(邻接表形式) 4. 上下界最小流(邻接阵形式) 5. 最大流(邻接表形式) 6. 最大流(邻接表形式,邻接阵接口) 7. 最大流(邻接阵形式) 8. 最大流无流量(邻接阵形式) 9. 最小费用最大流(邻接阵形式) 五. 图论_最短路径 1. 最短路径(单源bellman_ford邻接阵形式) 2. 最短路径(单源dijkstra_bfs邻接表形式) 3. 最短路径(单源dijkstra_bfs正向表形式) 4. 最短路径(单源dijkstra+binary_heap邻接表形式) 5. 最短路径(单源dijkstra+binary_heap正向表形式) 6. 最短路径(单源dijkstra+mapped_heap邻接表形式) 7. 最短路径(单源dijkstra+mapped_heap正向表形式) 8. 最短路径(单源dijkstra邻接阵形式) 9. 最短路径(多源floyd_warshall邻接阵形式) 六. 图论_连通性 1. 无向图关键边(dfs邻接阵形式) 2. 无向图关键点(dfs邻接阵形式) 3. 无向图块(bfs邻接阵形式) 4. 无向图连通分支(bfs邻接阵形式) 5. 无向图连通分支(dfs邻接阵形式) 6. 有向图强连通分支(bfs邻接阵形式) 7. 有向图强连通分支(dfs邻接阵形式) 8. 有向图最小点基(邻接阵形式) 七. 图论_应用 1.欧拉回路(邻接阵形式) 2. 前序表转化 3. 树的优化算法 4. 拓扑排序(邻接阵形式) 5. 最佳边割集 6. 最佳顶点割集 7. 最小边割集 8. 最小顶点割集 9. 最小路径覆盖 八. 图论_NP搜索 1. 最大团(n小于64)(faster) 2. 最大团 九. 组合 1. 排列组合生成 2. 生成gray码 3. 置换(polya) 4. 字典序全排列 5. 字典序组合 6. 组合公式 十. 数值计算 1. 定积分计算(Romberg) 2. 多项式求根(牛顿法) 3. 周期性方程(追赶法) 十一. 几何 1. 多边形 2. 多边形切割 3. 浮点函数 4. 几何公式 5. 面积 6. 球面 7. 三角形 8. 三维几何 9. 凸包(graham) 10. 网格(pick) 11. 圆 12. 整数函数 13. 注意 十二. 结构 1. 并查集 2. 并查集扩展(friend_enemy) 3. 堆(binary) 4. 堆(mapped) 5. 矩形切割 6. 线段树 7. 线段树扩展 8. 线段树应用 9. 子段和 10. 子阵和 十三. 其他 1. 分数 2. 矩阵 3. 日期 4. 线性方程组(gauss) 5. 线性相关 十四. 应用 1. joseph 2. N皇后构造解 3. 布尔母函数 4. 第k元素 5. 幻方构造 6. 模式匹配(kmp) 7. 逆序对数 8. 字符串最小表示 9. 最长公共单调子序列 10. 最长子序列 11. 最大子串匹配 12. 最大子段和 13. 最大子阵和
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值