Guest User

Untitled

a guest
Mar 4th, 2012
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.45 KB | None | 0 0
  1. def Advisor0 (subjects, maxWork, i, bestSubset, bestSubsetValue,
  2.                             subset, subsetValue, subsetWork):
  3.     m = {}
  4.     return dpAdvisorHelper(subjects, maxWork, i, bestSubset, bestSubsetValue,
  5.                             subset, subsetValue, subsetWork, m)
  6.  
  7. def dpAdvisorHelper(subjects, maxWork, i, bestSubset, bestSubsetValue,
  8.                             subset, subsetValue, subsetWork, m):
  9.     # Hit the end of the list.
  10.     if (i,subsetValue,subsetWork) in m:
  11.         return m[(i,subsetValue,subsetWork)]
  12.     else:
  13.         if i >= len(subjects):
  14.             if bestSubset == None or subsetValue > bestSubsetValue:
  15.                 m[(i,subsetValue,subsetWork)] = subset[:], subsetValue
  16.                 return subset[:], subsetValue
  17.             else:
  18.                 # Keep the current best.
  19.                 m[(i,subsetValue,subsetWork)] = bestSubset, bestSubsetValue
  20.                 return bestSubset, bestSubsetValue
  21.         else:
  22.             s = subjects[i]
  23.             # Try including subjects[i] in the current working subset.
  24.             if subsetWork + s[WORK] <= maxWork:
  25.                 subset.append(i)
  26.                 bestSubset, bestSubsetValue = dpAdvisorHelper(subjects,
  27.                         maxWork, i+1, bestSubset, bestSubsetValue, subset,
  28.                         subsetValue + s[VALUE], subsetWork + s[WORK],m)
  29.                 m[(i,subsetValue,subsetWork)] = bestSubset, bestSubsetValue
  30.                 subset.pop()
  31.             bestSubset, bestSubsetValue = dpAdvisorHelper(subjects,
  32.                     maxWork, i+1, bestSubset, bestSubsetValue, subset,
  33.                     subsetValue, subsetWork, m)
  34.             m[(i,subsetValue,subsetWork)] = bestSubset, bestSubsetValue
  35.         return bestSubset, bestSubsetValue
  36.  
  37. def dpAdvisor(subjects, maxWork):
  38.     """
  39.    Returns a dictionary mapping subject name to (value, work) that contains a
  40.    set of subjects that provides the maximum value without exceeding maxWork.
  41.  
  42.    subjects: dictionary mapping subject name to (value, work)
  43.    maxWork: int >= 0
  44.    returns: dictionary mapping subject name to (value, work)
  45.    """
  46.     nameList = subjects.keys()
  47.     tupleList = subjects.values()
  48.     bestSubset, bestSubsetValue = \
  49.             Advisor0(tupleList, maxWork, 0, None, None, [], 0, 0)
  50.     outputSubjects = {}
  51.     print bestSubset, bestSubsetValue
  52.     for i in bestSubset:
  53.         outputSubjects[nameList[i]] = tupleList[i]
  54.     return outputSubjects
Advertisement
Add Comment
Please, Sign In to add comment