我正在编写一个脚本,该脚本从 中获取元素companies
并将它们与people
. 目标是优化配对,使所有配对值的总和最大化(每个单独配对的值被预先计算并存储在字典中ctrPairs
)。
他们都是1:1配对的,每个公司只有一个人,每个人只属于一个公司,公司的数量等于人数。我使用自上而下的方法和记忆表 ( memDict
) 来避免重新计算已经解决的区域。
我相信我可以大大提高这里发生的事情的速度,但我不确定如何。我担心的区域标有#slow?
,任何建议都将不胜感激(该脚本适用于列表 n<15 的输入,但对于 n > ~15,它变得非常慢)
def getMaxCTR(companies, people):
if(memDict.has_key((companies,people))):
return memDict[(companies,people)] #here's where we return the memoized version if it exists
if(not len(companies) or not len(people)):
return 0
maxCTR = None
remainingCompanies = companies[1:len(companies)] #slow?
for p in people:
remainingPeople = list(people) #slow?
remainingPeople.remove(p) #slow?
ctr = ctrPairs[(companies[0],p)] + getMaxCTR(remainingCompanies,tuple(remainingPeople)) #recurse
if(ctr > maxCTR):
maxCTR = ctr
memDict[(companies,people)] = maxCTR
return maxCTR