独立任务最优调度问题

算法设计与分析——独立任务最优调度问题 文章目录问题描述问题分析算法设计——动态规划最优子结构性质:构造最优解算法复杂度分析代码 问题描述 独立任务最优调度问题 ★问题描述: 用2台处理机A和B处理n个作业。设第i个作业交给机器A处理时需要时间ai.若由机器B来处理,则需要时间bi。由于各作业的特点和机器的性能关系,很可能对于某些i,有ai≥bi,而对于某些j≠i,有aj< bj;。既不能将一个作业分开由2台机器处理,也没有一台机... 阅读详情

本文内容遵从CC版权协议 转载请注明出自:    http://blog.youkuaiyun.com/masterluo

用2 台处理机A 和B 处理n 个作业。设第i 个作业交给机器A 处理时需要时间a[i],若由机器B 来处理,则需要时间b[i] 。由于各作业的特点和机器的性能关系,很可能对于某些i,有a[i] > b[i] ,而对于某些j,j≠i,有a[j] < b[j] 。既不能将一个作业分开由2 台机器处理,也没有一台机器能同时处理2 个作业。设计一个动态规划算法,使得这2 台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总时间)。研究一个实例:(a1,a2,a3,a4)=(2,5,7,10);(b1,b2,b3,b4)=(3,8,4,11)。对于给定的2 台处理机A 和B处理n 个作业,找出一个最优调度方案,使2台机器处理完这n 个作业的时间最短。

先给一个比较容易理解的状态转移方程:
用布尔量p(i,j,k)表示前k个任务可由A机在i时间内且B机在j时间内完成。易得:p(i,j,k) = p(i-ak, j, k-1) | p(i, j-bk, k-1).最优结果为p(i,j,n) = true 且 min(max(i, j))。这样表示有两个缺点:一是空间开销大,二是时间花销多。

今天上计算机安全学的时候一直在想怎么样把复杂度压缩下来。突破口当然还是i,j下标这个地方,p(i,j,k)表示前k个任务可由A机在i时间内且B机在j时间内完成,如果将其改为int类型,记录的是另一个数组的完成时间,这样就可以降到二维。假设第一维i保留,我们可以用p(i,k)表示前k个任务可由A在i时间内且B在p(i,k)时间内完成。

递推方程也容易修改了:第k个任务是由第k-1个任务推出来的,那么第k个任务可由A或B机完成:
如果由A机完成,则有:p(i + ak, k) = p(i, k - 1) (B机时间不变)
如果由B机完成,则有:p(i, k) = p(i, k - 1) + bk (A机时间不变)

综上分析可得p(i, k) = min( p(i, k – 1) + bk, p(i – ak, k – 1) ). 复杂度为O(n * sigm(ai))。

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

//最大任务数量
#define MAXN 201
//全部在A机器上运行的最大时间上限
#define MAXTIME 10001

int p [ MAXTIME ][ MAXN ];

int ai [ MAXN ], bi [ MAXN ];

int n;

int task( int n) {
    int sum = 0;
    for( int i = 0; i <= sum; ++ i) {
        p [ i ][ 0 ] = 0;
    }
    for( int k = 1; k <= n; ++ k) {
        sum += ai [ k ];
        for( int j = 0; j <= sum; ++ j) {
            p [ j ][ k ] = p [ j ][ k - 1 ] + bi [ k ];
            if( j >= ai [ k ]) {
                p [ j ][ k ] = min(p [ j ][ k ], p [ j - ai [ k ]][ k - 1 ]);
            }
        }
    }
    int ret = sum + 2;
    for( int i = 1; i <= sum; ++ i) {
        ret = min( ret , max(p [ i ][n ], i));
    }
    return ret;
}

int main() {
    scanf( "%d" , &n);
    for( int i = 1; i <= n; ++ i) {
        scanf( "%d" , & ai [ i ]);
    }
    for( int i = 1; i <= n; ++ i) {
        scanf( "%d" , & bi [ i ]);
    }
   

    int ans = task(n);
    printf( "%d /n " , ans);

    return 0;
}
动态规划——独立任务最优调度问题 独立任务最优调度问题 阅读详情

相关推荐

南邮 OJ 1220 独立任务最优调度问题

独立任务最优调度问题 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 164            测试通过 : 35  比赛描述 用2台处理机A和B处理n个作业。设第i个作业交给机器A处理时需要时间ai,若由机器B来处理,则需要时间bi。由于各作业的特点和机器的性能关系,很可能对于某些i,有ai

呈凹的博客 2360

【动态规划】独立任务最优调度问题

