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

【动态规划】卡特兰数

在这里插入图片描述

  • 卡特兰数简介
  • 一、[不同的二叉搜索树](https://leetcode.cn/problems/unique-binary-search-trees/description/)
  • 结尾

卡特兰数简介

卡特兰数是组合数学中一组极具代表性的数列,由比利时数学家欧仁・查理・卡特兰首次系统研究,因此得名。它在许多看似无关的场景中频繁出现,例如括号匹配、二叉树构造、路径规划等,是解决 “计数类组合问题” 的核心工具之一。

卡特兰数的本质是对 “有约束的选择问题” 中合法方案的计数—— 通常场景是 “两种操作(如‘进’与‘出’、‘左’与‘右’),且某一操作的次数不能超过另一操作”,最终通过 “反射原理” 证明合法方案数为卡特兰数。

卡特兰数与背包问题的区别

  • 卡特兰数与背包问题(0-1 背包、完全背包)虽同属组合计数,但核心差异明显:
    • 背包问题:关注 “在资源约束下(如重量、体积),选择物品的最大价值 / 方案数”,约束是 “资源总量不超过上限”,且物品选择是 “子集 / 多重选择”;
    • 卡特兰数:关注 “两种操作的顺序约束(如左括号 >= 右括号、向右步数 >= 向上步数)”,约束是 “过程中的局部限制”,且方案是 “顺序相关的排列 / 划分”。

一、不同的二叉搜索树

题目描述
在这里插入图片描述

思路讲解
本道题需要我们根据整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的二叉搜索树种数,以下是本道题的具体思路:

在这里插入图片描述

  1. 状态表示
    • dp[i]:表示由 i 个节点组成的不同二叉搜索树的种数
  2. 状态转移方程
    • 对于节点数 i,考虑以每个节点 j(1 <= j <= i)作为根节点的情况:
      • 左子树由 j-1 个节点组成,对应的二叉搜索树种数为 dp[j-1]
      • 右子树由 i-j 个节点组成,对应的二叉搜索树种数为 dp[i-j]
      • 以 j 为根的二叉搜索树的种数为左子树和右子树的种数乘积,即 dp[j-1] * dp[i-j]
      • 因此,状态转移方程为:
        • dp[i] = sum(dp[j-1] * dp[i-j])(其中 j 从 1 遍历到 i)
  3. 初始化
    • dp[0] = 1:表示 0 个节点组成的二叉搜索树有 1 种(空树),作为的基础情况
    • 其他 dp[i] 初始为 0:默认初始状态下没有对应的二叉搜索树
  4. 填写 DP 表
    • 外层遍历节点数:i 从 1 到 n,依次计算每个节点数对应的二叉搜索树种数
    • 内层遍历根节点:j 从 1 到 i,依次将每个节点作为根节点,累加对应的二叉搜索树种数
  5. 结果返回
    • 返回 dp[n],即由 n 个节点组成的不同二叉搜索树的总种数

编写代码

class Solution {
public:int numTrees(int n) {vector<int> dp(n+1,0);dp[0] = 1;for(int i = 1 ; i <= n ; i++){for(int j = 1 ; j <= i ; j++){dp[i] += dp[j-1] * dp[i-j];}}return dp[n];}
};

结尾

如果有什么建议和疑问,或是有什么错误,大家可以在评论区中提出。
希望大家以后也能和我一起进步!!🌹🌹
如果这篇文章对你有用的话,希望大家给一个三连支持一下!!🌹🌹

在这里插入图片描述

http://www.dtcms.com/a/350526.html

相关文章:

  • 文件读取结束的判定方法:正确使用feof函数避免文件读取错误
  • CAN总线详解(四)CANFD报文结构
  • 小红书链接uid等批量转换,界面软件工具
  • 【COMSOL】COMSOL帮助文档无法打开的解决办法
  • 智能专网升级:4G与5G混合组网加速企业数字化转型
  • leetcode算法刷题的第十七天
  • 房地产模式的运行逻辑与内在风险
  • Acrobat DC 中的条件格式化
  • 失眠——记录安东尼威廉饮食习惯的250天
  • 推三返一链动模式裂变图解
  • 用Python的Requests+BeautifulSoup爬取微博热搜榜及话题内容
  • SSM从入门到实战:3.1 SpringMVC框架概述与工作原理
  • 音视频学习(五十八):STAP-A模式
  • 编写Linux下usb设备驱动方法:probe函数中要完成的任务
  • 麦特轮巡线避障小车开发
  • IEEE子刊 | 注意缺陷多动障碍的功能连接模式:近红外机器学习研究
  • QML中的QtObject
  • QT新建文件或者项目解释:那些模板分别是什么意思?
  • 前端部署终极详细指南
  • 容器日志收集配置在云服务器环境中的集成方案
  • JWT用户认证后微服务间如何认证?(双向TLS(mTLS)、API网关、Refresh Token刷新Token)微服务间不传递用户认证Token
  • C-JSON接口的使用
  • 【什么是端到端模型】
  • 益莱储@PCIe技术大会
  • Bright Data 代理 + MCP :解决 Google 搜索反爬的完整方案
  • WPF 参数设置界面按模型字段自动生成设置界面
  • Docker:网络连接
  • python面试题目100个(更新中预计10天更完)
  • 深度学习(二):数据集定义、PyTorch 数据集定义与使用(分板块解析)
  • 决策树原理与 Sklearn 实战