第5章 回溯法,批处理作业调度

Leetcode 621. 任务调度器 解题思路及C++实现 方法一:贪心算法 解题思路: 使用贪心的思想,先把出现最多的任务分配了(即每隔n个单位时间分配一个任务),然后再把其它任务填上。如下图 所以需要先计算各任务出现的次数,找到出现最多的任务,程序中使用map来计数,然后复制到vector,再通过自定义的比较函数cmp,对vector进行排序。 结果的计算公式为:(x - 1) * (n + 1) + num 其中,x表示出现次数最多的任... 阅读详情
#include <iostream>
#include <cstdio>

using namespace std;

#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define MAXSIZE 10
#define INF 999999999

struct Job_Info
{
	int t1, t2;
}job[MAXSIZE];
int n;						//作业数量
int solu[MAXSIZE];			//调度次序
int optimalValue;			//最优值
int optimalSolu[MAXSIZE];	//最优解

void Swap(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}

//time1,time2分别为机器1和机器2的完成处理时间
//totalTime为已完成作业的时间和
void Backtrack(int k, int time1, int time2, int totalTime)
{
	int i;
	if (k >= n)
	{
		for (i = 0; i < n; i++)
		{
			optimalSolu[i] = solu[i];
		}
		optimalValue = totalTime;
	}
	else
	{
		for (i = k; i < n; i++)
		{
			//计算完成第i个任务后,两机器的时间
			int nextTime1 = time1 + job[solu[i]].t1;
			int nextTime2 = MAX(nextTime1, time2) + job[solu[i]].t2;
			//已完成作业的时间和是否小于最优值
			if (totalTime + nextTime2 < optimalValue)
			{
				Swap(solu[k], solu[i]);
				Backtrack(k+1, nextTime1, nextTime2, totalTime+nextTime2);
				Swap(solu[k], solu[i]);
			}
		}
	}
}

int main(void)
{
	int i;
	for (i = 0; i < MAXSIZE; i++)
	{
		solu[i] = i;
	}
	while (scanf("%d", &n) != EOF)
	{
		for (i = 0; i < n; i++)
		{
			scanf("%d%d", &job[i].t1, &job[i].t2);
		}

		optimalValue = INF;
		Backtrack(0, 0, 0, 0);

		printf("optimal value: %d\n", optimalValue);
		printf("optimal solution: ");
		for (i = 0; i < n-1; i++)
		{
			printf("%d ", optimalSolu[i]+1);
		}
		printf("%d\n", optimalSolu[i]+1);
	}
	return 0;
}

批处理作业调度(回溯法) 1.问题描述:   给定n个作业,集合J=(J1,J2,J3)。每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和,称为该作业调度的完成时间和。即F12+F22+F32+.....+Fn2 简单描述:   阅读详情

相关推荐

批处理作业调度问题(回溯法)

批处理作业调度问题(回溯法) 批处理作业调度问题是一个经典的组合优化问题。给定n个作业,每个作业在两台机器上的处理时间分别为M[i][1]和M[i][2],目标是找到一个最优调度序列,使得所有作业在两台机器上的完成时间之和最小。回溯法通过系统地搜索所有可能的调度方案,并利用剪枝策略来减少搜索空间,最终找到最优解。

m0_49844997的博客 1007

独立任务最优调度问题(C++)

编译环境:Dev-C++ 用动态规划算法设计独立任务最优调度问题解决方案并实现,并分析算法复杂性。

m0_57443189的博客 1662

流量特征工程实战:基于Python脚本的CIC-FlowMeter批量自动化处理

本文详细介绍了如何利用Python脚本对CIC-FlowMeter工具进行批量自动化封装,实现从海量PCAP文件中高效提取流量特征并生成CSV文件。通过构建健壮的自动化流水线,解决了手动处理效率低下、易出错的问题,并分享了并行处理、错误处理等关键优化技巧,助力网络流量分析与机器学习数据预处理工作。

c6d7e8f9g的博客 744

codeup26826_最佳调度问题

codeup26826_最佳调度问题 时空限制    1000ms/128MB 问题描述     假设有n个任务由k个可并行工作的机器完成。完成任务i需要的时间为ti。试设计一个算法找出完成这n个任务的最佳调度,使得完成全部任务的时间最早。 编程任务     对任意给定的整数n和k,以及完成任务i需要的时间为ti,i=1~n。编程计算完成这n个任务的最佳调度。 输入格式     由文...

H优快云 1122

Springboot(五十六)SpringBoot3集成SkyWalking

