Algorithm 说谎者说真话问题中说谎者上界和下界的求解
我正试图解决一个说真话/说谎的问题。对一个班级进行了调查。答案以矩阵a的形式给出,其中a[i][j]表示第i个学生对第j个学生的回答。如果这个角色是“L”-这意味着他/她是一个骗子;如果是“T”-那么这意味着,这个学生是一个讲真话的人 真理演说者(“T”):他/她的回答都是真实的。 撒谎者('L'):(S)他至少做了一次错误的回答 例1 类包含至少3个说谎者,最多4个说谎者,3是说谎者的下界,4是上界 例2 类至少包含4个说谎者,最多包含4个说谎者Algorithm 说谎者说真话问题中说谎者上界和下界的求解,algorithm,Algorithm,我正试图解决一个说真话/说谎的问题。对一个班级进行了调查。答案以矩阵a的形式给出,其中a[i][j]表示第i个学生对第j个学生的回答。如果这个角色是“L”-这意味着他/她是一个骗子;如果是“T”-那么这意味着,这个学生是一个讲真话的人 真理演说者(“T”):他/她的回答都是真实的。 撒谎者('L'):(S)他至少做了一次错误的回答 例1 类包含至少3个说谎者,最多4个说谎者,3是说谎者的下界,4是上界 例2 类至少包含4个说谎者,最多包含4个说谎者 我不知道下限和上限是如何找到的,如果有任何帮助
我不知道下限和上限是如何找到的,如果有任何帮助,我们将不胜感激 对于您给出的示例,您只需遵循逻辑,并通过假设某个特定的人是T来了解接下来的内容。通常,您可以设置一个混合整数规划问题 如果人i是L,则设x_i=1,如果人i是T,则设x_i=0。然后从每个人的陈述中创建一个线性函数。例如,从TLT创建:
f_1 = (x_1) + (1-x_2) + (x_3) + (1-x_4) + (x_5)
你可以看到图案。对于任何可行的赋值(即,x变量的设置,其中x值和人们的陈述之间不存在矛盾),当且仅当f_1=0时,x_1=0;当且仅当f_1>0时,x_1=1;或者,由于一切都是整数,f_1>=1。这相当于f_i>=x_i和f_i=x_i
f_i对于你给出的例子,你可以按照逻辑,看看假设一个特定的人是T会发生什么。一般来说,你可以设置一个混合整数规划问题 如果人i是L,则设x_i=1,如果人i是T,则设x_i=0。然后从每个人的陈述中创建一个线性函数。例如,从TLT创建:
f_1 = (x_1) + (1-x_2) + (x_3) + (1-x_4) + (x_5)
你可以看到图案。对于任何可行的赋值(即,x变量的设置,其中x值和人们的陈述之间不存在矛盾),当且仅当f_1=0时,x_1=0;当且仅当f_1>0时,x_1=1;或者,由于一切都是整数,f_1>=1。这相当于f_i>=x_i和f_i=x_i
第一个例子:
- 所有4名学生只说他们说的是实话,其余的都在撒谎
- 据我们所知,他们可能都在撒谎,所以上限是4
- 对于下限,我们可以假设1是真实的,这在逻辑上是有意义的。如果我们试图说不止一个是真的 这是不可能的,因为学生们会说彼此都是 说谎-因此下限为3
- 第四个学生说他在说谎——这意味着他一定在说谎,他关于其他四个学生说谎的说法中至少有一个是谎言(他说谎的说法显然是正确的)——这意味着至少有一个学生没有说谎,因此上界变为4,下界变为1
- 学生2说他们都是真的——我们刚刚证明是错的,所以他一定是在撒谎
- 这给我们留下了学生1、3和5,他们都说学生3说的是实话。既然我们知道至少有一个学生在说真话,那么第三个学生肯定在说真话(因为他们都这么说)
- 然后,从学生3所说的,我们知道其余的人都在撒谎,所以上面的=下面的=4个说谎者
- 所有4名学生只说他们说的是实话,其余的都在撒谎
- 据我们所知,他们可能都在撒谎,所以上限是4
- 对于下限,我们可以假设1是真实的,这在逻辑上是有意义的。如果我们试图说不止一个是真的 这是不可能的,因为学生们会说彼此都是 说谎-因此下限为3
- 第四个学生说他在说谎——这意味着他一定在说谎,他关于其他四个学生说谎的说法中至少有一个是谎言(他说谎的说法显然是正确的)——这意味着至少有一个学生没有说谎,因此上界变为4,下界变为1
- 学生2说他们都是真的——我们刚刚证明是错的,所以他一定是在撒谎
- 这给我们留下了学生1、3和5,他们都说学生3说的是实话。既然我们知道至少有一个学生在说真话,那么第三个学生肯定在说真话(因为他们都这么说)
- 然后,从学生3所说的,我们知道其余的人都在撒谎,所以上面的=下面的=4个说谎者
- 第一个例子:
f_1 = (x_1) + (1-x_2) + (x_3) + (1-x_4) + (x_5)
For all i=1,...,N
f_i>=x_i
f_i<=(N+1)x_i
x_i is 0 or 1