当前位置: 首页 > 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.三者区别

在这里插入图片描述

相关文章:

  • 从零发布一个 Vue 3 Button 组件到 npm(基于 Vite)
  • 更改安卓虚拟机屏幕大小
  • 计算机基础知识(第四篇)
  • 2025年上海市“星光计划”第十一届职业院校技能大赛 网络安全赛项技能操作模块样题
  • 农田水利如何「聪明」起来?Modbus转Ethernet IP破解设备互联
  • 洛谷题目:P2761 软件补丁问题 (本题简单)
  • linux下覆盖率测试总结
  • App使用webview套壳引入h5(二)—— app内访问h5,顶部被手机顶部菜单遮挡问题,保留顶部安全距离
  • 从Copilot到Agent,AI Coding是如何进化的?
  • [特殊字符] 一文了解目前主流的 Cursor AI 免费续杯工具!
  • 使用logrotate切割nginx日志
  • NX985NX988美光固态闪存NY103NY106
  • 【论文解读】MemGPT: 迈向为操作系统的LLM
  • 【如何做好应用架构?】
  • 基于WSL搭建Ubnutu 20.04.6 LTS(二)-部署Docker环境
  • 【强化学习】——03 Model-Free RL
  • 【前端】js如何处理计算精度问题
  • 并发编程 - go版
  • Go中的协程并发和并发panic处理
  • Ubuntu ssh 永久添加私钥
  • 怎样建设卡盟网站/腾讯广告投放平台
  • 免费ppt模板下载党建/北京网优化seo优化公司
  • wordpress 心理/影视站seo教程
  • 国外做蛋糕网站/推广普通话手抄报模板可打印
  • 天天炫拍免费做相册管方网站下载/软文外链购买平台
  • 做电影网站要很大的主机空间吗/常州网站建设优化