python - 如何提高脚本的效率?

标签 python algorithm dictionary

我有两个文件,一个有 4K 字符串是 4K 行,一个有 100K 是 100K 行。

对于4k行中的每个字符串,我计算了该字符串与100k行中每个字符串的相似度比,然后我选择了100k行中相似度最高的字符串作为对行的“匹配” 4k 文件。

我尝试使用 python 字典来完成这项工作。有人告诉我这会很有效。

但是我的代码效率不高,看下面:

for k,k2 in itertools.product(dict1.keys(),my_dict1.keys()):
   a=float(difflib.SequenceMatcher(None,k,k2).ratio())
     if a>0.80:
         my_dict3[k+"t"+k2]=a


for key2 in my_dict3.keys():
        k1=key2.split("t")[0]
        k2=key2.split("t")[1]
        mydict[k1][k2]=my_dict3[key2]
        k=key2.split("t")

keylist4=mydict.keys()

for key4 in keylist4:
        key=max(mydict[key4].iteritems(),key=operator.itemgetter(1))[0]
        print "%st%s" % (key4,key) 

我想知道为什么代码效率不高。但它应该是。如何提高?

我想我做错了什么,但不确定在哪里。

谢谢!

最佳答案

虽然这段代码可以稍微优化一下,但时间复杂度仍然是O(m*n),其中mn 是每个字典中的键数。

因为 dict_1 有 4K 键,而 dict_2 有 100K 键,总组合要迭代

100K*4K = 400M

如果对于每个组合,您花费 0.1 毫秒 来解决问题,那么完全运行该程序仍需要时间

400M/(10000*86400) = 472 days = 1.4 years

即使您能够将性能提高 20%,您仍然需要 1.4*0.8 = 1.1 年

即使您使用 10 个并发线程来执行此操作,您也需要一个半月的时间来运行它。

所以,你这个问题最好是另想一个时间复杂度更好的算法解决方案。

关于python - 如何提高脚本的效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26922333/

相关文章:

python - 在python中查找文本文件中每个单词的频率

javascript - 如何通过单击按钮来更新 Flask 应用程序中的一个元素?

python - GetUserTimeline 总是返回我自己的时间线

python - 从列表创建字典

objective-c - Objective C 中带有 int 键的映射

python - 在字典理解中临时分配变量的优雅方式?

Python:将csv文件读入列表和数组中

algorithm - 红黑树

java - 如何检查一个数 < 1 是否是 2 的幂?

algorithm - 需要帮助了解如何减少斐波那契堆中的键