卡特兰数、真二叉树、出栈序列、n对括号合法表达式

news2024/9/20 14:41:10

一、本文主要介绍一下几个问题

  • 什么是卡特兰数
  • n对括号组成的合法表达式个数与卡特兰数的关系
  • 真二叉树的形态总数与卡特兰数的关系
  • n个互异元素出栈序列数与卡特兰数的关系

1、什么是卡特兰数

        卡特兰数是指满足以下递推关系的数:

h(n)=\sum_{k=0}^{n-1} h(k)*h(n-1-k)

这个数跟斐波拉契数列一样是一个递归定义的数,卡特兰数又写作Catalan(n)

2、n对括号组成的合法表达式个数与卡特兰数的关系

        假设n对括号组成的合法字符串种类数为h(n)。
        由组合数计数原理,可以分情况求和,分为n-1种情况。将所有的括号分为三类:

1) 第一个左括号以及其对应的右括号,分别记为A与B
2) AB之间的括号,设有k对括号
3) B右侧的括号,显然有n-1-k对括号

        显然k的取值范围从0到n-1,对应了n种基本情况。

        每种情况的字符串组合数均等于2)中的括号的组合数,与3)中的括号的组合数之积。

        而2)和3)分别对应规模大小为k与n-1-k的子问题,所以相应的组合数分别是h(k)和h(n-1-k)。所以总的字符串组合数=n种情况的组合数的求和,所以 

h(n)=\sum_{k=0}^{n-1} h(k)*h(n-1-k)

 上式中的h(n)是符合卡特兰递推公式的,所以n对括号组成的合法表达式个数=Catalan(n)

3、真二叉树的形态数与卡特兰数的关系

        设真二叉树结点总数为n,根据结点数与边数的数学关系可知,内结点个数m为(n-1)/2,也就是个说,总的节点数确定时,其无论形态如何变化,其内结点个数不变,叶结点个数也不变。

        设内结点数为m的真二叉树形态数为h(m),其左子树的内结点个数k可以从0变化到m-1,对应了m种情况,右子树内结点个数为m-1-k,所以:

左子树的形态数为h(k),右子树的形态数为h(m-1-k)

所以有:

h(m)=\sum_{k=0}^{m-1} h(k)*h(m-1-k)

 上式中的h(m)是符合卡特兰递推公式的,所以含有m个内节点的真二叉树的形态数h(m)

h(m)=Catalan(m)=Catalan((n-1)/2)

4、n个互异元素出栈序列数与卡特兰数的关系

        设n个互异的元素,依次入栈,随时出栈,可连续出栈,设总序列数为h(n).
        仍然是根据组合数学分类统计原理,分类求和。按第一个元素A在出栈序列中的位置,分为n种情况。设出栈序列中元素A左侧元素个数为k=0,1,2,…,n-1,右侧元素有n-1-k个,这样就变成了两个规模更小的子问题,左边的序列数为h(k),右边的序列数为h(n-1-k),于是总的序列数h(n)有:

h(n)=\sum_{k=0}^{n-1} h(k)*h(n-1-k)

 上式中的h(n)是符合卡特兰递推公式的,所以n个互异元素出栈序列数=Catalan(n)

5、上述三个问题的联系

        n对括号组成的合法表达式,将左括号看作入栈操作,右括号看作出栈操作,则n对括号组成的合法表达式与n个互异元素的出栈序列是同一个问题。

        含有m个内结点的真二叉树,无论是先序遍历、中序遍历、后序遍历,将从左分支前进看作入栈,从右分支返回父节点看作出栈,由于任意一个内节点既有左孩子又有右孩子,所以出栈入栈是匹配的,还对应于相互匹配的左括号和右括号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/31198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾格尔刚刚参加线上演唱会,又传《巴林塔娜》合作主题曲身价倍增

俗话说:人逢喜事精神爽。没有想到音乐老前辈腾格尔,因为一场线上演唱会,又枯木逢春老树发新芽了。说起音乐人腾格尔,这位来自草原上的歌神,曾经有很多部草原歌曲,都给大家留下了非常深刻的印象。 在腾格尔老…

顶象首届业务安全保卫战完美落幕,快来看看TOP10里有没有你!

今年双十一,顶象特别发起了首届业务安全保卫战,旨在召集白帽子们为业务安全贡献自己的一份力量。历经一个月,顶象首届业务安全保卫战已于20日正式落下帷幕。 截止11月20 日,顶象业务安全保卫战通过审核的业务安全情报&业务安…

会议信息管理系统SSM记录(五)

目录: (1)搜索员工 (2)查看会议室 (3)会议室详情 (4)添加会议室 (1)搜索员工 创建EmployeeController: public static final Inte…

11.23二叉树

目录 一.笔试强训习题订正 1.选择题 2.编程题-组队竞赛 3.删除公共字符 解法1 哈希映射思想 解法2 暴力解法 解法3 substring解法replaceAll() 二.二叉树相关Oj题 1.二叉树的遍历 2.二叉树分层遍历 三.二叉树的最近公共祖先 1.思路一 2.思路2 四.将二叉搜索树转化…

