离散数学:聚会上的名人

题目:在一个聚会上,如果所有个人都认识其中的一位客人A,而A却不认识其他任何一个人,则A就称为名人。在一个聚会,最多只有一个名人,因为如果有2个名人,则他们必然互相认识。某个特定的聚会上也有可能没有名人,你的任务就是在一个聚会上寻找一个名人,而你只允许向每个客人提问一种类型的问题————询问他是否认识另一个客人。每个客人必须如实回到你的问题。问你至多需要询问多少次客人,才能找出名人或者确定没有名人?


解答

① 题设:1.聚会上所有客人(n位客人)构成集合S ={e1,  e2, ..., en,已编号
                2.命题P为x是名人,即P(x) = x是名人
                3.命题Q(x, y) = x认识y

题意:1. 逻辑表达式xS(yS(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,即有

    ekS  et e et xS≠ 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 = a+ 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 = a+ 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 = a+ 3


综上所述,最多需要3次来排出其中一个

an+1 = a⇒ an = 3n + k , k未知


当n = 1时,你就是名人

当n = 2时,只需要询问二次即可

a2 = 2 k = -4

       

 an = 3n - 4 (≥ 2)


改进:

¬Q(x, y→ ¬P(y), Q(x, y→ ¬P(x)

 ¬Q(B, ek→ ¬P(ekan+1 = a1, 排除ek,S' ={e1, e2...ek-1, ek+1, ...en-1, B},|S'| = n

        Q(B, ek→ ¬P(B⇒ an+1 = a1, 排除BS' ={e1e2...ek, ...en},|S'| = n

 an = n

你可能感兴趣的:(离散数学:聚会上的名人)