关于受限的双端队列输入序列1234所得序列问题的详细解答

关于受限的双端队列输入序列1234所得序列问题的详细解答

  • 问题描述
    1.受限的双端队列
    双端队列是指允许两端都可以进行入队和出队操作的数列;
    而受限的双端数列包含两种:
    a.输出受限的双端队列:允许在一段进行插入删除,而另一端只允许插入的双端队列
    b.输入受限的双端队列:允许在一段进行插入删除,而另一端只允许删除的双端队列
    Alt
    2.问题以及答案在这里插入图片描述

  • 解答过程
    我们有两种思考方式,第一种是直接采用枚举法一个个尝试来得出最终答案,显然4个数排列组合会产生24种结果,一个个尝试略显麻烦;那么我们采取另一种方式思考,我们应当考虑哪个数字最先出队,因为我们输入的序列是1234,这表明,4从时间上来看必然是最后进入双端队列的(不管它从哪一端进入)。而我们所得到的输出序列的顺序取决于这三个因素:受限方式、元素出入队列的时间次序、双端队列的切分界限

    举个例子:例如输出序列是3421 所用队列为输出受限的队列
    此时我们可以将该队列一分为二(红线为切分界限,将队列分为左端队列和右端队列)如下图所示:
    在这里插入图片描述
    先将1通过右端入队→再将2左端入队→将3左端入队→3出队(3)→4左端进队→4出队(4)→2出队(2)→1出队(1)
    最终得3421;

    事实上,凡是以123作为首个元素出队的情况都可以通过控制元素出入队列的时间次序进行控制,因此他们输出的先后次序便没有了限制
    只有当4先输出时会产生限制,因此我们只需要研究4先输出的情况,而这种情况也恰恰表明了它已将1234先全部入队之后再进行输出操作
    根据队列以及栈的性质我们不难得出下面两张图:

    1.对于输出受限的双端队列
    Alt
    他的输出结果,根据题意,在对数字序列进行切分后应当一边由大到小排列,另一边由小到大排列(准备考研或者是考过研的同学在学习线性代数的时候应该都知道逆序数的概念,这里用逆序数来理解就相当简单,当然就算你不知道也没有关系)。
    因此,对于4231,无论你在这4个数字的哪个位置划分一条线,都不能得到一边由大到小排列,另一边由小到大排列的情况;4132也是相同的情况。

    2.对于输入受限的双端队列
    Alt
    他的输出结果,根据题意,要以4作为第一个输出元素,那么他的输入顺序一定为1234,因此2不能作为跟在4后面输出的元素(因为他的左右两边夹着1和3,需等待1或3先行输出))
    对于4231 4213都不满足上面的要求。(解答完毕)

因此,我们针对该问题得出结论
1.只有当4先输出时会产生限制,因此我们只需要研究4先输出的情况
2.在这种情况下,输出受限双端队列的输出结果需符合:切分后应当一边由大到小排列,另一边由小到大排列;输入受限双端队列的输出结果需符合:固定顺序输入,2不能跟在4后面输出。

最后引用一下严蔚敏的解答帮助加深认识和理解:Alt
参考引用(抓紧时间就不计较格式了):
[1].《王道考研系列.2020数据结构考研考研复习指导》.
[2].《数据结构》.严蔚敏 著.
[3].CSDN文章:受限的双端队列

  • 36
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值