美文网首页
【卡塔兰数】假定有A,B,C,D依次进栈,进栈过程中允许出栈,写

【卡塔兰数】假定有A,B,C,D依次进栈,进栈过程中允许出栈,写

作者: 听力巴士 | 来源:发表于2019-07-07 20:28 被阅读0次

母题:N个数依次入栈,出栈顺序有多少种?

答案:Catalan number 卡塔兰数

Catalan number

常规分析

  1. 首先,我们设f(n)代表序列个数为n的出栈序列种数。
f(1) = 1     //即 1
f(2) = 2     //即 12、21
f(3) = 5     //即 123、132、213、321、231
  1. 第一个出栈的序数k将1~n的序列分成两个序列:其中一个是1 ~ k-1,序列个数为k-1;另外一个是k+1~n,序列个数是n-k。
1 2 3 4 5   6   7 8 9
1 2 3 4 5  //其中一个是1 ~ k-1,序列个数为k-1;   6-1=5
7 8 9        //另外一个是k+1~n,序列个数是n-k。   9-6=3
  1. 此时,我们若把k视为一个确定的序数,那么根据乘法原理,f(n)的问题就等价于序列个数为k-1的出栈序列种数乘以序列个数为n - k的出栈序列种数,即选择k这个序数的出栈组合为f(k-1)×f(n-k)。
f(4) = f(0)*f(3) + f(1)*f(2) + f(2) * f(1) + f(3)*f(0)  //f(0)=1, f(1)=1
  1. 而k可以选1到n,所以再根据加法原理,将k取不同值的序列种数相加,得到的总序列种数为:
f(n) = f(0)*f(n-1) + f(1)*f(n-2) + ... + f(n-1)*f(0)  //f(0)=1, f(1)=1

相关文章

  • 【卡塔兰数】假定有A,B,C,D依次进栈,进栈过程中允许出栈,写

    母题:N个数依次入栈,出栈顺序有多少种? 答案:Catalan number 卡塔兰数 常规分析 首先,我们设f(...

  • 用两个栈实现队列

    入队:将元素进栈A 出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果...

  • 每天五道面试题(3)

    如何用两个栈做一个队列 进队:一号栈进栈出队:如果二号栈为空,则一号栈出栈依次到二号栈,二号栈依次出栈。如果二号栈...

  • 亲身经历的面试题继续分享

    [单选题]一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈...

  • 数据结构之——栈

    栈的规则 先进后出。如:依次入栈顺序为:A,B,C,D;怎出栈顺序为:D,C,B,A . 二叉树和表达式 表达式的...

  • 栈的逻辑结构和存储结构

    main()进栈s(1)进栈s(0)进栈 s(0)出栈s(1)出栈main()出栈 顺序栈 一个数组 + 指向栈顶...

  • 栈与队列的第一波总结

    栈 栈的数学性质 n个不同元素进栈,出栈元素不同排列的个数为,公式称为卡特兰数。 栈的顺序存储 栈是一种操作受限的...

  • 剑指offer 面试题7:用两个栈实现队列

    题目:用两个栈实现一个队列 解法:有两个栈A、B,入队时往A栈入,出栈时,如果B栈为空,则把A栈依次出栈入B栈,然...

  • 栈和队列

    1、栈 栈是一种先进先出的数据结构。栈顶进栈,栈顶出栈。 数据结构 栈的初始化 进栈 出栈 栈的最小值 2、队列 ...

  • 面试算法题1

    ●出栈合法问题:都知道栈遵守"先进后出"原则,有n个数字,按照1到n的顺序依次进栈。假设n为5,那么出栈顺序(1,...

网友评论

      本文标题:【卡塔兰数】假定有A,B,C,D依次进栈,进栈过程中允许出栈,写

      本文链接:https://www.haomeiwen.com/subject/pssihctx.html