力扣(LeetCode)795. 区间子数组个数(C++)

模拟 有一种构想,只考虑上边界,在小边界和大边界之间的连续子数组个数 小于等于大边界的连续子数组个数 −-− 小于小边界的连续子数组个数。 连续子数组个数计算公式 sumn(n1)2sum \dfrac{n\times (n1)}{2}sum2n(n1)​ 长度为 nnn 的小于某上界的区间…

UML建模

UML定义了行为图(动态)和状态图(静态)两大类。(分类依据:对象是否根据时间变化) 下面简介一下用例图、类图、时序图和状态图的概念。 “41”视图模型 逻辑视图:逻辑试图主要是用来…

CV攻城狮入门VIT(vision transformer)之旅——近年超火的Transformer你再不了解就晚了!

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊专栏推荐:深度学习网络原理与实战 🍊近期目标:写好专栏的每一篇文章 🍊支持小苏:点赞👍🏼、…

PowerJob 定时从SFTP下载文件踩的坑

一. 业务需求 SFTP上有多个目录, 每小时要下载一次文件, 每个目录的下载任务都是一个独立的工作流任务. 二.问题描述 手动执行每个任务可以正常执行, 但是当所有任务都开启定定时任务执行时(每小时执行一次),任务实例就会报错. 三.问题分析 查看服务端和worker端的日志, …

【ML特征工程】第 2 章 :简单数字的花式技巧

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

PDF怎么转换成Word?给大家分享三种简单的转换方法

我们怎么把拿到手的PDF文件转换成Word文档格式呢?众所周知,PDF文件虽然没有办法能够直接在文件上进行编辑,但是我们可以借助一些编辑软件来实现这一操作,尽管这样还是会有很多小伙伴习惯在Word中来编辑文件内容,因此怎…

EasyRecovery2023重新找回丢失的文件数据恢复软件

Ontrack EasyRecovery2023易恢复一款数据文件恢复软件,号称最好的数据恢复软件!可以全面恢复删除丢失数据,能对电脑误删文件恢复,格式化硬盘数据恢复,手机U盘数据恢复等等,威力非常的强大!支持恢…

运动耳机怎么选,盘点目前适合运动的几款耳机

​相对于传统耳机而言,现如今越来越多的人喜欢使用骨传导耳机,毕竟无需入耳不管是在运动还是日常,防丢能力会更加好,耳挂式的佩戴更加不用担心在剧烈运动的情况下脱落,但在骨传导耳机中已经有了很多个品牌入驻&#xf…

先聊聊「堆栈」,再聊聊「逃逸分析」。Let’s Go!

要搞清楚GO的逃逸分析一定要先搞清楚内存分配和堆栈: 内存分配既可以分配到堆中,也可以分配到栈中。 什么样的数据会被分配到栈中,什么样的数据又会被分配到堆中呢? GO语言是如何进行内存分配的呢?其设计初衷和实现原…

云原生丨5大Datadog集成,快速提高团队效率!

Datadog是DevOps、开发人员和 SRE 团队的必备好物,它适用于各种规模的云应用程序。 然而,尽管 Datadog 功能十分强大,但大多数企业并没有充分发挥 Datadog 全部价值。 什么是 Datadog Datadog 是一个可观察性平台,提供监控、安…

3.1、数据链路层概述

3.1、数据链路层概述 3.1.1、数据链路层在网络体系结构中所处的地位 如下所示,主机 H1 给主机 H2 发送数据,中间要经过三个路由器和电话网、局域网以及广域网等多种网络 从五层协议原理体系结构的角度来看: 主机应具有体系结构中的各个层…

使用HTML制作静态网站:传统文化戏剧锡剧带psd设计图(2个页面)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【项目_01】搭建项目基本框架、底部tabbar、头部banner | 旅途拾景 | 基于Vue3全家桶

💭💭 ✨:搭建项目基本框架、底部tabbar、头部banner| 路途拾景 | 基于Vue3全家桶   💟:东非不开森的主页   💜: 因为很多东西来不及去做去看可是时间很快总是赶不上,所以要去成长呀&#x1f4…

作业-11.23

1、广播 接收端 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <stdlib.h> #include <netinet/in.h> #include <netinet/ip.h> #include <arpa/inet.h> #include <unistd.h> #include <str…

Diffusion Autoencoders: Toward a Meaningful and Decodable Representation

​ Diffusion Autoencoders: Toward a Meaningful and Decodable Representation 扩散自编码器:面向有意义和可解码的表示 code&#xff1a;https://github.com/phizaz/diffae A CVPR 2022 (ORAL) paper (paper, site, 5-min video) Diffusion probabilistic models (DPMs) hav…

算法设计与分析 SCAU17089 最大m子段和

17089 最大m子段和 时间限制:1000MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: G;GCC;VC;JAVA Description “最大m子段和”问题&#xff1a;给定由n个整数&#xff08;可能为负&#xff09;组成的序列a1、a2、a3、…、an&#xff0c;以及一个正整数m&a…