def getPairsWithMaximumPMI(self, words, N):
print("\nSubtask 3: given a list of words, find the pairs with the greatest PMI")
#return [(1.0, "foo", "bar")]
possiblePairs = list(combinations(words, 2))
currMaxPMI = 0.0
res = [[]]
print("Total pairs", (len(possiblePairs)))
for p in possiblePairs:
counter += 1
print(counter)
if(self.getPMI(p[0], p[1]) > currMaxPMI):
currMaxPMI = self.getPMI(p[0], p[1])
res[0] = (currMaxPMI, p[0], p[1])
print(res)
return res
我的功能基本上会创建所有可能的单词来自给定的单词'在possiblePairs中列出和存储。
e.g. ['I', 'am', 'you'] --> [('I','am'), ('I', 'you'), ('am','you')]
然后遍历这个possiblePairs并做一些在我的问题中不重要的计算。
问题是,当possiblePairs很大时,计算大约需要30分钟,这不是我想要的。
我需要做些什么来提高算法的效率?
我是这类新手,所以我需要帮助。
编辑:
currMaxPMI = 0.0
res = [[]]
counter = 0
#print("Total pairs", (len(possiblePairs)))
for p in (combinations(words, 2)):
counter += 1
print(counter)
if(self.getPMI(p[0], p[1]) > currMaxPMI):
currMaxPMI = self.getPMI(p[0], p[1])
res[0] = (currMaxPMI, p[0], p[1])
print(res)
return res
答案 0 :(得分:5)
一个直接的改进是直接从对生成器进行迭代(假设zIndex
是您的私有生成器,绕过EVT_NODE_JOINED
优化版本)
combinations
这将允许运行时系统尽可能优化生成和获取,并节省将大量列表保存在内存中的开销。