我认为做动态规划题的关键是找到一个合适的dp数组,确定它dp[i][j]的含义,用它和题目的最优子结构性质结合求解。具体思路如下:(笔记些许潦草hhh…)1.dp[i][j]表示第i个作业在第j(0-A,1-B)台机器上处理,两台机器处理完i个作业的最短总时间2.根据最优子结构性质貌似dp[i][0]=min(dp[i-1][0],dp[i-1][1])+a[i]dp[i][1]=min(dp[i-1][0],dp[i-1][1])+b[i]陷阱在这里,前面选择的不同会直接影响A、B机器的可用时刻,因此,直

Coco416的博客 1050

xxl-job快速入门(最全)

某电商平台需要每天上午10点,下午3点,晚上8点发放一批优惠券某银行系统需要在信用卡到期还款日的前三天进行短信提醒某财务系统需要在每天凌晨0:10分结算前一天的财务数据,统计汇总以上场景就是任务调度所需要解决的问题任务调度是为了自动完成特定任务,在约定的特定时刻去执行任务的过程XXL-Job:是大众点评的分布式任务调度平台,是一个轻量级分布式任务调度平台, 其核心设计目标是开发迅速、学习简单、轻量级、易扩展大众点评目前已接入XXL-JOB,该系统在内部已调度约100万次,表现优异。

gnwu1111的专栏 1702

独立任务最优调度问题-动态规划解决

