ACM培训第三周总结

来源:互联网 发布:修改nginx 404页面 编辑:程序博客网 时间:2024/05/16 06:47
   也许是因为培训了一段时间,我开始进入了另一种境界,就是程序常常超时。很多问题,都有相应的想法与解法。但是结果确实超时,因此,开始注意到程序算法与数学的重要性。对于一般的数论题,如果没有找到术的规律程序必然超时,还有教训就是慎用排序算法。本来算法的复杂度为O(N)的,但是因为有排序算法,复杂度变为O(nlogn)因此超时成为必然了。还有就是递归与递推的区别。递归会重复计算子问题。递推则通过子问题向前递推直到问题的解。速度比递归快很多,现在,遇到需要遍历解空间的题我都习惯用回朔的方法解题。事实上大多数题目剪枝都超时,也许是因为我的剪枝还不够狠。搜索题我第一想法是广搜和深搜。但是很多情况事实是超时。因此,改变数据结构变得很重要。如采用链表避免数组移动耗费时间。采用堆排序等。更多实际情况是,采用经过数学优化处理的递归公式。如求最大公约数用辗转相除的方法,避免无用的遍历。如分解大数的素因子,不断的缩小大数的范围。把基本素因子提出来,再用数学公式求出其组合数。很多情况下可以先预处理解空间。前提是在解空间不是一个很大的数。则在循环计算时可以避免重复计算。如建立一个素数表。还有就是在地图中记录路径的技巧。采用二维数组父亲标记的方法,通过儿子(终点)寻找祖先(始点),从二避免了广搜后,回搜原路径采用深搜。 
原创粉丝点击