优化算法

时间:2013-09-17 08:57:21

标签: algorithm puzzle

我遇到了以下问题。在一座特定的山上,一个女孩被困住,有两条路。一条道路将她带到救援人员(左转),第二条路径(右转)将她带到丛林,从那里没有机会回来。现在她遇到一群人说n总是说实话,有些人说m可能/可能不说实话。我们得出n大于m。因此女孩可以向一个随便的人询问 - 救援人员的方式,问题是她不知道她要求哪一个(n或m)。 我想知道是否有一个Big Theta(n + m)算法来查找有多少人说实话?或严格来说n的价值

我能够自己解决这个问题的简单版本。假设只有两个人,1个总是说实话而另一个总是说谎。她可以问一个问题,他们俩都会给出相同的答案。例如:对于说实话的人,她可以问 - “嘿,根据另一个人,拯救者需要采取哪种方式?”。真相演讲者会说 - 右转(因为另一个人说谎)。现在她可以向骗子提出同样的问题 - 他会回答说 - 右转(因为真正的答案是左转,但因为他总是说谎,他会说对了)。现在她可以走到左边,知道这是正确的答案。

问题在于,在第一种情况下 - 第二组人可能/可能不会说谎。但我认为关键是n>即,总是说真话的人数大于可能/可能不说真话的人数。所以看起来这会取消一些东西。

任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:2)

只要向他们中的任何一个询问以下问题:

  

如果你在回答这个问题时与你的情况相反,这将是正确的方法吗?

如果他是撒谎模式中的优柔寡断,他必须告诉你走错路,因为作为真相出纳员,他必须以正确的方式告诉你,但是,既然他在撒谎,他就不会

如果他是真相出纳员(或真理模式中的优柔寡断型),他将不得不告诉你走错路,因为作为一个骗子,这就是他所说的。

然后走另一条路。无需算法,只需O(1)计算。

制作CW,因为它不是一个与编程相关的问题。

答案 1 :(得分:1)

询问每个人救助方向的位置。因为n> m,引用次数的方向是实际的方向。