算法设计的两个例子
标签(空格分隔): 算法知识文档
例1:调度问题
问题:
有n项任务,每项任务加工时间已知.从0时刻开始陆续安排到一台机器上加工.每个任务的完成时间是从0时刻到任务加工截至的时间.
求:
总完成时间(所有任务完成时间之和)最短的安排方案.
实例:
任务集: S={
1,2,3,4,5} S = { 1 , 2 , 3 , 4 , 5 }
加工时间: t1=3,t2=8,t3=5,t4=10,t5=15 t 1 = 3 , t 2 = 8 , t 3 = 5 , t 4 = 10 , t 5 = 15
分析:
我们需要计算的是所有任务完成时间之和.因为只有一台机器,所以做第i项任务需等待第i-1项任务做完,我们所要求解的是如何安排做这些任务的顺序使得总时间最小.比如,如果按照实例所给出的5个任务顺序的进行加工,需要的总时间计算如下:
求得: tsum=3∗5+8∗4+5∗3+10∗2+15∗1=97 t s u m = 3 ∗ 5 + 8 ∗ 4 + 5 ∗ 3 + 10 ∗ 2 + 15 ∗ 1 = 97
贪心算法的解:
算法描述: 优先选择加工时间短的任务先完成
算法: 按照加工时间从小到大排列 (3,5,8,10,15) ( 3 , 5 , 8 , 10 , 15 )
解: 任务加工顺序 (1,3,2,4,5) ( 1 , 3 , 2 , 4 , 5 )
总完成时间: tsum=3∗5+5∗4+8∗3+10∗2+15∗1=94 t s u m = 3 ∗ 5 + 5 ∗ 4 + 8 ∗ 3 + 10 ∗ 2 + 15 ∗ 1 = 94
当前总时间是最小的,后面会给出证明.我们先进行问题的建模.
问题建模
输入:
任务集合: S={
1,2,3,...,n