companies
から要素を取得し、それらを の要素とペアにするスクリプトに取り組んでいますpeople
。目標は、すべてのペア値の合計が最大になるようにペアリングを最適化することです (個々のペアリングの値は事前に計算され、ディクショナリに格納されますctrPairs
)。
1対1でペアを組み、1社に1人、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