问题描述: 用2台处理机A和B处理n个作业。设第i个作业交给机器A处理时需要时间ai,若由机器B来处理,则需要时间bi。由于各作业的特点和机器的性能关系,很可能对于某些i,有ai>bi,而对于某些j,j≠i,有aj>bj。既不能将一个作业分开由2台机器处理,也没有一台机器能同时处理2个作业。设计一个动态规划算法,使得这2台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总时间)。研究一个实例: (a1,a2,a3,a4,a5,a6)=(2,5,7,10,5,2);(b1,b

weixin_45745314的博客 2084

高通跃龙QCS6490部署yolov11_obb实战:QNN SDK工具链全解析与避坑指南

本文详细解析了在高通跃龙QCS6490平台上部署yolov11_obb模型的实战过程,重点介绍了QNN SDK工具链的使用与优化技巧。从环境配置、模型转换到性能调优,提供了全面的避坑指南和DSP加速配置建议,帮助开发者高效实现旋转框检测任务在边缘设备上的部署。

weixin_29232121的博客 305

量化金融笔记1-股票量化基础

股票量化基础 文章目录什么是股票股票的定义及其诞生所解决的问题股票的主体和流通股票的常规分类股票价格收益率什么是股票价格的收益率股票价格收益率计算在python中的实现两种收益率算法的特点及应用场合股票交易规则场内交易与场外交易A股、B股、H股国内多层次的资本市场股票交易指令和撮合机制股票交易时间股票交易成本股票复权股票数据介绍与提取行业分类和指数行情数据因子数据标的数据基本面数据 什么是股票 股票的定义及其诞生所解决的问题 股票的定义:股票是一种有价证券,是股份有限公司公开发行的用以证明投资者的股东身份

折桂狂人的博客 2395

算法设计与分析: 3-1 独立任务最优调度问题(双机调度问题)

3-1 独立任务最优调度问题(双机调度问题) 问题描述 用2台处理机A和B处理n个作业。设第i个作业交给机器A处理时需要时间aiaia_i,若由机器B来处理,则需要时间bibib_i。由于各作业的特点和机器的性能关系,很可能对于某些i,有ai≥biai≥bia_i≥b_i,而对于某些j,j≠i,有aj<bjaj<bja_j<b_j。既不能将一个作业分开由2台机器处理,也没有一台机器能同时处...

d3y1`5 81_09 4995

STM32F407步进电机控制及DM542驱动器使用

基于DM542驱动器的步进电机简单控制

qq_43868701的博客 1万+

独立任务最优调度(双机调度)问题

用两台处理机AA和BB处理nn个作业。设AA和BB处理第kk个作业的时间分别为aka_k和bkb_k。由于各个作业的特点和机器性能的关系,对某些作业,在AA上的处理时间长;而对另一些作业,在BB上的处理时间更长。一台处理机在某个时刻只能处理一个作业,而且作业处理是不可中断的,每个作业只能被处理一次。现在要找出一个最优调度方案,使得nn个作业被这两台处理机处理完毕的时间和最少。    本题是一个独立任

nudt_oys的博客 2万+

YOLOv12 改进 | Backbone改进 3

将CSP中的简单拼接改为可学习的特征选择门控,动态决定哪些特征流向下一层,同样再写这篇。:相比静态CSP的固定50/50分割,门控机制可学习0.3:0.7等最优比例。在输入端加入轻量SR模块,对下采样后的特征进行超分恢复,提升小目标检测能力。(小目标): 从 0.51 AP → 0.63 AP (+24%):采用ESPCN的高效亚像素卷积,避免传统插值的信息损失。:从通道级(SE)到空间级(Spatial)的多粒度控制。:结合浅层细节和深层语义,恢复小目标的纹理信息。

u012133341的博客 841

基于YOLOv26的护栏损坏检测系统原理讲解

本文介绍了一种基于YOLOv26深度学习的护栏损坏检测系统。该系统通过车载摄像头或固定监控采集道路护栏图像,利用改进的YOLOv26算法实现高效准确的损坏检测。系统采用分层架构设计,包含数据采集、检测处理、分析评估和应用服务四个层次,能够自动识别变形、断裂、缺失等五种常见损坏类型,并评估损坏严重程度。相比传统人工检测方法,该系统大幅提高了检测效率和准确性,降低了人工成本和安全风险。关键技术包括多尺度特征融合、注意力机制和自适应非极大值抑制等创新设计,使系统在复杂道路环境下仍能保持稳定的检测性能。

一键难忘的博客 328

双机独立任务最优调度问题

【算法分析与设计】 几天前,在算法分析与设计的课上,老师留给我们一些算法实现题,基本都涉及动态规划,需要用动态规划的思路来获得问题的最优解。 动态规划,从最简单的递推来理解吧:在高中时候我们都学习过数列,等差数列和等比数列。说白了就是在知道前n-1项的前提下计算第n项的值。这其中涉及到状态,也就是解决问题的过程中产生的一些中间结果。在问题模型中找出合适的状态,然后根据状态的特征建立状态转移方程...

weixin_40903037的博客 2026

分子动力学仿真软件:LAMMPS_(16).应用案例分析

通过以上四个应用案例,我们详细介绍了如何使用LAMMPS进行不同系统的分子动力学仿真。从简单的液体水仿真到复杂的纳米管仿真,每个案例都包含了详细的步骤说明和代码示例。读者可以通过这些示例实际操作并验证结果,从而更好地理解LAMMPS的功能和使用方法。希望这些案例能够为读者在分子动力学仿真领域的研究和应用提供帮助。

kkchenjj的博客 838

【算法】独立任务最优调度问题

动态规划 独立任务最优调度问题详解 问题描述 用2台处理机A和B处理n个作业。 设第i个作业交给机器A处理时需要时间ai,若由机器B来处理,则需要时间bi。由于各作业的特点和机器的性能关系,很可能对于某些i,有ai>=bi,而对于某些j,j≠i,有aj<bj。既不能将一个作业分开由2台机器处理,也没有一台机器能同时处理2个作业。 设计一个动态规划算法,使得这2台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总时间)。 研究一个实例: (a1,a2,a3,a4,a5,a6

weixin_45618073的博客 8895

100天精通Python(基础篇)——第1天:Python从起源到应用的全面解析(附上Python、PyCharm、VSCode下载安装详细教程)

100天精通Python(基础篇)——第1天:Python从起源到应用的全面解析(附上Python、PyCharm、VSCode下载安装详细教程)

努力让自己发光,对的人才能迎着光而来 101万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

经典算法 独立任务最优调度问题

核心是划分子集,使得两组时间最大值最小。动态规划用于遍历所有可能的分配方案。使用max(A时间, B时间)表示总耗时,目标是让它尽量小。用滚动数组优化空间,时间复杂度为。要我为你把这个逻辑画成图解或流程图吗?

wuqingshun314159的博客 1087

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

独立任务最优调度问题 (动态规划dp)

参考:https://blog.youkuaiyun.com/LDUtyk/article/details/53995281 独立任务最优调度问题: 使用dp[i][j]数组表示的是第i个作业时,机器a花费不小于j时间的前提下,机器b完成作业i所需的最少时间。 当机器a在时间j的时候小于a[i]时,当然只能由b机器完成, 如果时间j大于a[i],那么考虑是由a还是b机器完成才好, 给a处理的话,b花费时间是dp[i-1][j-a[i]], 给b处理的话,b花费时间是dp[i-1][j]+b[i-1]; 从中取小值作为d

Changqing9的博客 1408

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

动态规划之独立任务最优调度问题

问题描述 给出了每个作业在A、B处理机上处理的时间,我们应该找出所有任务全部完成的调度时间。 题目分析 题目要求我们设计一个动态规划算法,计算出完成所有作业所用的最短时间。 根据我们动态规划的基本框架,先找到状态,然后选择,最终写出状态转移方程。 那我们先看一下状态,这里面的状态无非是作业处理时间以及哪个机器来处理作业。所以我们只需要对这几个状态来进行选择。然后写出状态转移方程即可。 这道题的状态转移方程有点难想,但是如果从选择的角度就没那么困难。 我们应该选择什么呢?这里面无非只有两个机器,所以我们只需

weixin_44755413的博客 6007
上一篇: 2009 Google Code Jam Round 1C 题解
下一篇: 最少硬币问题
MasterLuo
博客等级 码龄18年 33粉丝 15原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值