算法复习之调度问题

算法复习之调度问题

5月18号就要算法考试了。利用五一这个假期好好复习一下。先来看看调度问题大概是要什么吧!

问题内容

  • 问题就是我们面前有一台机器。然后有n个人需要使用,每个人的加工时间都会给出 ( t j t_j tj)。然后每个人的等待时间是怎么计算处理的呢?他在使用机器的加工时间 t j t_j tj当然需要计算其中,因为加工的时候人是在等待的,然后因为只有一台机器,所以他在加工之前还需要等待排在他前面的人的加工时间。所以他总的加工时间是 t 1 + t 2 + t 3 + . . . + t j − 1 + t j t_1 + t_2 + t_3 + ...+t_{j-1} + t_j t1+t2+t3+...+tj1+tj。然后调度问题就是要进行合理调度,使得所有人的总等待时间加起来最小。

问题思路

  • 我们需要先确定总等待时间是怎么被计算出来的。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4hC3XDPO-1619834261088)(算法复习之调度问题.assets/1619833502719.jpg.jpg)]

  • 我这里假设一共有五个人,用 T ( i j ) T(i_j) T(ij)来表示它们的等待时间。所以总等待时间就是把这些5个T全部都加起来。我们可以看到是很有规律的, t i 1 t_{i1} ti1一共被加了5次,然后依次减少一个,最后 t i 5 t_{i5} ti5只加了一遍。所以很明显每个 t t t加的个数是满足某种关系的。如果我们假设 n n n为总人数,然后 k k k为当前的人排到的次序,我们可以列出这样一个式子

    ∑ k = 1 n ( n − k + 1 ) t i k \sum_{k=1}^n(n-k+1)t_{i_k} k=1n(nk+1)tik

  • 我们试着把这个例子的数据带入其中,n = 5,总时间等于 5 t i 1 + 4 t i 2 + 3 t i 3 + 2 t i 4 + 1 t i 5 5t_{i1} + 4t_{i2} + 3t_{i3} + 2t_{i4} + 1t_{i5} 5ti1+4ti2+3ti3+2ti4+1ti5。符合

  • 让我们想想这个例子是怎么计算出来的,首先我们通过例子已经知道,每个 t t j t_{t_j} ttj都会在总等待时间里出现,所以我们就遍历k从1到n,把每个t都加一遍,然后每个t的个数可以通过待定系数法的形式算出来(原谅我数学太菜了,直接看看不出来),这样就可以得到式子

  • 有了这个式子,我们很容易就能发现,越排在前面的人,最后计算总时间时,它需要乘的个数就约大,所以我们利用贪心法,把所有的t进行排序,把加工时间越小的排在越前面,这样就能使得总等待时间越小。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值