专题二总结报告

来源:互联网 发布:知柏地黄丸成分 编辑:程序博客网 时间:2024/05/01 22:37

一 ·首先是在写程序时遇到运算符,应该考虑的问题:

(1) 一旦做乘法和加法(尤其乘法),就要考虑到会不会有整数溢出的现象,要用32位整数还是64位还是大整数.

(2)一旦在有取模的运算中,做减法一定要考虑会不会出现负数,负数取模在不同的语言中结果是不一样的,所以最好的做法是加特判。

(3)一旦有除法的运算,一定要考虑除数是否为0,有的话就要写特判。

二·关于深度优先搜索和广度优先搜索:

(1)深度优先搜索的特点是:无论问题的内容和性质以及求解要求如何不同,它们的程序结构都是相同的,即都是深度优先算法

(2)深度优先搜索法有递归以及非递归两种设计方法。一般的,当搜索深度较小、问题递归方式比较明显时,用递归方法设计好,它可以使得程序结构更简捷易懂。当搜索深度较大时,当数据量较大时,由于系统堆栈容量的限制,递归容易产生溢出,用非递归方法设计比较好。

(3)深度优先搜索方法有广义和狭义两种理解。广义的理解是,只要最新产生的结点(即深度最大的结点)先进行扩展的方法,就称为深度优先搜索方法。在这种理解情况下,深度优先搜索算法有全部保留和不全部保留产生的结点的两种情况。而狭义的理解是,仅仅只保留全部产生结点的算法。本书取前一种广义的理解。不保留全部结点的算法属于一般的回溯算法范畴。保留全部结点的算法,实际上是在数据库中产生一个结点之间的搜索树,因此也属于图搜索算法的范畴。

(4)不保留全部结点的深度优先搜索法,由于把扩展望的结点从数据库中弹出删除,这样,一般在数据库中存储的结点数就是深度值,因此它占用的空间较少,所以,当搜索树的结点较多,用其他方法易产生内存溢出时,深度优先搜索不失为一种有效的算法。

(5)从输出结果可看出,深度优先搜索找到的第一个解并不一定是最优解.

如果要求出最优解的话,一种方法将是后面要介绍的动态规划法,另一种方法是修改原算法:把原输出过程的地方改为记录过程,即记录达到当前目标的路径和相应的路程值,并与前面已记录的值进行比较,保留其中最优的,等全部搜索完成后,才把保留的最优解输出。

三,做题注意事项:

(1)有些题目其实是找规律的题目,不要被题目复杂的条件,和很大的数据范围(往往也说明了这些题是有规律的)吓到。可以先从小规模样例入手,还可以先解决去掉一个限制条件的问题,通过这个思路再解决原问题。

(2)注意转化思想,不能太古板,二分搜索不只是查找,还可用于最优解问题。假设结果为x(这样就多了一个条件),然后二分这个x,这样就把最优化问题转化为了判定问题。(有些问题做优化可能不知道如何下手,但转成判定问题就很简单了)

(3)注意把握要领,搜索算法和动态规划算法,都是在多种策略中选取最优解,而贪心算法则不同,它遵循某种规则,不断的选取当前最优策略。

(4)要有好的解题方法,对数据合理的组织(排序,堆),是优化时间的常用方法,也是我们设计数据结构最重要的因素之一,因为多次查找的需要,我们才对一个字典进行排序,这样每次查起来就快很多。如果只用查一次,那我就没有必要对字典排序了。

总结:知识都是学出来的,掌握好的解题方法,有好的解题思想,同时灵活智用,这才是王道 !

 



0 0
原创粉丝点击