[将N个项目插入堆栈。那里有多少个堆叠订单?任务
作者:admin | 来源:百度 | 发布时间:2019-11-07 13:45 | 浏览次数:

品质支持
最近,当我检查数据结构并查看堆栈时,我说在学习数据结构之前我没有考虑这个问题。
我最近一直在研究动态规划,所以三个词“子问题”仍然存在。因此,在解决此问题时,我们还使用了“子问题”方法。需要明确的是,这是一个递归表达式。
当n个元素的堆栈数计为f(n)时,f(1)= 1 // 1f(2)= 2 // 12,21f(3)= 5 //这是123、132、213、321、231。然后考虑f(4),给四个元素分别编号为a,b,c和d,然后考虑它们。仅元素和位置4(很容易理解,位置1中总共有4个位置,例如abcd,元素a)。
分析:1)如果元素a在第一个位置,则可以将其推入堆栈并立即将其删除。此时,其余元素b,c,d等待操作。这是子问题f(3)。2)如果元素a位于位置2,则必须比a首先堆叠一个元素。也就是说,根据乘法原理,f(1)个可能的序列(仅b),以及c,d,即f(2),总阶为f(1)* f(2)。3)如果元素a位于位置3,则堆栈外部必须有两个元素。即,f(2)(仅b,c),d的可能阶数保持不变,即f(1)。根据乘法原理,阶数之和为f(2)* f(1)。4)如果元素a位于第4位,则它必须是高级堆栈。元素b,c,d的最后堆叠顺序是这个小问题,即f(3);结合所有情况,即f(4)= f(3)f(2)* f(1)f(1)* f(2)f(3);为进行归一化,定义f(0)= 1。f(4)可以重写为:f(4)= f(0)* f(3)f(1)* f(2)f(2)* f(1)f(3)* F(0)接下来,概括一个。通常的想法与n = 4时完全相同,因此可以得到f(n)= f(0)* f(n-1)f(1)* f(n-2)。
f(n-1)* f(0)是一个互联网搜索。C(2n,n)/(n1)(C(2n,n)表示2n nn,名称为加泰罗尼亚。
将链接附加到Wiki,并对其进行详细描述。

相关文章: