Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 最小化总延误的算法_C#_Algorithm_Scheduling - Fatal编程技术网

C# 最小化总延误的算法

C# 最小化总延误的算法,c#,algorithm,scheduling,C#,Algorithm,Scheduling,我正试图实现一个精确的算法,使单台机器的总延误最小化。我在网上搜索,想知道如何用动态规划实现它。我读过Lawler的论文,他在77年提出了一种伪多项式算法。但是,仍然无法在java或c代码中映射它 你能帮我提供一些如何有效实现这个精确算法的参考吗 编辑-1:@bcat:不太可能。我需要为我们的软件实现它:(我仍然找不到任何关于如何实施它的指导。贪婪的一个很容易实施,但日程安排的结果并不令人印象深刻 亲切问候, Xiaon也许Stony Brook算法库的管理员可以帮助您。您可以指定特定问题的确切

我正试图实现一个精确的算法,使单台机器的总延误最小化。我在网上搜索,想知道如何用动态规划实现它。我读过Lawler的论文,他在77年提出了一种伪多项式算法。但是,仍然无法在java或c代码中映射它

你能帮我提供一些如何有效实现这个精确算法的参考吗

编辑-1:@bcat:不太可能。我需要为我们的软件实现它:(我仍然找不到任何关于如何实施它的指导。贪婪的一个很容易实施,但日程安排的结果并不令人印象深刻

亲切问候,


Xiaon

也许Stony Brook算法库的管理员可以帮助您。

您可以指定特定问题的确切特征,以及不同变量的限制和输入的总体特征

如果没有这一点,我假设您使用以下定义:

在一个有n个独立作业的单机调度问题中,每个作业都有自己的处理时间和到期日,您希望最小化总延误

您要做的是选择作业的子集,这样它们就不会重叠(单机可用),并且您还可以选择执行作业的顺序,保留到期日期

我想第一步要做的是按到期日排序,似乎用不同的方式排序没有任何好处

接下来剩下的是选择子集。这里是动态规划的帮助。我将尝试描述状态和递归关系

状态:

[current time][current job] = maximum number of jobs done
关系:

[current time][current job] = maximum number of jobs done
您可以处理当前作业并调用

f(current time + processing_time_of[current job],current job +1)
或者你跳过这个过程打电话给我

f(current time,current job +1)
最后,取这些调用返回的2个值中的最小值,并将其存储在state中

[current time][current job]
在时间0和作业0开始递归

顺便说一句,贪婪似乎做得很好,看看这个:


对于单机,如果您提前知道所有作业,并且可以将它们从最长排序到最短排序(因此您只需进行排序),则最长处理时间计划(也称为递减时间算法)是最佳的

如前所述,您没有指定有关调度问题的任何信息,因此很难提供更多帮助(因为不存在普遍最优的高效调度程序)