设有一个输入受限的双端队列,有元素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中的任意两个。此时队列中的元素,从左至右为124、134、234中的一种。
(4)当个数为4的时候,队列中一定从左至右是1234。
再分别看这几种情况下的输出序列都有哪些。
在第(1)种情况中,队列中的元素为4,123已经出去了。在4入队以前,因为左右都可以出队列,而且每个元素入队以后可以选择出或者留,甚至可以连续出好几个。并且队列中最多只会有3个元素。所以每个元素都可能是第一个出去的、第二个出去的和第三个出去的。所以在这种情况下所有可能的出队序列是队中元素的全排列为3!=6种,前三位为123的全排列,最后一个元素是4,即所有的可能序列(123的全排列)+4,也就是(123,132,213,231,312,321)+4,也就是为1234,1324,2134,2314,3124,3214
在第(2)种情况里,队列中可能有14、24、34三种情况,每一种情况里,已出去的两个元素,出队顺序是任意的,还在队中的元素,出队顺序也是任意的,所以每种情况都有4种序列,三种情况共有12种情况。分别为,第一种(23的全排列)+(14的全排列),即(23,32)+(14,41),即2314,2341,3214,3241。第二种(13的全排列)+(24的全排列),即(13,31)+(24,42),即1324,1342,3124,3142。第三种,(12的全排列)+(34的全排列),即(12,21)+(34,43),即1234,1243,2134,2143。
在第(3)种情况里,队列中的元素有三种情况124,134,234。当队列中有三个abc元素时,只能有四种出队序列,a+(bc的全排列),(ab)的全排列+c,即a+(bc,cb),(bc,cb)+a,即abc,acb,bca,cba,不可能有b开头的序列。所以第(3)种情况里所有可能的出队序列为:第一种3+(124,142,412,421),即是3124,3142,3412,3421,第二种2+(134,143,413,431),即2134,2143,2413,2431,第三种4+(123,132,312,321),即4123,4132,4312,4321
第(4)种情况,队列中元素为1234,出队序列为1+(234的出队序列)或者4+(123的出队序列),234的出队序列为2+(34的出队序列),4+(23的出队序列),即2+(34,43),4+(23,32),为234,243,423,432。123的出队序列为1+(23的出队序列),3+(12的出队序列),即1+(23,32),3+(12,21),即123,132,312,321。所以1234的出队序列为1+(234,243,423,432),4+(123,132,312,321),即1234,1243,1423,1432,4123,4132,4312,4321。
从上述得到各个序列的过程中通过()展开的方式可以知道,序列数是偶数,所以如果有序列不能通过输入受限的双端队列输出,一定是成对出现。通过对此发现,每个序列前两个数字中,除了42以外,别的都有,所以不能通过输入受限的双端队列输出的序列是42+(13的出队序列),即4213,4231。
还有另外一种思路,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再出。
输入受限的双端队列所能输出的序列
最新推荐文章于 2024-01-25 20:45:58 发布