软件工程师——(十六)数据结构级算法应用(难点-针对下午题)

53 阅读3分钟

1. 分治法

image.png

1.基本说明

  • 1、基本思想
    • 分而治之,大问题拆解成小问题,降低解决难度
  • 2、分解注意点
    • 1)该问题的规模缩小到一定的程度就可以容易地解决
    • 2)该问题可以分解为若干个规模较小的相同问题利用
    • 3)该问题分解出的子问题的解可以合并为该问题的解
    • 4)该问题所分解出的各个子问题是相互独立的
  • 3、步骤
    • 1)分解
    • 2)解决
    • 3)合并

2. 分治法———递归技术(在运行的过程中,自己调用自己)

image.png

3. 分治法———二分查找

image.png

  • 1、输入参数说明
    • L———查找的数列
    • a———起点
    • b———终点
    • x———要查找的元素

2. 回朔法———一步一步探到底,走不通回到分叉路再探,不断重复

image.png

  • 1、说明
    • 一种深度优先搜索法
  • 2、主要解决的问题
    • 比如:迷宫问题

3. 贪心法———每一步最优,得到的结果不一定最优

image.png

  • 1、基本思想
    • 根据一个标准,不断的获取最好的,但是得不到最优解
  • 2、经典实例
    • 0-1背包问题(一样最多有一个)
      • 1)获取(所有项的公约数),计算(每个项公约价值(单位价值*公约数))
        • 物品1、物品2、物品3———空间公约数=10
        • 物品1————公约价值=140/(20/10)=70
        • 物品2————公约价值=180/(30/10)=60
        • 物品3————公约价值=200/(40/10)=50
      • 2)依次(公约价值价值从低到高)从中挑选公约价值最高
        • 公约价值价值从低到高排序为———物品1、物品2、物品3
        • (总空间=70),选物品1装入后,剩余空间50
        • 再次选物品2装入后,剩余空间20
        • 再装不下物品3
      • 3)得到结论
        • 物品1、物品2———总价值为320———不是最优解
      • 4)说明
        • 其实最优解为(物品2、物品3)

4. 动态规划法(逻辑最复杂)

image.png

  • 1、基本思想
    • 大问题分子问题
    • 解决每一个子问题,使用表存起来
    • 处理表,得到结果
  • 2、识别———都要用的查表的方式

5. 例题示例

1. 试题1

image.png image.png image.png image.png

  • 0、代码角度求复杂度———选最高的
    • 赋值常数级———O(1)
    • 单层循环———O(n)
    • 双层循环———O(n^2)
  • 1、问题分析
    • 问题1
      • (1)———j = 0;
      • (2)———b[j]=b[j]+S[i];
      • (3)———min=temp
      • (4)———b[m]=b[m]+S[i];
    • 问题2
      • (5)———贪心算法
      • (6)———贪心算法
      • (7)———O(n^2)
      • (8)———O(n^2)
    • 问题3 image.png
      • (9)———5
      • (10)———4
      • (11)———否

2. 试题2

image.png image.png image.png image.png

  • 1、问题分析
    • 问题1
      • (1)———k <= r;
      • (2)———arr[k] = right[j];
      • (3)———begin < end
      • (4)———mergeSort(arr,mid+1,end);
    • 问题2
      • (5)———分治法
      • (6)———T(n)=2T(n/2)+O(n)
      • (7)———O(nlogn)
      • (8)———O(n)
    • 问题3
      • (9)———n1+n2 image.png
      • (9)———5
      • (10)———4
      • (11)———否