软考笔记第十五天之数据结构及算法应用

策略:拿填空的那几分6-8足矣

内容提要:

分治法

回溯法

贪心法

动态规划法

分治法(分解、解决、合并):

原理:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决;否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。

要求(可以从递归的角度去思考):

该问题的规模缩小到一定程度就可以容易地解决

该问题可以分解为若干个规模较小的相同问题

利用该问题分解出的子问题的解可以合并为该问题的解

该问题所分解出的各子问题是相互独立的

分治法-递归技术

分治法-二分查找

代码实现:

 1  //用来测试调用函数的次数,与函数本身无关
 2         private static int count = 0;
 3         static void Main(string[] args)
 4         {           
 5             int[] arry = new int[] { 1,5,7,9,12,15,18,29,35,48,68};
 6             int key = BinarySelect(arry, 0, arry.Length - 1, 29);
 7             Console.Write(key+"	"+count);
 8             Console.ReadKey();
 9         }
10         //二分查找法
11         public static int BinarySelect(int[] arry, int start, int end, int value)
12         {
13             count++;
14             if (start > end)
15             {
16                 //遍历结束
17                 return (-1);
18             }
19             else
20             {
21                 //初始化键值
22                 int key = (start + end) / 2;
23                 if (arry[key] == value)
24                 {
25                     //恰好相等,输出结果
26                     return key;
27                 }
28                 else if (arry[key] > value)
29                 {
30                     //键所对的值大于要查找的值,说明查找值在键的前面
31                     return (BinarySelect(arry, start, key - 1, value));
32                 }
33                 else
34                 {
35                     //在键的后面
36                     return (BinarySelect(arry, key + 1, end, value));
37                 }
38             }
39         }

回溯法:

回溯法是一种优先搜索法,按选优条件向前搜索,以达到目标。但当搜索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。这种走不通就退回再走的技术就是回溯法。

试探部分(扩大规模):满足除规模之外的所有条件,则扩大规模

回溯部分(缩小规模):[1.当前规模不是合法解时回溯(不满足约束条件D),2.求完一个解,要求下一解时,也要回溯]

贪心法:

总是做出在当前来说是最好的选择,而并不是从整体上加以考虑,它所做的每一步选择只是当前步骤的局部最优选择,但从整体来说不一定是最优的选择。由于它不必为了寻找最优解而穷尽所有可能解,因此其耗时少,一般可以快速得到满意的解,但得不到最优解。

动态规划法:

在求解问题中,对于每一步决策,列出各种可能的局部解,再依据某种判定条件,舍弃那些肯定不能得到最优解的局部解,在每一步都经过筛选,以每一步都是最优解来保证全局是最优解。

例1:

 

问题2:贪心算法,贪心算法,O(n^2),O(n^2)

例2:

原文地址:https://www.cnblogs.com/pushudepu/p/5969449.html