【发布时间】:2017-09-21 08:31:51
【问题描述】:
我需要比较 2 张地图,我正在寻找最好的方法。特别是,给定输入中的两个映射,我需要确定至少 80% 的条目是否相同。目前的做法是:
-数据以key->value的形式存储在两个文件中。
例如:
1.1.1.0/24| 178 188 198
1.1.2.0/24| 199 2212 2999 212 ....
在这个文件中存储了大约 600K 条目。
-将条目上传到地图中,然后进行比较。
由于数据量很大,执行速度很慢。 (我需要多次执行这种比较)。我什至不知道地图是否是最好的数据结构。考虑到 2 个文件中的条目数可能不同(第一个文件中的某些条目可能不存在于第二个文件中,反之亦然),并且文件中的条目按字母顺序排序。我正在使用 Python。
两种不同的方法:
1)上传包含元组的集合后,比较执行如下:
def checkSame(bgpt1, bgpt2):
size1 = len(bgpt1)
size2 = len(bgpt2)
num_shared_ip = float(len(bgpt1 & bgpt2))
ratio = num_shared_ip / max(size1, size2)
return ratio
2) 使用映射通过迭代进行比较:
def compareMaps(map1,map2):
counter=0
for keyM1 in map1:
if keyM1 in map2:
if map2[keyM1]==map1[keyM1]:
counter+=1
...
【问题讨论】:
-
请显示您当前方法的代码。
-
刚刚编辑过。,无论如何我不需要实现,只是想知道如何提高性能
-
什么是“非常慢”,什么是可接受的时间量?
-
它必须更高效,无需考虑时间
-
return num_shared_ip / max(size1, size2)使用的 CPython 操作码少于ratio = num_shared_ip / max(size1, size2); return ratio。你去 - 它更有效,只是。 (是的,你需要推理时间,我不是无缘无故问这个。)
标签: python algorithm performance data-structures