当前位置: 首页 > news >正文

贪心,回溯,动态规划

1.贪心算法

​ 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望全局最好或是最优的算法。

  1. 特点
    • 局部最优选择
    • 不能保证全局最优
    • 高效
  2. 适用条件
    • 局部最优可以导致全局最优
    • 问题的最优解包含子问题的最优解
  3. 经典问题
    • 活动选择问题
    • 最短路径
    • 最小生成树

2.动态规划

​ 动态规划是一种分治思想,通常将原问题分解为相对简单的子问题的方式来求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的题.

  1. 特点
    • 重叠子问题:问题可以分解成若干子问题,且子问题会重复出现
    • 问题的最优解包含子问题的最优解
    • 存储子问题的解以避免重复计算
  2. 适用条件
    • 局部最优可以导致全局最优
    • 问题的最优解包含子问题的最优解
  3. 经典问题
    • 斐波那契数列
    • 背包问题
    • 最长公共子序列
    • 最短路径问题
  4. 解题步骤
    1. 确定dp数组(dp table)以及下标的含义
    2. 确定递推公式
    3. dp数组如何初始化
    4. 确定遍历顺序
    5. 举例推导dp数组

3.回溯

​ 回溯算法是一种通过探索所有可能的候选解来找出所有解的算法。

  1. 特点

    • 系统性:逐步构建候选解
    • 跳跃性:当发现部分候选解不可能得到正确解时,放弃该解(剪枝)
    • 通常用递归实现
  2. 经典问题

    • 组合问题:N个数里面按一定规则找出k个数的集合
    • 切割问题:一个字符串按一定规则有几种切割方式
    • 子集问题:一个N个数的集合里有多少符合条件的子集
    • 排列问题:N个数按一定规则全排列,有几种排列方式
    • 棋盘问题:N皇后,解数独等等
  3. 代码框架

    void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果}
    }

4.三者区别

在这里插入图片描述

http://www.lqws.cn/news/158671.html

相关文章:

  • HTV 3.3 | 秒播无卡顿 直播源每天维护更新
  • 【定昌linux开发板】关闭ssh 端口 22
  • Rocketmq消息队列 消息模型 详解
  • 虚拟机网络配置
  • css实现文字颜色渐变
  • 深入理解汇编语言子程序设计与系统调用
  • 第十三节:第四部分:集合框架:HashMap、LinkedHashMap、TreeMap
  • MCP通信方式之Streamable HTTP
  • 开始在本地部署自己的 Gitea 服务器
  • 在 Windows 系统安装 Git
  • [Git] 分布式版本控制 远程仓库协作
  • 右值引用和移动语义
  • 基于WSL搭建Ubnutu 20.04.6 LTS(二)-部署Docker环境
  • uniapp中使用aixos 报错
  • echarts在uniapp中使用安卓真机运行时无法显示的问题
  • SSL/TLS握手全流程拆解:从“Hello“到“安全通道“的每一个字节
  • Excel处理控件Aspose.Cells教程:使用 C# 从 Excel 进行邮件合并
  • uniappx插件nutpi-idcard 开发与使用指南(适配鸿蒙)
  • Linux免杀方案汇总(C语言)
  • 工业火焰探测器市场:现状、趋势与发展策略
  • JAVASCRIPT 简化版数据库--智能编程——仙盟创梦IDE
  • Python绘图库及图像类型之高级可视化
  • Axure 与 Cursor 集成实现方案
  • 矩阵分解相关知识点总结(四)
  • 【TinyWebServer】线程同步封装
  • RDMA简介5之RoCE v2队列
  • Git 推送失败解决教程——error: failed to push some refs to
  • Filebeat收集nginx日志到elasticsearch,最终在kibana做展示(二)
  • 代码训练LeetCode(24)数组乘积
  • day028-Shell自动化编程-判断进阶