Dskywalking.collector.backend_service:表示skywalking的collector服务的IP及端口。注意上图中红框标注的位置,我们可以根据启动Springboot项目启动时候控制台输出的ID进行筛选。注意上图中红框标注的位置,我们可以根据启动Springboot项目启动时候控制台输出的ID进行筛选。其他的版本的 APM 地址(这个我不需要,我们是在docker中部署的,留给有需要的同学)其他的java 版本的 Agents 地址。

camellia的博客 2600

华为ITR流程实战指南:从设计到落地的全流程解析(附完整方案下载)

本文深度解析华为ITR流程从设计到落地的全流程实战指南。ITR不仅是高效处理客户问题的“救火”系统,更是驱动产品改进、预防问题的企业“免疫系统”。文章详细拆解了流程设计的四步走策略、三层技术支持体系的组织保障、以闭环改进为核心的考核激励,并探讨了如何借鉴其精髓,优化自身问题管理,实现从被动响应到主动服务的跨越。

y2z3a4b5c的博客 377

C++ 算法设计与分析中作业调度问题

问题: 作业调度: 如果在单处理器上,有 n 个运行时间分别为 t1,t2,t3, …, tn的已知作业,请考 虑它们的调度问题。这些作业可以按任意顺序执行,一次只能执行一个作业。 要求: (1)安排一个调度计划,使得所有的作业在系统中花费的时间最少 (一个作业在系统中花费的时间是该作业用于等待的时间和用于运行的时间的总和。) 思路:按照作业运行时间递增的顺序进行调度(运行时间一样,按照id递增的顺序进行调度 为该问题设计一个贪婪算法; (2)分析该贪婪算法是否总是能产生最优解? 代码中用到的部分知识.

chen的博客 1945

售货机非现金支付开发指南:MDB协议下VPOS刷卡器的那些坑

本文深入探讨了MDB协议下非现金支付设备的开发实践,重点解析了NAYAX VPOS刷卡器的集成难点与解决方案。从RS232通信参数配置到Always idle功能实现,提供了一套完整的售货机支付系统开发指南,帮助开发者规避常见陷阱,提升设备兼容性与交易稳定性。

weixin_29258297的博客 134

【JobScheduling】C++调度算法详解与实现

作业调度算法是操作系统中的一个关键组成部分,它负责确定哪个作业应该在何时执行。这些算法的选择会直接影响系统的性能和用户体验。本博客将深入研究并分析三种经典的作业调度算法,为读者提供对这一主题的全面理解。在这之前,先需要了解作业调度中几个参数:提交时刻、执行时间、开始时刻、周转时间、周转系数等。设作业Jii12nJi​i12...n的提交时刻为tsit_{si}tsi​,执行时间为trit_{ri}tri​,作业完成时刻为toit_{oi}toi。

m0_73589720的博客 2149

望获实时Linux与国产芯片协同:打造LinuxCNC数控机床的全栈国产化方案

本文探讨了如何通过望获实时Linux与飞腾、龙芯等国产芯片的深度协同,为LinuxCNC数控机床打造全栈国产化方案。望获实时Linux通过中断隔离等核心技术,提供亚微秒级确定性响应,解决了传统Linux系统实时性不足的痛点,使LinuxCNC得以稳定驱动高精度机床。该方案实现了从硬件、操作系统到应用软件的全栈自主可控,为工业控制领域提供了高性能、可定制的国产化选择。

weixin_29291069的博客 648

newman的使用

Newman是一个基于Node.js的postman命令行工具,用于运行和测试PostmanAPI 请求的集合。它允许用户在命令行环境中执行Postman的JSON文件,从而实现接口自动化测试和持续集成,同时支持用户进行自动化测试、批量执行请求、生成报告等操作。

m0_62825058的博客 1616

批处理作业调度问题 ——回溯法详解

1、问题描述 每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和f=F2i,称为该作业调度的完成时间和 2、简单描述 对于给定的n个作业,指定最佳作业调度方案,使其完成时间和达到最小。 区别于流水线调度问题: 批处理作业调度旨在求出使其完成时间和达到最小的最佳调度序列; 流水线调度问题旨在求出使其最后一个作业的完成时

weixin_44023658的博客 5900

手把手教你学simulink(8.2)--simulink的实战案例:信号分析

通过以上步骤,你已经成功使用 Simulink 对信号进行了频谱分析和时域分析,提取了信号的有用信息。这个案例展示了如何创建 Simulink 模型、添加和连接模块、设置仿真参数、运行仿真以及分析结果。希望这个案例能帮助你更好地理解和使用 Simulink 进行信号分析。

MHD0815的博客 1123

【回溯法】--批处理作业调度

【回溯法】--批处理作业调度1、问题描述    每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和f=F2i,称为该作业调度的完成时间和2、简单描述   对于给定的n个作业,指定最佳作业调度方案,使其完成时间和达到最小...

荷叶田田 2万+

Xilinx_JESD204B

Xilinx_JESD204B_AXI配置 说明:通过FPGA的高速数据接口JESD204B对AD9625进行高速采集。 环境:Vivado2018.3。 IP核:JESD204(7.2)。 参考手册:pg066_jesd204 v7.2。 资料以及IP_licence:JESD204B AXI协议资料:AXI 文章目录JESD204B概述JESD204B接口术语JESD204B 层JESD204B_AXI介绍AXI介绍JESD204B__AXI_Lite接口AXI-Lite接口介绍AXI-Lite接口信号

Crazzy_M的博客 1万+

WINCC7.3破解文件

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

批处理作业调度问题 (回溯法)

【问题】n 个作业{1, 2, …, n}要在两台机器上处理,每个作业必须先由机器 1 处理,再由机器 2 处理,机器 1 处理作业i所需时间为 ai,机器 2 处理作业 i 所需时间为 bi(1 ≤ i ≤ n),批处理作业调度问题(batch-job scheduling problem)要求确定这 n 个作业的最优处理顺序,使得从第 1 个作业在机器 1 上处理开始,到最后一个作业在机器 2 上处理结束所需时间最少。

2301_79582459的博客 1693

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

批处理作业调度问题【回溯法】

1 问题重述 给定n个作业,集合J=(J1,J2,J3)。每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和,称为该作业调度的完成时间和。即F12+F22+F32+…+Fn2 简单描述: 对于给定的n个作业,指定最佳作...

qq_43727105的博客 4118

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

回溯法 批处理作业调度_回溯法——批处理作业调度

问题描述:给定n个作业的集合J=(J1,J2,... ,Jn)。每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和f=F2i,称为该作业调度的完成时间和。简单描述:对于给定的n个作业,指定最佳作业调度方案,使其完成时间...

weixin_39793576的博客 496

回溯法 批处理作业调度_算法设计与分析——批处理作业调度(回溯法)

之前讲过一个相似的问题流水作业调度问题,那一道题最开始用动态规划,推到最后得到了一个Johnson法则,变成了一个排序问题,有兴趣的可以看一下https://www.cnblogs.com/wkfvawl/p/11667092.html一、问题描述给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理,然后由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,...

weixin_32073375的博客 781

回溯法 批处理作业调度_批处理作业调度(回溯法)

1.问题描述:给定n个作业,集合J=(J1,J2,J3)。每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和,称为该作业调度的完成时间和。即F12+F22+F32+…..+Fn2简单描述:对于给定的n个作业,指定最佳作...

weixin_30121389的博客 925

回溯法——批处理作业调度

问题描述:   给定n个作业的集合J=(J1,J2,... ,Jn)。每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和f=F2i,称为该作业调度的完成时间和。 简单描述:   对于给定的n个作业,指定...

a1394774308的博客 424

Java批处理调度_批处理作业调度问题·回溯法·java版

问题描述:/*************************************************************批处理作业调度给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理,然后由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时间。所有作业在机器2上完成处理的时间和称为该作业调度的完成时间...

weixin_42565402的博客 908

几种作业调度问题总结

★流水作业调度(动态规划) ★多机调度问题 (贪心算法) ★批处理作业调度 (回溯法)

sqjddb的博客 4146

【算法设计与分析】回溯法:装载问题与批处理作业调度问题

1、装载问题的问题提出是,有一批共n个集装箱要装上2艘载重量分别为 和 的轮船,其中集装箱i的重量为 ,且 。问是否有一个合理的装载方案能将这n个集装箱装上这两艘轮船。 设n=4, =10, =12, w={5, 2, 1, 3}。采用回溯法解决该装载问题,并回答以下问题: 1)如何定义装载问题解空间?如何组织装载问题的解空间结构? 1.定义问题的解空间 首先定义问题的解空间。对于有4个集装箱要装上轮船的装载问题,其解空间由长度为4的0-1向量即{(0,0,0,0),(0,0,0,1),(0,0,1,0

qq_30260147的博客 2165
上一篇: 第5章 回溯法,装载问题
下一篇: 第5章 回溯法,符号三角形问题
庞老板
博客等级 码龄15年 127粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庞老板

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值