输入受限的双端队列所能输出的序列

设有一个输入受限的双端队列,有元素1,2,3,4,并按照1,2,3,4的顺序入队,在入队过程中只要队列不空便可以随意出队。请列出所有可能的出队序列。假设从右端输入。

解:4个元素,全排列数为4!=24种序列,需要一一验证这24种序列中哪些满足,哪些不满足。

首先要明确一点,对于一个两边都可以出的队列,当预入队元素个数是1,2,3的时候,出队序列是元素的全排列,这是很好验证的(因为可以随时出队)。但是预入队元素个数>3的时候,出队序列就不是队中元素的全排列了。

我们从这样一个角度来考虑这个问题,在最后一个元素入队以后,队中可能出现的情况。因为入队序列为1,2,3,4,最后一个进入队列的元素是4,每个元素入队都可以选择是否留下,所以当4进入队列以后队列中可能的元素个数为1、2、3、4。

(1)当个数为1的时候,这个元素必然是4;

(2)当个数为2的时候,这两个元素中必然有一个是4,另一个可能是1、2、3中的任意一个。此时队列中的元素,从左至右为14、24、34中的一种。

(3)当个数为3的时候,三个元素中必然有一个是4,另外两个是123中的任意两个。此时队列中的元素,从左至右为124134234中的一种。

(4)当个数为4的时候,队列中一定从左至右是1234

再分别看这几种情况下的输出序列都有哪些。

在第(1)种情况中,队列中的元素为4,123已经出去了。在4入队以前,因为左右都可以出队列,而且每个元素入队以后可以选择出或者留,甚至可以连续出好几个。并且队列中最多只会有3个元素。所以每个元素都可能是第一个出去的、第二个出去的和第三个出去的。所以在这种情况下所有可能的出队序列是队中元素的全排列为3!=6种,前三位为123的全排列,最后一个元素是4,即所有的可能序列(123的全排列)+4,也就是(123132213231312321)+4,也就是为123413242134231431243214

在第(2)种情况里,队列中可能有14、24、34三种情况,每一种情况里,已出去的两个元素,出队顺序是任意的,还在队中的元素,出队顺序也是任意的,所以每种情况都有4种序列,三种情况共有12种情况。分别为,第一种(23的全排列)+(14的全排列),即(23,32)+(14,41),即2314234132143241。第二种(13的全排列)+(24的全排列),即(13,31)+(24,42),即1324134231243142。第三种,(12的全排列)+(34的全排列),即(12,21)+(34,43),即1234124321342143

在第(3)种情况里,队列中的元素有三种情况124134234。当队列中有三个abc元素时,只能有四种出队序列,a+(bc的全排列),(ab)的全排列+c,即a+(bc,cb),(bc,cb)+a,即abc,acb,bca,cba,不可能有b开头的序列。所以第(3)种情况里所有可能的出队序列为:第一种3+(124142412421),即是3124314234123421,第二种2+(134143413431),即2134214324132431,第三种4+(123132312321),即4123413243124321

第(4)种情况,队列中元素为1234,出队序列为1+(234的出队序列)或者4+(123的出队序列),234的出队序列为2+(34的出队序列),4+(23的出队序列),即2+(34,43),4+(23,32),为234243423432123的出队序列为1+(23的出队序列),3+(12的出队序列),即1+(23,32),3+(12,21),即123132312321。所以1234的出队序列为1+(234243423432),4+(123132312321),即12341243142314324123413243124321

从上述得到各个序列的过程中通过()展开的方式可以知道,序列数是偶数,所以如果有序列不能通过输入受限的双端队列输出,一定是成对出现。通过对此发现,每个序列前两个数字中,除了42以外,别的都有,所以不能通过输入受限的双端队列输出的序列是42+(13的出队序列),即42134231


还有另外一种思路,1234的全排列,前两个的组合无非是A{4,2}=12种组合,可一一验证是否可行。

12
13
14
21
23
24
31
32
34
41
42
43

只有42不可能。
12可让12入队后马上出队。
13可以让123连续入队,1从左出,3从右出。
14,让1234连续入队,1从左出,4从右出。
21,12入队以后,2先从右边出,1再从左边出。
23,12入队以后2先出,1保留,3入队以后马上出队。
24,12入队以后2先出,1保留,3入队以后保留,4入队马上出队
31,123入队以后3从右边出,1从左边出
32,123入队以后,从右边3先出,2后出
34,123入队以后3立即出队,然后4入队立即出队
41,1234入队,4从右边出,1从左边出
42,做不到,4第一个出,说明123还在队列里面,4出队以后,只能是1或3出队,2没法第二个出
43,1234入队,从右边4先出,3再出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值