题目:在一个聚会上,如果所有个人都认识其中的一位客人A,而A却不认识其他任何一个人,则A就称为名人。在一个聚会,最多只有一个名人,因为如果有2个名人,则他们必然互相认识。某个特定的聚会上也有可能没有名人,你的任务就是在一个聚会上寻找一个名人,而你只允许向每个客人提问一种类型的问题————询问他是否认识另一个客人。每个客人必须如实回到你的问题。问你至多需要询问多少次客人,才能找出名人或者确定没有名人?
解答:
① 题设:1.聚会上所有客人(n位客人)构成集合S ={e1, e2, ..., en},已编号
2.命题P为x是名人,即P(x) = x是名人
3.命题Q(x, y) = x认识y
② 题意:1. 逻辑表达式∃x∈S(∀y∈S(y ≠ x → (Q(y, x) ∧ ¬Q(x, y)))→P(x)) = x是名人
2.Q(x, y) → ¬P(x) = 如果x认识y, 则x肯定不是名人
③ 题解:假设n个客人中至多需要 an次询问(an为n的函数表达),在这里建立an+1 与 an的关系式
n位客人里加入一位新的客人B, 即有n + 1位客人,设另2位客人为ek, et,即有
ek∈S ∧ et∈S ∧ ek ≠ et ∧ ∀x∈SB ≠ x
1.问B:是否认识ek
2.问ek:是否认识B
3.问et:是否认识B
上述可表达为:
1.Q(B, ek) → ¬P(B),因为B不是名人,排除B,剩下n个客人,即集合S需要询问an,则an+1 = an + 1
2.(¬Q(B, ek) ∧ Q(ek, B)) → ¬P(ek), 则ek不是名人,排除ek,剩下n个客人,即集合
S' = {e1, e2, ..., ek - 1, ek + 1, ..., en-1,B},|S'| = n, 需要询问an,则an+1 = an + 2
然后就是¬Q(B, ek) ∧ ¬Q(ek, B),这个情况下只能得知ek和B中必有一人不是名人,此时询问et来得出是谁:
3.(¬Q(B, ek) ∧ ¬Q(ek, B) ∧ Q(et, B)) → ¬P(et),则et不是名人,排出et, 剩下n个客人,即集合
S' = {e1, e2, ..., ek, ..., et - 1, et + 1, ..., en-1,B},|S'| = n, 需要询问an,则an+1 = an + 3
4.(¬Q(B, ek) ∧ ¬Q(ek, B) ∧ ¬Q(et, B)) → ¬P(B),则B不是名人,排出B,剩下n个客人,即集合
S' = {e1, e2, ..., ek, ..., et, ..., en-1},|S'| = n, 需要询问an,则an+1 = an + 3
∵综上所述,最多需要3次来排出其中一个
∴an+1 = an + 3 ⇒ an = 3n + k , k未知
∵当n = 1时,你就是名人
∵当n = 2时,只需要询问二次即可
改进:
∵¬Q(x, y) → ¬P(y), Q(x, y) → ¬P(x)
∴ ¬Q(B, ek) → ¬P(ek) ⇒ an+1 = an + 1, 排除ek,S' ={e1, e2, ..., ek-1, ek+1, ..., en-1, B},|S'| = n
Q(B, ek) → ¬P(B) ⇒ an+1 = an + 1, 排除B, S' ={e1, e2, ..., ek, ..., en},|S'| = n