Algorithm 贪婪算法最优性的证明

Algorithm 贪婪算法最优性的证明,algorithm,pseudocode,greedy,proof,Algorithm,Pseudocode,Greedy,Proof,我遇到的问题如下: 我们有n个任务,其中l_i和w_i是任务的完成时间和权重i。提出一个算法,使所有i的f_i*w_i的总和最小化,其中f_i是任务i完成的时间。例如,如果先安排某个任务i,然后是f_i=t_i,如果是第二个任务i,则是f_i=t_i+t_(第一个任务) 我花了一些时间在这方面,我首先认为简单地通过从最高权重到最低权重选择任务来列出任务列表就足够了,但意识到这是错误的,例如,如果我们有两个任务: 1个任务:w_i=10,l_i=100 2任务:w_i=9,l_i=1 如果我们先选

我遇到的问题如下:

我们有n个任务,其中
l_i
w_i
是任务的完成时间和权重
i
。提出一个算法,使所有i的f_i*w_i的
总和最小化,其中
f_i
是任务
i
完成的时间。例如,如果先安排某个任务i,然后是
f_i=t_i
,如果是第二个任务i,则是
f_i=t_i+t_(第一个任务)

我花了一些时间在这方面,我首先认为简单地通过从最高权重到最低权重选择任务来列出任务列表就足够了,但意识到这是错误的,例如,如果我们有两个任务:

1个任务:
w_i=10,l_i=100

2任务:
w_i=9,l_i=1

如果我们先选择w_i 10,那么我们会得到10*100+9*101=1909,但是如果我们第二次选择它,我们会得到9*1+10*101=1019


现在我认为最优算法是将任务从w_I/l_I的最高比率调度到最低比率的算法,但我不确定如何证明它。有人能帮忙吗?

您应该能够证明,如果任务没有按照您的建议安排,您可以通过交换两个顺序错误的相邻任务来改进日程安排。如果你减去这两种情况下的总加权完成时间,你最终应该会看到一个表达式,比如


L1W1+(L1+L2)W2-[L2W2+(L2+L1)W1],发现如果L1/W1和L2/W2的比较方向错误,则通过颠倒顺序获得收益。

你是对的,任务应该按照
w_i/L_i
的降序安排。 检查Tim Rawgarden教授对正确性证明的解释

使标题更精确:将算法名称添加到标题中。