zoukankan      html  css  js  c++  java
  • 软考笔记第十五天之数据结构及算法应用

    策略:拿填空的那几分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:

  • 相关阅读:
    IMYSQL-叶金荣
    mysql命令
    实效云计算用户组(ECUG) 与 阿里云
    GO 语言
    MYSQL 源代码编绎脚本
    MYSQL 源代码学习
    LINUX 性能工具使用
    CentOS 5.8 上安装 systemtap-2.6 转
    mysql php nginx
    redis 安装
  • 原文地址:https://www.cnblogs.com/pushudepu/p/5969449.html
Copyright © 2011-2022 走看看