【问题标题】:How can I solve this logical and algorithm problem? [closed]我该如何解决这个逻辑和算法问题? [关闭]
【发布时间】:2021-10-13 08:16:28
【问题描述】:

山上有老实的猴子,也有不靠谱的猴子。诚实的猴子总是说真话,而不可靠的猴子可能会撒谎,也可能会说真话。猴子自己可以分辨谁是诚实的,谁是不可靠的,但外人无法分辨。 假设山上有n只猴子,严格来说有n/2只以上诚实的猴子。你能否给出一个算法,通过询问其他猴子是否诚实来找出所有诚实的猴子?

我考虑了一段时间,尝试了一些搜索引擎,但仍然不知道。

【问题讨论】:

  • 能否请您添加问题的根源,以便我们可以看到它不是现场比赛的一部分?
  • 外人无法分辨 什么意思?什么是局外人?一只不靠谱的猴子?我猜你有一些效率限制。如果没有,似乎有一个明显的 O(n^2) 算法,...如果我很好地理解 tje 问题。
  • 这个问题是我同学问的。我认为它升级了一个老问题,即诚实的猴子总是说真话,而不可靠的猴子总是说谎。
  • 假设你是局外人,必须找出所有诚实的猴子。
  • 如果你没有效率限制,只要问问每一只猴子,谁是可靠的,谁不是。每只获得正分的猴子都是可靠的。

标签: algorithm logic


【解决方案1】:

评论刺激到我了!我可以问其他猴子第一只猴子是否可靠。如果诚实>n/2,它必须是诚实的。如果不可靠>n/2,它一定是不可靠的。当我找到第一只诚实的猴子时,我可以问它其他人是否诚实。但是当我不断发现不可靠的猴子时,这种方法会达到 O(n^2)。有没有可以达到O(n)的算法?

【讨论】:

  • 既然有一半以上的猴子是可靠的,如果你随机选择猴子,那么你应该期望很快找到一只诚实的猴子。所以你可以期望算法是线性的,尽管当你非常不幸时它可能是二次的。
  • 是的,不知道有没有更好的算法
猜你喜欢
  • 1970-01-01
  • 2021-09-19
  • 2021-06-12
  • 2020-03-25
  • 2020-02-14
  • 2019-11-10
相关资源
最近更新 更多