多独立任务执行的最小空间动态规划问题

本文介绍了一个关于如何通过动态规划方法解决多任务执行的问题,其中要考虑任务运行时所需空间和运行后残留空间。算法思路涉及任务顺序调整,以确保整个任务链的空间需求最小。类似于沉降排序或冒泡排序,最终找到的任务顺序可以保证所需空间最小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 今天在百度知道上看到有人问这样一道题:

描述
有n个任务需要依次运行,第i个任务运行时需要占R[i]的空间,运行完成后仍然残留O[i]的空间( O[i]<R[i])。现在需要合理安排这些任务,使得运行完这些任务的需要的空间最小。
例如说,有两个任务,R[1]=10,O[1]=5,R[2]=8,O[2]=6。
如果先运行第1个任务,再运行第2个任务,则总共最多需要13的空间;
如果先运行第2个任务,再运行第1个任务,则总共最多需要16的空间;
因此选择第一种方式,使得占用空间最小。
输入
每组数据第一行为任务数 n (n <= 30),接下来的 n 行分别是对应的 R[i] O[i]。
输入以 0 结尾。
输出
对每组数据,输出所需的内存。
样例输入
2
10 5
8 6
5
5 5
4 4
3 3
2 2
1 1
0
样例输出
13
15

 

 

我的解答思路是

设Wi=Ri-Oi。只有两个任务t1,t2时,需要空间为V,需要最小空间实际为Vm
设先执行t1再执行t2表示为t1->t2,先执行t2再执行t1表示为t2->t1
则当t1->t2时,有V1=R2-R1+2O1;当t2->t1时,V2=R1-R2+2O2。
那么
V(t1->t2)=Vm(t1->t2)=min{V1,V2}
有了以上定义,能证明:对于任意的整数0<i<n,若V(ti->t(i+1)) =Vm(ti->t(i+1)),则
任务链满足t1->t2->...->ti->...tn时,有结论:
V(t1->t2...->tn)=Vmin(t1->t2..->tn)

这个结论还没有做严谨的证明,虽然我很想像数学老师一样,用“显然”来得到这个结论,但是作为一个严谨的YY者,日后一定要完成这个证明的
一句话就是,一个任务链中,任意相邻的两个任务

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值