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

几何法证明卡特兰数_栈混洗

模型

考虑从坐标原点 (0, 0) 到点 (n, n) 的路径,要求路径只能向右(x 方向)或向上(y 方向)移动,并且路径不能越过直线 y = x(即始终满足 y<= x )。这样的路径数量就是卡特兰数 Cn 所表示的组合数量。
 

对于栈的操作:

将入栈约等于向右移动一步(x 方向),出栈约等于向上移动一步(y 方向)。因为栈在任何时刻出栈操作次数不能超过入栈操作次数,所以对应的路径不能越过 y = x 这条线。

设 SP(n) 表示对 n 个元素进行合法栈操作(入栈 n 次,出栈 n 次 ,且任何时刻出栈次数不超过入栈次数 )的序列个数,这就和上述从 (0,0) 到 (n,n) 且不越过 y = x 的路径数建立起一一对应关系。

计算从 (0, 0) 到 (n, n) 的总路径数:
从 (0, 0) 到 (n, n) 总共要走 2n 步,其中 n 步向右,n 步向上,根据组合数公式,总路径数为 

 对于一条越过 y = x 的路径,必然会与直线 y=x + 1 有交点。设第一次与 y=x + 1 相交的点为 P ,将从原点到 P 的路径关于 y=x + 1 对称,再连接对称后的终点与 (n,n) ,可以发现越过 y = x 的路径与从 (0,0) 到 (n - 1,n + 1) 的路径是一一对应的。
从 (0, 0) 到 (n - 1,n + 1) 总共走 2n 步,其中 n - 1 步向右,n + 1 步向上,路径数为

 计算不越过 y = x 的路径数(即卡特兰数 Cn ):
用从 (0, 0) 到 (n, n) 的总路径数减去越过 y = x 的路径数,即

 由于 SP(n) 所代表的合法栈操作序列个数与从 (0,0) 到 (n,n) 且不越过 y = x 的路径数相等,所以

 即 SP(n) 等于卡特兰数。

 

https://dsa.cs.tsinghua.edu.cn/~deng/ds/dsacpp/

https://zhuanlan.zhihu.com/p/166135630?utm_psn=1891333928486429828

 

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

相关文章:

  • 代码随想录|动态规划|21组合总和IV
  • 从零开始:使用Spring Boot和MyBatis实现CRUD操作全攻略
  • 25.Reactor
  • PHP代码审计-01
  • RAGFlow 知识库分段研究
  • 码界奇缘 Java 觉醒 第一章 命运的终端
  • 数据驱动防灾:AI 大模型在地质灾害应急决策中的关键作用。基于DeepSeek/ChatGPT的AI智能体开发
  • 关于inode,dentry结合软链接及硬链接的实验
  • 线性代数:分块矩阵,秩,齐次线性,非齐次线性的解相关经典例题
  • 带头结点 的单链表插入方法(头插法与尾插法)
  • 纪检委行业光盘安全隔离与数据摆渡应用方案
  • 笔记:背包问题总结
  • 【PHP】- 项目通用目录架构及示例demo
  • 【LLM之评测】AlignBench: Benchmarking Chinese Alignment of Large Language Models
  • Docker 常用指令速查
  • TDengine 重磅功能虚拟表
  • Spring Security(maven项目) 3.1.0
  • 青少年编程与数学 02-015 大学数学知识点 06课题、离散数学
  • Linux驱动开发进阶(三)- 热插拔机制
  • Scala基础知识
  • 数据结构学习
  • 混杂模式(Promiscuous Mode)与 Trunk 端口的区别详解
  • UEFI镜像结构布局
  • 蓝桥杯刷题记录【并查集001】(2024)
  • DeepSeek真的超越了OpenAI吗?
  • 黑马点评项目总结
  • 迭代器、迭代对象的 __iter__() 和 __next__()详解
  • 使用Python快速接入DeepSeek API的步骤指南
  • 【Python使用】嘿马python数据分析教程第2篇:会员存量增量分析,增量等级分布分析【附代码文档】
  • 计算机网络-TCP的流量控制