音乐家观演问题通解再探
音乐家观演问题描述参见:音乐家观演问题求解与拓展分析 和 音乐家观演问题通解初探。
由n=10到n=2m
这里对音乐家观演问题编程求解(二)为n=10的情形构造出的如下实例做进一步分析:
Total Shows: 6
0 1 2 3 4 - 5 6 7 8 9
0 5 6 7 8 - 1 2 3 4 9
1 5 6 7 9 - 0 2 3 4 8
2 5 6 8 9 - 0 1 3 4 7
3 5 7 8 9 - 0 1 2 4 6
4 6 7 8 9 - 0 1 2 3 5
如两种颜色标注所示,这个实例呈现出极好的对称性。这种对称性使得音乐家观演问题编程求解(二)里的程序还可以大为简化,即不必去计算观演计数,直接根据对称性即可构造实例。这里直接换到一般的情形,即n=2m的情形(更一般的情形后面再做考虑),加以说明:
(1)2m位音乐家按序号大小平分成两组,记为A={0, 1, ..., m-1}和B={m, m+1, ..., 2m-1},第1场演出安排A组全体成员观看B组全体成员的表演;
(2)第k场演出的安排,k=2,...,m+1:A组中序号k-2的音乐家安排到观众席,A组中余下m-1位音乐家以及B组中序号2m-1-(k-2)的音乐家安排表演,B组中余下的m-1位音乐家安排到观众席。
事实上,在上面的构造实例里,A组中每个成员,序号为x,在B组中都有且仅有一个配对成员,序号为y,满足x+y=2m-1。配对的两位音乐家不会同时当观众或做表演。
当m > 2时,由规则(1)和(2)构造出的m+1场演出是满足[m+1, 2m]满观演的一个实例。
为证明以及后续描述方便,先引入若干符号定义:
用 δ(M) 表示集合M包含的成员的总个数。
从非空集合P中任取一个成员x,从非空集合Q中任取一个成员y,只要x≠y,在既定的若干场演出安排中,至少有一场满足x为观众而y为表演者,则称这若干场演出为满足 P::Q (P到Q的满观演)的一个实例。并用 ε(P::Q) 表示满足 P::Q 的所有实例中演出场次所能取得的最小值。
由上述定义,可知 ε(P::P) = F(δ(P))。当P只包含一个成员时,定义ε(P::P) = 0(即 F(1) = 0)是合理的。
另外,当 P∩Q = Φ 时,显然有 ε(P::Q) = ε(Q::P) = 1。
证明:由于A∩B = Φ ,第1场演出就满足A::B。接下来分别考察A::A、B::B和B::A的满足情况。
从规则(2)可知,A组里的每个成员都有一场演出观看A组其余成员的表演,即后m场演出(第2场到第m+1场)满足A::A;同样由规则(2)可知,B组里每个成员都有一场演出为B组其余成员表演,因此B组中每个成员都观看到了B组中其余成员的表演,即后m场演出满足B::B。
最后来看B::A的情形,后m场演出中,每场都有A组的m-1个成员参与表演,且对任意一位A组成员而言,这m场演出中他不出演的场次只有一场,因此对B组的某个成员而言,只要他在这m场演出中有至少两场以观众身份出现,就一定会观看到A组中所有成员的表演。这m场演出中,对B组中任意一个成员而言,他不出现在观众席上的场次只有一场,即他有m-1场是以观众身份出现的,即当m > 2时,m-1 ≥ 2,后m场演出满足B::A。
记 M = A∪B。综上可知,由规则(1)和(2)构造出的m+1场演出满足M::M。由A∩B = Φ,知 δ(M) = δ(A) + δ(B) = m + m = 2m,所以这m+1场演出是满足[m+1, 2m]满观演的一个实例。
证毕。
由刚才所证明的结论就有:
当m > 2时,F(2m) ≤ m+1
具体看一下m=2,即n=4的情形有什么特殊之处导致它不满足F(2m) ≤ m+1。按上述的规则(1)和(2),可构造出如下3场演出安排:
0 1 - 2 3
0 2 - 1 3
1 3 - 0 2
记A={0, 1},B={2, 3}。第1场满足A::B;后两场满足A::A和B::B,但是不满足B::A,这是因为m-1=1,2和3都只当了1次观众。
再看一下m=1,即n=2的情形,显然有如下的最优解实例:
0 - 1
1 - 0
沿用上面的A、B分组思路来分析一下:A={0},B={1}。第1场满足A::B,第2场满足B::A。A和B中各只有一个成员,所以不存在需要满足A::A和B::B的问题(这也说明上面定义F(1)=0是合理的)。m=1时,显然也满足F(2m) ≤ m+1。
当m较大时,由上述规则(1)和(2)构造出的实例中,满足B::A的部分,即m·(m-1)的蓝色矩阵块对m·(m-1)的绿色矩阵块的部分,会有大量重复的观演有序对。因此,不禁会怀疑这样构造出来的实例并不总能保证是最优解。
例如,m=6的情形,按规则(1)和(2)构造出的实例有7场演出,是不是会有小于7场的实例安排?
更优的F(2m)右界判别法
为后续描述方便,再引入若干符号定义:
Show(M, i) = Aud(M, i) : Perf(M, i)
其中,M是成员数大于1的一个音乐家集合,即δ(M) > 1;i是演出场次序号,i > 0;Show(M, i)代表一组音乐家(即M)参与的第i场演出;Aud(M, i)代表这场演出中M里当观众的音乐家非空子集;Perf(M, i)代表这场演出中M里做表演的音乐家非空子集,且有 Aud(M, i) ∩ Perf(M, i) = Φ,即一场演出中不允许音乐家既当观众又做表演;隔在两个子集中间的单冒号(:)为观演符号,即Aud(M, i) 里的音乐家观看Perf(M, i)里的音乐家表演。此前引入的双冒号(::)为满观演符号。
Show(M, i) = Show(A, i) || Show(B, i) = Aud(A, i) ∪ Aud(B, i) : Perf(A, i) ∪ Perf(B, i)
其中,A和B是M的子集,且满足A∩B=Φ和A∪B=M;双竖线(||)为拼接符号,上面这个表示式定义了把两场参与成员无交集的演出拼接成一场新的演出。
考虑采用以下规则来构造实例:
(1')2m位音乐家按序号大小平分成两组,记为A={0, 1, ..., m-1}和B={m, m+1, ..., 2m-1},第1场演出安排A组全体成员观看B组全体成员的表演;第2场演出安排B组全体成员观看A组全体成员的表演;
(2')对A组的m位音乐家安排k场演出,Show(A, i) = Aud(A, i) : Perf(A, i), i=1,2,...,k,使其满足A::A;同样对B组的m位音乐家也安排k场演出,Show(B, i) = Aud(B, i) : Perf(B, i), i=1,2,...,k,使其满足B::B;把这两套k场演出逐场对应做拼接处理,得到新的k场演出:Show(A∪B, i) = Show(A, i) || Show(B, i), i=1,2,...,k。
于是有:
按规则(1')和(2')构造出来的k+2场演出是满足[k+2, 2m]满观演的一个实例。
证明:由于A∩B=Φ,前两场演出安排分别满足A::B和B::A。而随后的k场演出通过拼接法构造而成依然保持了满足A::A和B::B的特性。
记M=A∪B。综上可知,这k+2场演出满足M::M。而 δ(M) = δ(A) + δ(B) = m + m = 2m,所以这k+2场演出是满足[k+2, 2m]满观演的一个实例。
证毕。
例如m=6时,按规则(1')和(2')可构造出如下的一个实例来:
0 1 2 3 4 5 - 6 7 8 9 a b
6 7 8 9 a b - 0 1 2 3 4 5
0 1 2 6 7 8 - 3 4 5 9 a b
0 3 4 6 9 a - 1 2 5 7 8 b
1 3 5 7 9 a - 0 2 4 6 8 a
2 4 5 8 a b - 0 1 3 6 7 9
其中a=10、b=11。由这个实例可知F(12) ≤ 6。这就说明上一篇里所猜测的如下通项公式是不成立的:
F(n)=[(n+1)/2]+1, n>1, n≠4
规则(2')里的k场演出要满足A::A可取的最小值为 ε(A::A) = F(m),于是有如下结论:
F(2m) ≤ F(m) + 2, m > 0
注意这个结论对于m=1的情形同样成立,即F(2) ≤ F(1) + 2 = 2。这种情形就只有按规则(1')构造的两场演出,规则(2')里的k=0,因为 ε(A::A)=ε(B::B)=F(1)=0。
F(n)的二分法右界判别公式
上面的规则(1')和(2')是针对n=2m而给出的。下面扩展到一般情形:
(1'')把n位音乐家(n > 1)组成的集合M分成两个子集合A和B,满足A∩B=Φ和A∪B=M,记m=δ(A)。第1场演出安排A组全体成员观看B组全体成员的表演;第2场演出安排B组全体成员观看A组全体成员的表演;
(2'')对A组的m位音乐家安排f场演出,Show(A, i) = Aud(A, i) : Perf(A, i), i=1,2,...,f,使其满足A::A;同样对B组的m位音乐家安排g场演出,Show(B, i) = Aud(B, i) : Perf(B, i), i=1,2,...,g,使其满足B::B;把这两套演出按场次序号配对做拼接处理,得到新的k场演出(k=max(f, g)),其中:
前h场演出(h=min(f, g))安排为
Show(A∪B, i) = Show(A, i) || Show(B, i), i=1,2,...,h,
后k-h场演出安排为
Show(A∪B, i) = Show(A, i), i=h+1,...,k, f ≥ g
或
Show(A∪B, i) = Show(B, i), i=h+1,...,k, f < g
于是有:
按规则(1'')和(2'')构造出来的k+2场演出是满足[k+2, n]满观演的一个实例。
证明:由于A∩B=Φ,前两场演出安排分别满足A::B和B::A。而随后的k场演出通过拼接法构造而成依然保持了满足A::A和B::B的特性。
记M=A∪B。综上可知,这k+2场演出满足M::M。而 δ(M) = δ(A) + δ(B) = m + n-m = n,所以这k+2场演出是满足[k+2, n]满观演的一个实例。
证毕。
相应地,有如下结论成立:
F(n) ≤ max( F(m), F(n-m) ) + 2 = F( max( m, (n-m) ) ) + 2, n > m > 0
其中的等式部分用到了 音乐家观演问题通解初探 里的结论:F(n) ≤ F(m), n < m
这就是F(n)的二分法右界判别公式。前面的探索已经求出数列F(n)(不妨称作音乐家观演数列)的前8个值为:
F(1)=0, F(2)=2, F(3)=3, F(4)=4, F(5)=4, F(6)=4, F(7)=5, F(8)=5
利用这个右界判别公式,有:
F(9) ≤ F(10) ≤ F(5) + 2 = 6, F(11) ≤ F(12) ≤ F(6) + 2 = 6
F(18) ≤ F(19) ≤ ... ≤ F(24) ≤ F(12) + 2 ≤ 8
F(36) ≤ ... ≤ F(48) ≤ 10
F(72) ≤ ... ≤ F(96) ≤ 12
F(144) ≤ ... ≤ F(192) ≤ 14
......
从中可以看到,随着n的取值不断增大,F(n)的增长趋势是越来越缓慢的,呈现出类似对数函数的特性。可以初步判断随着n逐步加1,F(n)要么加1要么不变,而且随着n值越大,F(n)保持不变的频度会远远大于加1的频度。
F(n)的m分法右界判别公式
上面对n个音乐家做分组处理都是分成两组,更一般地,可以把n个音乐家分成m组,于是有如下构造规则:
(1''')把n位音乐家(n > 1)组成的集合M分成m个(1 ≤ m ≤ n)两两无交集的非空子集合:M1, M2, …, Mm,且这m个子集合的并集等于M;把这m个子集每一个都看成一个整体,安排k场演出使得任意一个子集合里的音乐家都能观看其余子集合里的音乐家的表演;
(2''')记 ni=δ(Mi), i=1,2,...,m,对每个子集Mi内的ni位音乐家安排gi场演出,使其满足Mi::Mi;记g=max(g1, g2, …, gm),在这m套演出安排中选择一套g场的演出作为基准,而把其它套的演出按场次序号配对拼接进来,得到新的g场演出。
于是有:
按规则(1''')和(2''')构造出来的k+g场演出是满足[k+g, n]满观演的一个实例。
证明:由规则(1''')构造的k场演出满足 Mi::Mj, i,j=1,2,...,m, i≠j
由规则(2''')构造的g场演出依然满足 Mi::Mi, i=1,2,...,m
而M=∪Mi, i=1,2,...,m,且 δ(M) = n,所以这k+g场演出是满足[k+g, n]满观演的一个实例。
证毕。
相应地,有如下结论成立:
若 n ≥ m > 0,ni > 0, i=1,2,...,m,n = n1+n2+…+nm,q = max(n1, n2, …, nm),则F(n) ≤ F(m) + F(q)
这就是一般形式的F(n)右界判别公式。
当m=1时,n=n1,q=n,F(n) ≤ F(m) + F(q)就是F(n) ≤ F(1) + F(n)=F(n)
当m=n时,ni=1, i=1,2,...,n,q=1,F(n) ≤ F(m) + F(q)就是F(n) ≤ F(n) + F(1)=F(n)
当m=2时,F(n) ≤ F(m) + F(q)就是上面所述的F(n)的二分法右界判别公式
特别地,若正整数n、m、q满足n=m·q,则有 F(n) ≤ F(m) + F(q)
前面的示例里用二分法右界判别公式判别出 F(36) ≤ 10,即F(36) ≤ F(18) + 2 ≤ F(9) + 4 ≤ F(5) + 6 = 10
而用6分法则有更精确的右界判别,即 F(36) ≤ F(6) + F(6) = 4 + 4 = 8
再探F(9)的取值
F(9) ≤ F(10) ≤ F(5) + 2 = 4 + 2 = 6
F(9) ≤ F(3) + F(3) = 3 + 3 = 6
上面的两种判别都只能把F(9)的右界定到6。而F(9) ≥ F(8) = 5,因此F(9)的取值只能是5或6。
在 音乐家观演问题通解初探 里,使用排除法尝试把F(9)=5的各种可能性都排除掉,但仅排除了一种情形,即:若5场演出里有一场1对8(或8对1)的演出,则无法构造出满足[5,9]满观演的实例。
两种编程求解的方法都没有找到满足[5,9]满观演的实例,只是给出了满足[6,9]满观演的实例。但是 音乐家观演问题编程求解(一)里的方法并不是严格意义上的地毯式构造和排查,其中为降低性能开销而设置的第一条约束,即 每场演出都是u对v或v对u的,这里u = [m/2],v=m-u,就是有问题的。当时增加这条约束,完全是出于一种直觉判断,即让每一场演出都提供最大的观演有序对不会漏过所有的最优解,至少能抓住其中一个最优解。但实际情况并不是预想的那样。这个问题的发现得益于今天(2021-3-28)中午在稿纸上对F(9)=5的实例构造尝试。具体思路如下:
由之前的排除法尝试已知9个成员都必需在5场演出中至少要当两次观众,尝试构造这样的5场演出,让9个成员都正好当两次观众。i和j指代任意两个不同成员,i当观众的两场演出不能和j当观众的两场演出完全重复,不然会出现i没观看j演出(j也没观看i演出)的问题。C(5,2)=10 > 9,这种构造是可能的。开始构造,令:
C1: 0 1 2 3 - 4 5 6 7 8
C2: 0 4 5 6 - 1 2 3 7 8
C3: 1 - 0 2 3
C4: 2 - 0 1 3
C5: 3 - 0 1 2
通过C1,C2,0可以观看其余成员的表演;
通过C1,C3,1可以观看其余成员的表演;
通过C1,C4,2可以观看其余成员的表演;
通过C1,C5,3可以观看其余成员的表演;
C2中安排了4、5、6当观众,继续安排4在C3中当观众,于是C3细化为:
C3: 1 4 7 8 - 0 2 3 5 6
这时,通过C2,C3,4可以观看其余成员的表演;
安排5在C4中当观众,于是C4细化为:
C4: 2 5 - 0 1 3 4 6
这时,通过C2,C4,5可以观看其余成员的表演;
安排6在C5中当观众,于是C5细化为:
C5: 3 6 - 0 1 2 4 5
这时,通过C2,C5,6可以观看其余成员的表演;
放在一起看一下当前的构造情况:
C1: 0 1 2 3 - 4 5 6 7 8
C2: 0 4 5 6 - 1 2 3 7 8
C3: 1 4 7 8 - 0 2 3 5 6
C4: 2 5 - 0 1 3 4 6
C5: 3 6 - 0 1 2 4 5
还差7和8,把7放到C4的观众席,此时7还差8的表演没看到,把8加入C4的表演席;再把8放到C5的观众席,把7加如C5的表演席,得到如下完整实例:
C1: 0 1 2 3 - 4 5 6 7 8
C2: 0 4 5 6 - 1 2 3 7 8
C3: 1 4 7 8 - 0 2 3 5 6
C4: 2 5 7 - 0 1 3 4 6 8
C5: 3 6 8 - 0 1 2 4 5 7
通过C3,C4,7可以观看其余成员的表演;
通过C3,C5,8可以观看其余成员的表演;
所构造的实例满足[5,9]满观演。于是,可知 F(9)=5。
这个实例中,有3场4对5的演出和2场3对6的演出,每个音乐家都恰好有2个观众身份和3个表演者身份。把这个实例的每场演出的观众与表演者对调,由对称性可知,得到的新实例(3场5对4的演出和2场6对3的演出,每个音乐家都恰好有3个观众身份和2个表演者身份)同样满足[5,9]满观演。
F(10)的取值
F(10) ≤ F(5) + F(2) = 4 + 2 = 6
F(10) ≥ F(9) = 5
C(5,2)=10,也可以尝试构造5场演出,让10个音乐家都恰好当两次观众。经实际尝试(过程和构造[5,9]满观演实例很相似),得到如下[5,10]满观演实例:
0 1 2 3 - 4 5 6 7 8 9
0 4 5 6 - 1 2 3 7 8 9
1 4 7 8 - 0 2 3 5 6 9
2 5 7 9 - 0 1 3 4 6 8
3 6 8 9 - 0 1 2 4 5 7
于是,可知 F(10)=5。
有意思的是这5场演出没有1场是5对5的演出,似乎只要有1场安排为5对5,就无法构造出[5,10]满观演的实例。
还有一个有意思的发现:可以在往上面那个[5,9]满观演的实例中添加9就能快速得到这里的[5,10]满观演实例。
F(11)和F(12)的取值
F(11) ≤ F(12) ≤ F(6) + F(2) = 4 + 2 = 6
F(11) ≥ F(10) = 5
C(5,2)=10 < 11,这说明在上面的[5,10]满观演实例中添加新成员10试图构造出[5,11]满观演的实例是不可行的。这是因为这样做的前提是保留0到9这10个成员恰好当两次观众就可以观看其余成员的表演,而5场演出所能提供的不同场次的两次观众席位组合数已经恰好分给了0到9这10个成员,序号为10的新成员至少要加入到两场演出的观众席上,他才可能观看到其余成员的表演,但他一旦加入任意两场演出的观众席,必然有另一个成员也在这两场演出的观众席上,就会出现他俩之间互相没有观看对方表演的问题。
那么,不借助上面的[5,10]满观演实例,从头构造是否可行?
如果有某个音乐家在5场演出中只当了一次观众,为保障他观看到其余人的表演,他当观众的那场演出只能是1对10的演出;而另外的4场演出对其余的10个音乐家而言要满足[4,10]满观演,由F(10)=5可知这是做不到的。如果有某个音乐家在5场演出中当了4次观众,也同样无法构造出[5,11]满观演的实例。
如果有某个音乐家在5场演出中当了5次观众或者一次观众都没当,显然无法构造出[5,11]满观演的实例。
因此,5场演出中只需考虑11人中的每人要么当两次观众要么当3次观众的情形。5场演出用C1、C2、C3、C4、C5指代。当两次观众的音乐家集合记为A,当3次观众的音乐家集合记为B,记m=δ(A),t=δ(B)。
对A中任意成员 i 和B中任意成员 j 而言,i 当观众的两场演出和 j 当观众的3场演出的交集至多只有1场演出(否则,i 无法观看 j 的表演)。
为描述方便,把A中成员 i 当观众的两场演出记作 S2(i);把B中成员 j 当观众的3场演出记作 S3(j)。
由C(5,2)=10 < 11,可知m=11时无法满足[5,11]满观演。
由C(5,3)=10 < 11,同样可知t=11(也就是m=0)时也无法满足[5,11]满观演。
考虑m=1,即A中只有一个成员x的情形,不妨设 S2(x)={C1,C2},那么B中成员的3场演出,因为不能同时包含C1和C2,最多只有C(5,3) - C(3,1) = 10 - 3 = 7种(即t=7),具体为
{C1,C3,C4}
{C1,C3,C5}
{C1,C4,C5}
{C2,C3,C4}
{C2,C3,C5}
{C2,C4,C5}
{C3,C4,C5}
m+t = 1+7 < 11,无法满足[5,11]满观演。
考虑m=2的情形,同样不妨设A中有成员x,其当观众的演出为{C1,C2},即 S2(x)={C1,C2},于是B中至多有7个成员,他们每个当观众的3场演出即如上述所列的7个集合。现在A中加进一个新成员,记为y,分两种子情形:
假如S2(y)和S2(x)没有交集,不妨令S2(y)={C3,C4},则B中成员对应的7个集合要去掉3个涵盖{C3,C4}的集合,即t=7-3=4,这时B的成员数至多为4;
假如S2(y)和S2(x)有一场相同的演出,不妨令S2(y)={C1,C3},则B中成员对应的7个集合要去掉两个涵盖{C1,C3}的集合,即t=7-2=5,这时B的成员数至多为5。
综合而言,m=2时,t ≤ 5,m+t ≤ 2+5 = 7 < 11,无法满足[5,11]满观演。
于是m=3,4,5时,都有m+t ≤ 5+5 < 11,同样不能满足[5,11]满观演。
考虑t=1,即B中只有一个成员u的情形,不妨设 S3(u)={C1,C2,C3},那么A中成员的两场演出,因为不能都选自{C1,C2,C3},最多只有C(5,2) - C(3,2) = 10 - 3 = 7种(即m=7),具体为
{C1,C4}
{C1,C5}
{C2,C4}
{C2,C5}
{C3,C4}
{C3,C5}
{C4,C5}
m+t = 7+1 < 11,无法满足[5,11]满观演。
考虑t=2的情形,同样不妨设B中有成员u,其当观众的演出为{C1,C2,C3},即 S3(u)={C1,C2,C3},于是A中至多有7个成员,他们每个当观众的两场演出即如上述所列的7个集合。现在B中加进一个新成员,记为v,分两种子情形:
假如S3(v)和S3(u)有一场相同的演出,不妨令S3(v)={C1,C4,C5},则A中成员对应的7个集合要去掉3个被{C1,C4,C5}涵盖的集合,即m=7-3=4,这时A的成员数至多为4;
假如S3(v)和S3(u)有两场共同的演出,不妨令S3(v)={C1,C2,C4},则A中成员对应的7个集合要去掉两个被{C1,C2,C4}涵盖的集合,即m=7-2=5,这时A的成员数至多为5。
综合而言,t=2时,m ≤ 5,m+t ≤ 5+2 = 7 < 11,无法满足[5,11]满观演。
于是t=3,4,5时,都有m+t ≤ 5+5 < 11,同样无法满足[5,11]满观演。
当m=6时,要满足[5,11]满观演,t必需等于5,而t=5的情形,已经被证明无法满足[5,11]满观演。
依此类推,当m=7,8,9,10时,都无法满足[5,11]满观演。
综上分析,可知 F(11) = 6。
F(12) ≤ F(2) + F(6) = 2 + 4 = 6,F(12)的左界右界都是6,因而 F(12)=6。
F(13)、F(14)、F(15)的取值
易知这三个值的右界都是7,如:F(15) ≤ F(3) + F(5) = 3 + 4 = 7。它们的左界是F(12)=6。
C(6,2)=6·5/2=15,就像由C(5,2)=10可以构造出[5,10]满观演的实例,这里尝试构造[6,15]满观演的实例。
15个音乐家各当两次观众,一共是2·15=30个观众身份,平分到一场演出,是30/6=5个观众,以下尝试构造6场5个观众对10个表演者(简称5对10)的演出
(为简便起见,每场演出只列出观众部分):
步骤一:完成前5个音乐家的两次观众安排
0 1 2 3 4
0
1
2
3
4
步骤二:用新的序号由小到大依次填空
0 1 2 3 4
0 5 6 7 8
1 5 9 a b
2 6 9 c d
3 7 a c e
4 8 b d e
第2场按序填入5、6、7、8,是因为0到4的两次观众身份都已经安排完了;
第3场首先填入5,因为5是没有完成两次观众身份的音乐家中序号最小的,所以让其优先完成,随后不能填入6、7、8,因为{C2,C3}已经被5占用了,继续按序填入9、a、b;
第4场首先填入6,和上一场填5是一样的,随后不能填7、8,因为{C2,C4}已占属于6,继续填入9,此时{C3,C4}已占属于9,随后不能填入a、b,继续填入c、d;
第5场首先填入7,此时7占用了{C2,C5},故随后不能填入8,跳过已完成两次观众身份的9,继续填入a,此时a占用了{C3,C5},故跳过b,继续填入c,此时c占用了{C4,C5},跳过d,填入e;
第6场依次填入剩余的8、b、d、e。
这个实例的构造还有一个更直观简单的表述:
0 1 2 3 4
0 5 6 7 8
1 5 9 a b
2 6 9 c d
3 7 a c e
4 8 b d e
如新的颜色标注所示,第1行和第1列按步骤一的方法完成0到4的两次观众身份安排;再用同样的方法把5到8安排到第2 行和第2列的空余位置,即完成了5到8的两次观众身份安排;继续用同样的方法,直到全部完成。
容易验证上面构造出来的6场5对10的演出满足[6,15]满观演。比如7,在C2中当观众时,他只差C2中同为观众的成员(即0、5、6、8)的表演没有看到;而在C5中,7再次当观众时,构造过程确保了C2中和他同为观众的成员不会在C5中当观众(即在C5中都被安排为表演者),所以7能观看所有其余成员的表演。
综上就有:F(13) = F(14) = F(15) = 6。
F(20)的取值
进一步由C(6,3)=20推测 F(20)=6。在6场演出中安排20个音乐家每人当3次观众,总计有3·20=60个观众身份,平分到每一场是60/6=10个观众身份,于是有如下实例构造过程:
步骤一:把{C1,C2,Ci}(i=3,4,5,6)分别安排给0到3
0 1 2 3 4 5 6 7 8 9
0 1 2 3
0
1
2
3
步骤二:把{C1,C3,Ci}(i=4,5,6)安排给4到6
0 1 2 3 4 5 6 7 8 9
0 1 2 3 a b c d e f
0 4 5 6
1 4
2 5
3 6
步骤三:把{C1,C4,Ci}(i=5,6)安排给7和8,把{C1,C5,C6}安排给9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 a b c d e f
0 4 5 6
1 4 7 8
2 5 7 9
3 6 8 9
步骤四:把{C2,C3,Ci}(i=4,5,6)安排给a到c,把{C2,C4,Ci}(i=5,6)安排给d和e,把{C2,C5,C6}安排给f
0 1 2 3 4 5 6 7 8 9
0 1 2 3 a b c d e f
0 4 5 6 a b c
1 4 7 8 a d e
2 5 7 9 b d f
3 6 8 9 c e f
步骤五:把{C3,C4,Ci}(i=5,6)安排给g和h,把{C3,C5,C6}安排给i,把{C4,C5,C6}安排给j
0 1 2 3 4 5 6 7 8 9
0 1 2 3 a b c d e f
0 4 5 6 a b c g h i
1 4 7 8 a d e g h j
2 5 7 9 b d f g i j
3 6 8 9 c e f h i j
这样的10对10的6场演出由构造方法本身就保障了[6,20]满观演。这说明F(20)的右界明确到6,而F(20) ≥ F(11) = 6,即其左界也为6,于是可知F(20)=6。
F(n)的取值分析
从上面的分析过程已经知道:n=5时,5场演出至多可以达到[5,10]满观演,其中10=max( C(5,i) ), 0 < i < 5。并有F(10)=5,F(11)=6。
进一步用n=4,3,2的情形验证如下:
n=4,max( C(4,i) ) = C(4,2) = 6,4场演出至多可以达到[4,6]满观演,且有F(6)=4,F(7)=5。
n=3,max( C(3,i) ) = C(3,1) = 3,3场演出至多可以达到[3,3]满观演,且有F(3)=3,F(4)=4。
n=2,max( C(2,i) ) = C(2,1) = 2,2场演出至多可以达到[2,2]满观演,且有F(2)=2,F(3)=3。
于是,对于n=6,就有 max( C(6,i) ) = C(6,3) = 30,6场演出至多可以达到[6,20]满观演,且有F(20)=6,F(21)=7。
对于n=7,就有 max( C(7,i) ) = C(7,3) = 35,7场演出至多可以达到[7,35]满观演,且有F(35)=7,F(36)=8。
F(21)=7和F(36)=8的严格证明可以采用上面证明F(11)=6类似的方法。
一般的情形为:
C(n,m) = max( C(n,i) ), (i=1, 2,...,n-1),n场演出至多可以达到 [n, C(n, m)] 满观演,且有 F( C(n,m) ) = n,F( C(n,m) + 1 ) = n+1,这里 n> 1,m = [n/2]。
这个一般情形的结论给出了F(n)取值跳级的判断方法。比如要求满足F(n)=10的最小n值,先计算C(9,4)=9·8·7·6 / (4!) = 126,即有 F(126) = 9, F(127)=10,于是满足F(n)=10的最小n值为127。
但要从这个一般情形的结论给出F(n)的通解公式还是相当难办的。
考察一下数列F(n)取值重复数的规律:
满足 F(n)=0 的项数为1,即只有n=1;
满足 F(n)=1 的项数为 0;
满足 F(n)=2 的项数为 C(2,1) - 1 = 1,即只有n=2;
满足 F(n)=3 的项数为 C(3,1) - C(2,1) = 1,即只有n=3;
满足 F(n)=4 的项数为 C(4,2) - C(3,1) = 3,即有 n=4,5,6;
满足 F(n)=5 的项数为 C(5,2) - C(4,2) = 4,即有 n=7,8,9,10;
满足 F(n)=6 的项数为 C(6,3) - C(5,2) = 10,即 n=11,12,...,20;
满足 F(n)=7 的项数为 C(7,3) - C(6,3) = 15,即 n=21,22,...,35;
......
从上可以看出,随着n逐步加1,F(n)取值的增幅只在最开始由F(1)到F(2)时为2,之后的增幅要么为1要么为0,即
若 n > 1,则 0 ≤ F(n+1) - F(n) ≤ 1
最后试求一下F(500)的取值。
计算C(10,5)=10·9·8·7·6 / (5!) = 252 < 500;
计算C(11,5)=11·10·9··8·7 / (5!) = 462 < 500;
计算C(12,6)=12·11·10·9·8·7 / (6!) = 924 > 500;
所以 F(500) = 12。