全集是 0.0.0.0/0 ,现在我手头上有某些国家的 IP 段,但问题是如何求出这些 IP 段的补集呢?
V2EX 之前有一篇帖子有讨论,但是没有了下文,所以再次来求教。
谢谢!
V2EX 之前有一篇帖子有讨论,但是没有了下文,所以再次来求教。
谢谢!
1
Blask Jul 13, 2016
import ipaddress
import sys f=open('1','r') while(1): line=f.readline() if not line: break print(ipaddress.ip_network(line.strip()).hostmask) |
2
Blask Jul 13, 2016
缩进乱了
|
3
Blask Jul 13, 2016
看错了 😄
|
4
raptium Jul 13, 2016
Java 的话可以用 Guava 的 RangeSet 来做
把 IP 转为数字,然后从全集里不断扣除就好了 |
5
SoloCompany Jul 14, 2016
这不是集合问题啊,算法问题的话或许勉强算得上
假设无交集的话,可以先排序(按起点 ip )然后一次遍历得到反向区段 有交集的话,问题就比较复杂了,正确的思路应该是先去掉交集再按上面方法做 |
6
SoloCompany Jul 14, 2016
|