有100个囚犯分别关在100间牢房里。牢房外有一个空荡荡的房间,房间里有一个灯泡,以及控制这个灯泡的开关。初始时,灯是关着的。看守每次随机选择一名囚犯进入房间,但保证每个囚犯都会被选中无穷多次。如果在某一时刻,有囚犯成功断定出所有人都进过这个房间了,所有囚犯都能释放。游戏开始前,所有囚犯可以聚在一起商量对策,但在此之后,它们唯一可用来交流的工具就只有那个灯泡。他们应该设计一个怎样的协议呢?
这个经典的问题在网上转载无数,题目描述被好事者们改得天花乱坠,甚至加进了“这盏灯永远有充足的能源供应”、“如果灯泡坏了或是电路出了故障会马上修好”等条件,剥掉了“算法问题”的外壳,填补了本不存在的漏洞,让更多的人动起了脑筋。在论坛上,每次贴出这个问题,总会引起一大群人论战。但很不幸的是,这个题目的来源至今仍是个谜。据目前的已知情况推测,这个题目最早来源于伯克利大学的电气工程荣誉学会,时间大概是2001年。在2002年7月,IBM官方网站上的Ponder This趣题栏目介绍了这个题目,“囚犯与灯泡”一炮走红,随即遍布网络的各个角落。2003年,《数学情报》(Mathematical Intelligencer)杂志上发表了一篇题为《一百个囚犯和一个灯泡》(One hundred prisoners and a lightbulb)的论文,也让囚犯们正式引起了数学家的关注。
想必很多人知道这个问题的标准答案了。
游戏开始前,囚犯们选出一个代表。在游戏过程中,除了这名代表以外,其他每个囚犯在进入房间时都遵循完全相同的策略:如果他是第一次看到灯泡处于不亮的状态,就按动开关,把灯泡变亮;在其他所有的情况下,他都什么也不做。每次这名代表进入房间时,如果他发现灯泡是亮的就把它关掉;如果他发现灯泡不亮,则什么也不做。同时,这名代表需要记住,他一共关过多少次灯。什么时候他发现关了99次灯,他就知道所有囚犯都进过房间了。