这是使用动态规划的加权作业(job)调度问题

How each list is structured = [city, start_day, end_day, revenue]
rev = [['A', 1, 7, 5], ['B', 6, 9, 4], ['C', 1, 5, 3]]
>>> print(max_rev(rec))
['B', 6, 9, 4], ['C', 1, 5, 3]

我对n log n的try :

  1. 使用修改后的合并排序(n log n),根据城市的最后一天对列表进行排序,这将得到[['C', 1, 5, 3], ['A', 1, 7, 5], ['B', 6, 9, 4]]个数字0->n根据它现在的索引(我之前提到过插入排序,我搞砸了,因为它最糟糕的情况是n^2,所以我现在使用合并排序)
  2. *clueless from here.创建一个memo list of n (3) size,每个memo的指数代表一个特定城市在现在已排序版本中的指数位置
  3. 备忘录的每个索引都将包含销售人员在该城市工作所能获得的最大收入.通过循环浏览已排序的列表来实现这一点,对于每个城市信息,将其与开始日大于所选城市结束日的城市之间的所有收入相加.

`

import math

def max_rev(rev):
    merge_sort(rev)
    memo = [math.inf] * len(rev)
    for i in range(len(rev)):
        # another for loop would mean a n^2

    return rev

rev = [['A', 1, 7, 5], ['B', 6, 9, 4], ['C', 1, 5, 3]]
print(max_rev(rev))

下面是我起草的另一个例子:

rev = [['A', 1, 7, 5], ['B', 6, 9, 4], ['C', 1, 5, 3], 
       ['D', 2, 3, 5], ['E', 5, 7, 4], ['F', 4, 6, 3]]

output -> ['D', 2, 3, 5], ['B', 6, 9, 4] 

enter image description here

谢谢

推荐答案

你开了个好头.让我们从你的分类和编号的工作列表开始.

考虑这个问题:"如果你只能从事数字工作,你能挣多少钱?".打money(i)吧.money(n-1)就是你想要的答案.

显然,money(0)是工作0的价值.

如果您知道之前工作的结果,可以轻松计算以下工作的money(i):

money(i) = max(
    money(i-1),  // this is the value if we don't do job i
    job_value(i), // this is the case when we only do job i
    job_value(i) + money(j) // j is the highest value job that ends before i starts
)

现在你只需要找到最好的j个.你错过的部分是money(i)always,至少和money(i-1)一样大——有另一份工作是没有坏处的,所以最好的j份工作总是在i开始之前结束的highest numbered份工作.

由于您的作业(job)列表是按结束时间排序的,所以您可以在O(logn)时间内通过二进制搜索找到这个作业(job)j,同时搜索O(N logn).

Python相关问答推荐

try 从网站获取表(ValueRight:如果使用所有纯量值,则必须传递索引)

将大小为n*512的数组绘制到另一个大小为n*256的数组的PC组件

Plotly Dash函数来切换图形参数-pPython

使用pandas MultiIndex进行不连续 Select

如何使用scikit-learn Python库中的Agglomerative集群算法以及集群中声明的对象数量?

将行从一个DF添加到另一个DF

如何防止Plotly在输出到PDF时减少行中的点数?

Python -根据另一个数据框中的列编辑和替换数据框中的列值

如何使用Python将工作表从一个Excel工作簿复制粘贴到另一个工作簿?

如何标记Spacy中不包含特定符号的单词?

在线条上绘制表面

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

为什么sys.exit()不能与subproccess.run()或subprocess.call()一起使用

使用setuptools pyproject.toml和自定义目录树构建PyPi包

迭代嵌套字典的值

为一个组的每个子组绘制,

Plotly Dash Creating Interactive Graph下拉列表

如何启动下载并在不击中磁盘的情况下呈现响应?

如何禁用FastAPI应用程序的Swagger UI autodoc中的application/json?

从旋转的DF查询非NaN值