第1章算法概述(1)算法的性质包括输入、输出、确定性、有限性
(2)算法复杂性:算法所运行所需要的计算机资源的量,所需资源多,算法的复杂性高;反之则复杂性低
时间复杂性:需要时间资源的量(指令数)空间复杂性:需要空间资源的量(存储器的大小)(3)计算题第2章递归与分治策略(1)分治法主要思想:将一个规模为n的问题分解为k个规模较小子问题,这些子问题互相独立且与原问题相同,递归解决这些子问题,然后将各子问题的解合并得到原问题解
(2)使用分治算法找一组数的最大最小数
采用如下设计思想:将数据集S均分为S1和S2;求解S1和S2中的最大和最小值;最终的最大和最小值可以计算得到:min(S1,S2),max(S1,S2);采用同样的处理方法递归处理S1和S2
可以得到该算法复杂性的递推公式如下根据递推公式推导出该复杂性表达式:3)分治法所能解决的问题具有的特征
(1)该问题规模缩小到一定的程度就可以容易地解决;因为问题的计算复杂性一般是随着问题规模的增加而增加,因此大部分问题满足这个特征
(2)该问题可分解为若干个规模较小相同问题,即该问题具有“最优子结构性质”
这条特征是应用分治法前提,它也是大多数问题可满足的,反映了递归思想的应用
(3)利用该问题分解出的子问题的解可以合并为该问题的解
能否利用分治法完全取决于问题是否具有这条特征,如果具备了前两条特征,而不具备第三条特征,则可以考虑贪心算法或动态规划
(4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题
这条特征涉及到分治法的效率,如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然也可用分治法,但一般用动态规划较好
4)数组A含有9个元素,这些元素恰好是第2至第10个Fibonacci数,写出在数组A中查找x=17的二分查找过程(写出过程即可,不需要写代码)