我想在巨大的pcaps中记录所有使用过的端口。有65535个端口可用,每个端口都可以互相通话: 65535 x 65535总共链接
矩阵将非常稀疏(许多0个条目)。 另外,我认为边缘不必是定向的,因此可以将Port1-> Port2添加到Port2-> Port1(其将我们的值减少到65535 * 65536/2)。 你会如何使用python存储它?在numpy?估计的内存消耗量是多少?
之后,我想找到一个端口和pop()的最大总和(整个行和列同时)。这意味着,我想找到例如Port1使用500次(从Port2到Port1 100次,从Port3到Port1 300次,Port4到Port1 100次)......
以图形方式说,我希望有65535个节点可以相互连接。然后我想找到连接边上具有最高值总和的节点。之后,我想弹出节点(并删除相应的边,这将减少其他节点的总和)。
谢谢!
答案 0 :(得分:1)
在Python中,根据稀疏稀疏程度的不同,dict-of-dicts可以很好地处理这个问题。
connections = { ..., 8080: { 4545:17, 20151:3, ...}, ...}
如果我已经理解你正在做什么,那么端口p的连接数是
count = sum( connections[8080].values() )
删除端口p是
del connections[p]
for conn in connections.values(): # edit, bug fixed.
if p in conn:
del conn[p]
如果你想通过只存储一半的对来试图节省内存,那么简单就会受到很大的影响。
答案 1 :(得分:0)
查看Graph的邻接列表表示,它很可能适合您的需求。
但是,包含65535个顶点的图形并不大。即使你不能用简单的矩阵表示它。
内存消耗为O(E + V),V个顶点数(65535)和E个边数(在稀疏图上,它的大小顺序与V相同)。