我该如何解决这个逻辑和算法问题?
How can I solve this logical and algorithm problem?
山上有老实的猴子,也有不靠谱的猴子。诚实的猴子总是说真话,而不可靠的猴子可能说谎或说真话。猴子自己能分辨谁是诚实的谁是不可靠的,但外人不能分辨。
假设山上有n只猴子,并且严格超过n/2只诚实的猴子。你能给出一个算法,通过询问其他人是否诚实来找出所有诚实的猴子吗?
这个问题我考虑了一段时间,也尝试了一些搜索引擎,但还是没有头绪。
评论刺激到我了!我可以问其他猴子第一只猴子靠不靠谱。如果诚实>n/2,那一定是诚实的。如果不可靠>n/2,那一定是不可靠的。当我找到第一只诚实的猴子时,我可以问它其他人是否诚实。但是当我不断地找出不可靠的猴子时,这种方法将达到 O(n^2)。有没有可以达到O(n)的算法?
山上有老实的猴子,也有不靠谱的猴子。诚实的猴子总是说真话,而不可靠的猴子可能说谎或说真话。猴子自己能分辨谁是诚实的谁是不可靠的,但外人不能分辨。 假设山上有n只猴子,并且严格超过n/2只诚实的猴子。你能给出一个算法,通过询问其他人是否诚实来找出所有诚实的猴子吗?
这个问题我考虑了一段时间,也尝试了一些搜索引擎,但还是没有头绪。
评论刺激到我了!我可以问其他猴子第一只猴子靠不靠谱。如果诚实>n/2,那一定是诚实的。如果不可靠>n/2,那一定是不可靠的。当我找到第一只诚实的猴子时,我可以问它其他人是否诚实。但是当我不断地找出不可靠的猴子时,这种方法将达到 O(n^2)。有没有可以达到O(n)的算法?