`

应用卡塔兰数解决出栈分析

阅读更多

今天被一道数据结构习题难住了,觉得挺有意思就写博一篇记录下来,被该题男主并非是不会用编程解决,而是考虑问题思维太狭窄导致的。

 

题目如下:

 

铁路进行列车调度时, 常把站台设计成栈式结构的站台。试问:

设有编号为1,2,3,4,5,6的六辆列车, 顺序开入栈式结构的站台, 则可能的出栈序列有多少种?

 

 

本题题意是,给定一组入栈顺序,可在任意时刻任意出栈,求有多少种出栈方式。

看到题目瞬间就想当然认为是暴力枚举求解这道题,再一看答案,居然是用排列组合解出这道题的,不禁引诱我重新认真思考这道题。

 

 

经过长时间的思考和搜索资料,终于了解到这个题目是用一种叫做:卡塔兰数 的组合数求解的。

 

本问题可以转换为:

对一个2n长度的位串,其中有n个"1",n个"0",从左到右扫描时,"0"出现次数不能比"1"多(第一次出现"0"也作为非法位串)。

 

所以非法情况可以设为:

前2m+1次扫描中,出现了m+1次"0",m次"1"(此处m为小于n/2-1的任意非负整数),此时可确定该组合情况是错误情况,并且存在:后2n-2m-1次操作中,有n-m次"1",n-m-1次"0",此时可进一步分析,假设n-m个"1"与n-m-1个"0"互换,则总共变成了n+1个"0"和n-1个"1"。

 

此时我们猜想:

是否可以设想例外情况就是对n+1个"0"和n-1个"1"的组合?

进一步分析该猜想,对于此组合,"0"的个数比"1"多2个,则必有扫描时,第一次出现"0"的个数大于"1"的个数时,其后位串的所有"1"和"0"数目交换,则最终整个位串变成n个"1"和n个"0"的排序,并且该排序就是我们要找的非法排序。

 

归纳:

由于n+1个"0"和n-1个"1"的组合数可以与例外排序一一映射,所以我们的例外情况总数为:

所以,最终总数为:

 

 

 

 

 

PS:

 

卡塔兰数--wiki

 

卡塔兰数应用丰富,在计算机领域应用很广泛,比如:

 

  • 表示有n个节点组成不同构二叉树的方案数。
  • 表示有2n+1个节点组成不同构满二叉树
  • 表示n个元素依次入栈的出栈顺序数
  • ……

 

分享到:
评论

相关推荐

    出栈序列和卡特兰数

    求出栈序列个数。卡塔兰数是组合数学中一个常出现在各种计数问题中出现的数列。

    卡塔兰数的概述

    之前玩ACM了解的一点信息,共享一下,东西不多,希望能帮到需要的人。

    卡塔兰数原理

    介绍了卡塔兰数的定义及使用场景,针对杭电hdu上的题目给出相关解析。

    卡塔兰数列

    卡特兰数 catalan number 卡特兰数前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440,

    深入理解卡特兰数及其应用

    Catalan number,卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名。...卡特兰数的应用n个元素顺序入栈,出栈顺序

    卡塔兰猜想从一道普特南竞赛试题谈起 [刘培杰数学工作室 编] 2013年版

     《数学中的小问题大定理丛书·卡塔兰猜想:从一道普特南竞赛试题谈起》从一道普特南数学竞赛试题谈起,洋细地介绍了卡塔兰猜想的产生、证明方法及其在数学竞赛试题中的广泛应用。并且针对学生和专业学者,以不同的...

    catanla数问题

    组合数学中有非常多的组合结构可以用卡塔兰数来计数。在Richard P. Stanley的Enumerative Combinatorics: Volume 2一书的习题中包括了66个相异的可由卡塔兰数表达的组合结构。

    C#,卡特兰数(Catalan number,明安图数)的算法源代码

    卡特兰数(英语:Catalan number),又称卡塔兰数、明安图数,是组合数学中一种常出现于各种计数问题中的数列。以比利时的数学家欧仁·查理·卡特兰的名字来命名。1730年左右被蒙古族数学家明安图使用于对三角函数幂...

    明安图、董祐诚、项名达的无穷级数表示法研究

    3.2.1 卡塔兰数的第一种表示法 第63-71页 3.2.2 卡塔兰数的第二种表示法 第71-76页 3.2.3 卡塔兰数的第三种表示法 第76-81页 3.3 无穷级数求反函数的两种表示法 第81-96页 3.3.1 “通弦求弧背法解”中无穷级数...

    吉林大学软件学院组合数学课程报告

    卡特兰数(Catalan Number)是组合数学中应用广泛的重要计数函数,以比利时的数学家欧仁·查理·卡塔兰(1814–1894)的名字来命名,其前几项为(从第零项开始):1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,...

    python 实现 数学中经典问题 课程设计 代码

    二进制指数运算2,二进制指数运算3,二项式系数,二项分布,二分法,卡迈克尔数,卡塔兰数,上取整,检查多边形,楚德诺夫斯基算法,考拉兹序列,组合,十进制分离,十进制转分数,十二面体,双阶乘迭代,双阶乘递归...

    组合论ACM程序设计

    参加acm程序设计的同志请注意收藏,组合论的详细内容都在里面

    ACM算法模板选doc

    卡塔兰数 组合序列 整点三角形 BFS最长路径 树状数组 背包 凸包面积 高精度除法取模 完全匹配KM 字符串KMP 凸包graham算法 输出最短路径 子集 拓扑排序 欧拉函数&素数筛选 Pick定理 高精度浮点数比较 日历 15数码...

Global site tag (gtag.js) - Google Analytics