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

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

首先要明确一点,对于一个两边都可以入队的队列,当预入队元素个数是1,2的时候,入队以后从左到右的序列是元素的全排列,这是很好验证的。但是预入队元素个数>2的时候,1入队,从哪边入队都没区别,2和3从左右入队均会形成两种不同的结果,所以当123连续入队而不出队的时候,只会形成4种序列,3+(12的入队序列),(12的入队序列)+3,而12的入队序列为12,21,所以123连续入队而不出队的时候,形成的序列为3+(12,21),(12,21)+3,即312,321,123,213,所以4先出的时候,不会是全排列,只会是(123入队序列)+4,即(312,321,123,213)+4,即3124,3214,1234,2134,不可能有1324和2314,所以从右边出,不可能有(1324和2314的逆序),即不可能有4231和4132。

其次第一次出队时队列中的情况,可分为这么几种:个数分别为1,2,3,4。

(1)当个数为1的时候,出队元素一定是1,于是(234的入队出队序列)+1,而234中,谁都可能先出,于是234的入队出队序列为(34的入队出队序列)+2,(24的入队出队序列)+3,(12的入队出队序列)+4,即(34,43)+2,(24,42)+3,(23,32)+4,即342,432,243,423,234,324,于是(234的入队出队序列)+1展开为(342,432,243,423,234,324)+1,即3421,4321,2431,4231,2341,3241

(2)当个数为2的时候,队列中一定是21或者12,其中21可能产生的出队序列与第 (1)种情况完全一致。12可能产生的出队序列是第(1)种情况里所有可能结果中把1与2互换位置的结果,即3412,4312,1432,4132,1342,3142

(3)当个数为3的时候,队列中一定是123的输入序列,即312,321,123,213,此时无论出队几个元素,再让4入队,再出队,都相当于在312,321,123,213这四个序列任意一个元素的左侧或者右侧插入4,于是有4312,4321,4123,4213,及3412,3421,1423,2413,及3142,3241,1243,2143,及3124,3214,1234,2134

(4)当个数为4的时候,队列中一定是1234的输入序列,即4+(123的输入序列),(123的输入序列)+4,即4+(312,321,123,213),(312,321,123,213)+4,其结果包含在第(3)种情况中了。

把上述序列综合在一起排序以后得到
1342,1432,1423,1243,1234,
2431,2341,2413,2143,2134,
3142,3412,3421,3241,3412,3421,3142,3241,3124,3214,
4132,4312,4321,4231,4312,4321,4123,4213,

去重以后得到
1342,1432,1423,1243,1234,
2431,2341,2413,2143,2134,
3142,3412,3421,3241,3124,3214,
4132,4312,4321,4231,4123,4213,

1开头的全排列有6个,现在只有5个,少了1324。
2开头的全排列有6个,现在只有5个,少了2314。
3开头的,全排列有6个,现在去重以后确实有6个
4开头的,全排列有6个,现在去重以后确实有6个

所以原本1234的全排列有4!=24个,只缺了2个,即1324和2314,按右侧输出,输出序列为4231和4132。

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

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

12,1入队以后马上出,2入队以后马上出。
13,1入队以后马上出,2入队不出,3入队以后马上出。
14,1入队以后马上出,2和3入队以后不出,4从右侧入队后马上出。
21,1入队后不出,2从右侧入队后,12从右侧出队。
23,1入队后不出,2从右侧入队后马上出,1保留不出,3从右侧入队后马上出。
24,1入队后不出,2从右侧入队后马上出,1保留不出,3入队后保留,4入队以后马上出。
31,1入队以后不出,2从左侧入队,3在2入队以后从右侧入队马上出,1紧随其后出队。
32,1入队以后不出,2从右侧入队不出,3从右侧入队以后马上出,2接着出。
34,1入队以后不出,2从右侧入队不出,3从右侧入队以后马上出,12保留不出,4从右侧入队以后马上出。
以上9种情况,前两位出了以后,要么还有两个数没入队,要么还有一个没入队,要么还有两个在队列里,没入队的都可以通过选择从左边或者右边入队,形成两种不同的出队序列,没出队的两个元素中后入队的那个元素在当初入队的时候可以选择从左边或者右侧入队,便可以形成两种出队序列。所以以上9种情况,对应了18中互不相同的出队序列。
41,要想4先出,1第二个出,23只能在1入队以后从左边入队,所以41开头的只有一种结果4123,不可能有4132
42,要想4先出,2第二个出,只能是2在1入队以后从右侧入队,3从左侧入队,4从右侧入队,所以42开头的只有一种,4213,不可能4231
43,只能34从右侧入队,2从左边或者右边都可以,所以对应43开头的两种出队序列。