算法 - 最小化总延迟

时间:2009-10-26 18:40:53

标签: c# algorithm scheduling

我正在尝试实现一种最小化单机总延迟的精确算法。我正在网上搜索,以了解如何使用动态编程实现它。我读过Lawler的论文,他在77年提出了一个PSEUDOPOLYNOMIAL算法。但是,仍然无法用java或c#代码映射它。

请您帮我提供一些如何有效实施这种精确算法的参考资料?

Edit-1:@bcat:不是真的。我需要为我们的软件实现它。 :(我仍然无法找到任何指导如何实现它。贪婪的一个很容易实现,但调度的结果并不那么令人印象深刻。

亲切的问候,

Xiaon

3 个答案:

答案 0 :(得分:1)

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

如果没有这个,我假设你使用这个定义:

您希望在具有n个独立作业的单个计算机调度问题中最小化总延迟,每个作业具有处理时间和截止日期。

您要做的是选择一部分工作,使它们不重叠(单机可用),您也可以选择执行这些工作的顺序,保留截止日期。

我想第一步要按截止日期排序,似乎没有任何好处以某种不同的方式对它们进行排序。

接下来剩下的就是选择子集。这是动态编程提供帮助的地方。我将尝试描述状态和递归关系。

<强>州:

[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)

最后,您将这些调用返回的这两个值中的最小值保存到状态

[current time][current job]

然后在时间0和作业0开始递归。

顺便说一下,贪婪似乎做得很好,请看看:

http://www.springerlink.com/content/f780526553631475/

答案 1 :(得分:0)

对于单机,最长处理时间表(也称为减少时间算法)是最佳的,如果您提前知道所有作业并且可以将它们从最长到最短排序(所以您需要做的就是排序)。

正如已经提到的那样,您没有指定有关您的日程安排问题的信息,因此除此之外很难提供帮助(因为没有普遍优化的高效调度程序)。

答案 2 :(得分:-1)

也许Stony Brook Algorithm Repository的Job Scheduling Section可以帮到你。