软件设计师-算法

634 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情

回溯法

  • 一种深度优先搜索方法

N皇后问题

  • N皇后问题是回溯法的典型实例 image.png

image.png

分治法

递归

递归的两个基本要素:

  • 边界条件,即确定递归到何时终止,也称为递归出口
  • 递归模式,即大问题属如何分解为小问题的,也称递归体 image.png
  • 递归典型实例--阶乘函数

image.png

分治法的基本思想

分治算法在每一层递归上都有3个步骤:

  • 分解,将原问题分解成一系列子问题
  • 求解,递归地求解各个子问题,如果问题足够小,则直接求解
  • 合并,将子问题的解合并成原问题的解 image.png

分治法的典型实例

  • 快速排序
  • 归并排序
  • 最大子段和问题

最大子段和问题的时间复杂度为:O(nlgn)O(nlgn)

image.png

动态规划法

  • 动态规划法以获取问题最优解为目标

动态规划法的基本思想

image.png

动态规划法的基本步骤

image.png

动态规划法的性质

  • 最优子结构
  • 重叠子问题

image.png

  • 动态规划法的典型实例
  • 最长公共子序列
  • 0-1背包问题 时间复杂度为:O(NW)O(NW)

image.png

  • 矩阵连乘

image.png

贪心法

贪心法的基本思想

  • 求解局部最优解,近似最优解

image.png

贪心法的性质

  • 最优子结构
  • 贪心选择性质 image.png

分支界限法

  • 一种广度优先搜索方法