设计一个O(n log n)算法,如果L中的一半以上的地址是从同一个真实IP地址生成的,则返回true

时间:2014-12-06 00:19:10

标签: algorithm

我试图解决这个家庭作业问题:

您正在为国家安全局(NSA)工作。的网站 NSA受到攻击,你会获得一份清单 大号 可疑的IP地址 从中记录了可疑活动。但是,这些IP广告 - 连衣裙不是真正的地址,而是由恶意攻击者使用 一些匿名软件,隐藏真实的IP地址并制作 看起来可疑活动源于一些虚假的IP广告 - 礼服。匿名软件由专家亲开发 语法并且即使在程序中也可以创建不同的伪造IP地址 从同一IP地址多次使用。 你聪明的同事已经开发了一个 C 功能

SAME_REAL_IP(地址1,地址2)

当两个假地址返回true时 地址 1和 地址 2是 从相同的真实IP地址生成,否则为false。假设 请该函数需要一段时间来计算 设计一个 Ø ( ñ 日志 ñ )算法,如果返回true > 一半的地址 在 大号 是从相同的真实IP地址生成的。你必须争论为什么 你的算法运行在 Ø ( ñ 日志 ñ )以获得充分的信誉。

这是我写的算法:

algorithm(list L){

    int halfLength = L.length()/2;
    int lengthCounter = 0;

    for(int i = 0; i < L.length()-1; i++){

        if(SAME_REAL_IP(i, i+1))
            lengthCounter += 1;
    }

    if(lengthCounter > halfLength)
        return true;

    return false;
}

现在,问题是我的for循环比较列表中的每个元素,如下所示:

SAME_REAL_IP(0,1)
SAME_REAL_IP(1,2)
SAME_REAL_IP(2,3)
SAME_REAL_IP(3,4) ...

但它永远不会检查像SAME_REAL_IP(2,7);

这样的东西

虽然我可以使用嵌套for循环执行此操作,但它只能在O(n ^ 2)中运行,我需要它在O(n log n)中运行

所以我的问题是,如何在更快的时间内相互检查每个元素?

0 个答案:

没有答案