140 likes | 302 Views
浅谈程序设计学习方法与解题策略. F1003029 祁明良. 引言. 给出一个简单的问题,例如排序,能否在 40 分钟内解决?能否保证正确? 如果不能,为什么? 算法不熟悉? 代码不熟悉? 调试不出来? 特殊情况的一些点会出错?. 算法. 算法不熟悉,怎么办? 现阶段我们需要的算法不外乎这么寥寥几种: 1. 模拟 2. 搜索(递归,递推,回溯) 3. 贪心 4. 排序类算法 至于动态规划,图论等,可能花地时间相对长一些,对于起步的同学来说性价比没有上述的高。. 算法. 如何训练? 课堂( 30 ) + 自学( 70 ) 建议做专题训练
E N D
浅谈程序设计学习方法与解题策略 F1003029 祁明良
引言 • 给出一个简单的问题,例如排序,能否在40分钟内解决?能否保证正确? • 如果不能,为什么? • 算法不熟悉? • 代码不熟悉? • 调试不出来? • 特殊情况的一些点会出错?
算法 • 算法不熟悉,怎么办? • 现阶段我们需要的算法不外乎这么寥寥几种: • 1.模拟 • 2.搜索(递归,递推,回溯) • 3.贪心 • 4.排序类算法 • 至于动态规划,图论等,可能花地时间相对长一些,对于起步的同学来说性价比没有上述的高。
算法 • 如何训练? • 课堂(30) + 自学(70) • 建议做专题训练 • 资源来源:USACO(由于USACO的一些弊端,建议tyvj等有题型分类的在线测评系统) • 推荐网站:NOCOW(上面有USACO,sgu,Ural这些著名在线测评系统的题解和译题)
代码 • 敲代码,讲究的是 速度 & 准确率。 • 起步阶段刷简单题,练代码熟练度。 • 简单题的来源: • USACO(碰到难题无法前行怎么办?问度娘~) • Tyvj ,sgu等初级在线测评系统 • NOIP历届试题(起步就做普及组的吧) • 一个建议:可以尝试不使用visual studio,直接在记事本中编写。
调试 • 一个程序写完了,编译不通过,或者WA了 • 大一阶段貌似没有教如何调试程序……
测试 • 测试数据的设计(在线测评系统的又一大弊端) • 设置测试数据的目的: • 我们希望设计这样的测试数据,它能系统的揭示不同类型的错误并且耗费最少的时间和工作量。 • 设置测试数据的一般选择: • 边界数据 • 最大数据 • 随机数据
解题策略 • 毕竟有一个东西名字叫做 机考… • 解题步骤: • 题目大意 • 数据结构分析 • 算法分析 • 调试 • 测试数据设计
题目大意 • 假设考试给你2个小时做3道题,如何分配时间?如何取舍? • 建议不要拿到试卷10分钟内直接开始敲键盘。 • 前30分钟用来把所有题目浏览一遍,整理出题目大意,难度。一些特殊的地方必须留意! • 比如:判重,输出方案数还是方案等等
数据结构分析 • 本题用什么数据结构? • 图?怎么保存?邻接矩阵?关联矩阵? • 数组?大小? • 树?深度?节点数? • 各种变量分别保存什么内容? • 建议:变量名凸显出意义 • 注意:memory limit:以USACO的16M为例基本可以把数组开到4000000左右的大小。 • 实际亲测把数组开打1000000左右visual studio无法运行??……
算法分析 • 解题的关键,只能靠平时的积累。 • 碰到比较难的题一时想不出正确的算法? • 先把最笨最简单的算法搞清楚 • 接下来就是如何改进 • 应试:选用“最笨”的可行的算法。 • 实在不行咱骗总也要骗点吧……. • 注意:time limit:无特殊说明一般是1s • 所以时间复杂度要在108以下
调试+测试数据设计 • 一般前面分析的比较全面的话20分钟都能编完一题 • 重点是一定要自己设计测试数据!
结尾语 • 抱团刷题是王道哦亲!