python解决任务问题_python – 如何轻松解决分配优化任务

该博客讨论了一个脚本,旨在通过最大化配对值的总和来优化公司和个人之间的匹配。作者使用自上而下的方法和备忘录化来避免重复计算,但对处理较大输入(n>15)时的性能提升有疑虑。问题在于某些区域,如列表操作,可能成为性能瓶颈。寻求提高算法速度的建议。
摘要由CSDN通过智能技术生成

我正在制作一个脚本,它接受公司的元素并将它们与人的元素配对.目标是优化配对,使得所有配对值的总和最大化(每个配对的值被预先计算并存储在字典ctrPairs中).

他们都以1:1的比例配对,每个公司只有一个人,每个人只属于一家公司,公司数量等于人数.我使用自上而下的方法和memoization表(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值