我来试图终结第一题。

第一题和之前“10人住旅馆”问题非常相似,本质上都是求具有某种性质的最大子集族。
先说结论,n次测试能够从若干灯泡中检测出异常(即“该亮的不亮”或“不该亮的亮了”),等价于如下结论:
对n个元素组成的集合M,求最大的子集族P,使对于P中任何一个元素Pi,P中存在的Pi的全部真子集的并集不等于Pi。这里的n就是测试次数,Pi为灯泡,P的容量就是能保证测出的最大灯泡数。这个条件比“10人住旅馆”宽松一些,旅馆问题要求P中不存在Pi的真子集。因此P的最大容量也要大一些。
解释一下。
我们用ABC...表示不同的测试,把每一个灯泡参与的测试(即:在通电时打开开关)记录下来,例如“AB”表示这一开关参与了测试A和B。显然,若要保证检测出故障灯泡,不可能存在两个灯泡参与了完全一样的测试。即,这种表示方式必须是唯一的。于是P中的元素可以表示为{A,ABC,BCD...}
对一组测试P,如果任何一个元素Pi在P中的真子集{Pk,Pl....}的并集等于Pi,则只要Pi为坏灯1且Pk,Pl...均控制Pi,就可以保证P无法检测出异常。这是必要性。
如果Pi为坏灯,且Pi在P中的真子集的并集Pm小于Pi,设A为一个属于Pi而不属于Pm的元素。如P中包含A的元素只有Pi,显然可以检测出异常(某次测试只测了一个灯泡)。否则,设其他包含A的元素为{Pk,Pl...}。若在A测试中Pi表现正常,则它链接的开关必然存在于{Pk,Pl....}之中。不妨设其中一个为Pk。由于Pk不是Pi的真子集,Pk中必然存在某项测试不属于Pi。这项测试必将导致Pi出现异常(不该亮的亮了)。这是充分性。
需要注意的是,检测出故障灯泡不需要检测出异常。一定存在一个故障灯泡,因此测试时留有一个余地。在无法检测出异常时,可以留下唯一的可能性。
因此简单编排15个灯泡如下:
{空,AB,AC,BC,DE,ABC,ABD,ABE,ACD,ACE,ADE,BCD,BCE,BDE,CDE}
空表示不参与测试。如果未检出异常,则灯泡ABC为故障灯泡。

第一题和之前“10人住旅馆”问题非常相似,本质上都是求具有某种性质的最大子集族。
先说结论,n次测试能够从若干灯泡中检测出异常(即“该亮的不亮”或“不该亮的亮了”),等价于如下结论:
对n个元素组成的集合M,求最大的子集族P,使对于P中任何一个元素Pi,P中存在的Pi的全部真子集的并集不等于Pi。这里的n就是测试次数,Pi为灯泡,P的容量就是能保证测出的最大灯泡数。这个条件比“10人住旅馆”宽松一些,旅馆问题要求P中不存在Pi的真子集。因此P的最大容量也要大一些。
解释一下。
我们用ABC...表示不同的测试,把每一个灯泡参与的测试(即:在通电时打开开关)记录下来,例如“AB”表示这一开关参与了测试A和B。显然,若要保证检测出故障灯泡,不可能存在两个灯泡参与了完全一样的测试。即,这种表示方式必须是唯一的。于是P中的元素可以表示为{A,ABC,BCD...}
对一组测试P,如果任何一个元素Pi在P中的真子集{Pk,Pl....}的并集等于Pi,则只要Pi为坏灯1且Pk,Pl...均控制Pi,就可以保证P无法检测出异常。这是必要性。
如果Pi为坏灯,且Pi在P中的真子集的并集Pm小于Pi,设A为一个属于Pi而不属于Pm的元素。如P中包含A的元素只有Pi,显然可以检测出异常(某次测试只测了一个灯泡)。否则,设其他包含A的元素为{Pk,Pl...}。若在A测试中Pi表现正常,则它链接的开关必然存在于{Pk,Pl....}之中。不妨设其中一个为Pk。由于Pk不是Pi的真子集,Pk中必然存在某项测试不属于Pi。这项测试必将导致Pi出现异常(不该亮的亮了)。这是充分性。
需要注意的是,检测出故障灯泡不需要检测出异常。一定存在一个故障灯泡,因此测试时留有一个余地。在无法检测出异常时,可以留下唯一的可能性。
因此简单编排15个灯泡如下:
{空,AB,AC,BC,DE,ABC,ABD,ABE,ACD,ACE,ADE,BCD,BCE,BDE,CDE}
空表示不参与测试。如果未检出异常,则灯泡ABC为故障灯泡。