大家好。我有一个算法问题想与大家探讨。
服务器S需要对n个节点进行认证,S有一个批量认证的函数F(x),F(x)的输入是x个节点的签名,如果x个节点的签名都验证通过,那么F(x)输出True,否则输出False。我们假设F(x)的时间复杂度是O(1)。
任务是服务器S要找出所有的恶意节点。
- 当n个节点中,恶意节点的数量为1,如何调用F(x)?
- n个节点中恶意节点的数量对问题1中的算法有没有关系?
- 假设F(x)的时间复杂度是O(n),此时要找出所有恶意节点的算法复杂度是什么?
- 除去批量认证算法,还有别的新方法吗?
问题1中,用二分法最多调用log 2n次F(x)。问题2中,最差情况下所有的节点都是恶意时,二分法的效率降低太多了,比逐个认证还要慢。假设F(a)表示输入节点1依次到节点a共a个节点,那么当F(a+1) = False, F(a) = True时,就可以找出节点a+1是恶意节点,这种情况下,不管恶意节点的数量是多少,总共会调用n次F(x)。