美文网首页
非常有用的算法设计

非常有用的算法设计

作者: 明翼 | 来源:发表于2018-01-19 12:19 被阅读17次

    有两个算法最近用到的,非常好,简直舍不得分享了:)。

    1)如何判断IP段和IP的关系

    通过将IP段的开始IP和结束IP转成long,然后作为一个线段,将需要判断的IP转成一个点,然后判断点和线段的关系即可。这个是网上来的,不是我独创。

    2)如何判断多个IP段和另外一个多个IP段的关系

    两个策略来说,源地址是多个地址段或ip,目标地址也是多个地址段或多个ip,相当于知道了单个元素的关系,如何判断两个集合的关系,这个说实话有点难度,自己想了很久,开始是简单的if判断,导致代码很乱,还可能判断错。
    后面设计的逻辑如下:

    将两个集合元素,每个都单独进行比较,比如A集合为三个IP或IP段;
    B集合有四个IP或IP段,那么就得到了一个3*4的矩阵信息。
    每个元素的结果用aij标示 i标示是A的第i个元素,j标示是B的第j个元素。
    假设元素e包含f的返回值为2,f包含e的返回值是3。

    a11  a12  a13  a14
    
    a21 a22   a23  a24
    
    a31 a32  a33   a34
    
    a11 = a1 * b1
    
    a12 = a1 * b2
    
    a13 = a1 * b3
    
    a14 = a1 * b4
    

    两个集合的关系目前来说只有几种:

    1)没有关系,在矩阵上标示为数字均为0 ,这个通过循环相加结果为0得到没有关系。

    2)A集合包含B集合:

         如果a11 为2,则说明B集合中的第一个被包含了;
    
         如果a22 为2 ,则说明B集合中的第二个包包含了;
    
         如果a13为2,则说明B集合中的第三个元素被包含了;
    
         如果a14为2 ,则说明B集合中的第四个元素被包含了;
    
         这样说明B集合的所有元素均被A集合包含,所以判断规则就是
    
          所有元素中等于2个个数,且二维下标不同的和B的集合大小相同。
    

    3) 如果是B集合包含A结合

      则有类似的值:
      a11 = 3
      a22 =3 
      a31 =3
    
    所有元素中等于3的个数,且一维下标不同的和A的集合大小相同。
    

    相关文章

      网友评论

          本文标题:非常有用的算法设计

          本文链接:https://www.haomeiwen.com/subject/tneooxtx.html