python解决任务问题_如何有效地求解作业优化任务分配问题

我正在编写一个脚本,它从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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值