7-2 批处理作业调度 (10 分)(思路+详解)(1)

最后,附一张自己面试前准备的脑图:

image

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

  • Java核心知识整理

image

  • Spring全家桶(实战系列)

image.png

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

image

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

一:题目:宝宝 你要永远开心,下雪了,多穿点,

======================================================================================

在这里插入图片描述

输入格式:

第一行输入作业个数n。

第二行输入各任务在机器一上的完成时间。

第三行输入各任务在机器二上的完成时间。

输出格式:

最短完成时间和

输入样例:

3

2 3 2

1 1 3

结尾无空行

输出样例:

18

二:思路

===================================================================

分析题意:

题目是批量处理作业调度,那么我们可以得知,这是让我们完成一个作业之后再去完成另一个作业

思路:

1.姑且先给我们的作业边上序号 a,b,c三个作业,那么我们可以得知关于这三个作业的

的安排有6种方式,那么我们的问题就简单了,这是一个全排列问题

2.回归本题,我们知道了是全排列问题,我们可以通过回溯法穷举所有的可行解,然后在

根据可行解求出最优值

3.回溯版的全排列,其实这和分治法那个一样,都是递归求全排列,

<1>:递归函数的参数

backtecking(int n,vector &v)

int n:表示我们选择的是n个作业 从1,2,3…这样的序列我们来求取

vector &v:这里表示我们递归的时候记录哪些元素我们已经访问过

<2>:返回的结果

vector ans; 存放每次的可行结

vector path; 记录每次的可行解

<3>:横向for循环 和 纵向的递归深度

for(int i = level; i <= n; i++)

我们单层的for循环是遍历我们所有的(1,2,3…)

纵向的递归:我们选择的是不断缩小的我们遍历的范围

<4>:递归终止条件

path.size() == n时,这时我们的一种可行结果(就是我们的一种安排作业的顺序 比如1,2,3或则2,1,3)

4:对上方的所有可行解求出最优解

5:图解

在这里插入图片描述

三:上码

===================================================================

/**

分析题意:

题目是批量处理作业调度,那么我们可以得知,这是让我们完成一个作业之后再去完成另一个作业

思路:

1.姑且先给我们的作业边上序号 a,b,c三个作业,那么我们可以得知关于这三个作业的

的安排有6种方式,那么我们的问题就简单了,这是一个全排列问题

2.回归本题,我们知道了是全排列问题,我们可以通过回溯法穷举所有的可行解,然后在

根据可行解求出最优值

3.回溯版的全排列,其实这和分治法那个一样,都是递归求全排列,

<1>:递归函数的参数

backtecking(int n,vector &v)

int n:表示我们选择的是n个作业 从1,2,3…这样的序列我们来求取

vector &v:这里表示我们递归的时候记录哪些元素我们已经访问过

<2>:返回的结果

vector<vector > ans; 存放每次的可行结

vector path; 记录每次的可行解

<3>:横向for循环 和 纵向的递归深度

for(int i = level; i <= n; i++)

我们单层的for循环是遍历我们所有的(1,2,3…)

纵向的递归:我们选择的是不断缩小的我们遍历的范围

<4>:递归终止条件

path.size() == n时,这时我们的一种可行结果(就是我们的一种安排作业的顺序 比如1,2,3或则2,1,3)

4:对上方的所有可行解求出最优解

*/

#include<bits/stdc++.h>

using namespace std;

vector<vector > ans;

vector path;

void backtacking(int n,vector &v) {

//递归终止的条件

if(path.size() == n){

ans.push_back(path);

return;

}

for(int i = 1; i <= n; i++) {

if(v[i] == true) continue;

v[i] = true;

path.push_back(i);

backtacking(n,v);//这里的level+1代表的是我们每次的遍历范围在变小

path.pop_back();//当我们得到一种可行解的时候,因为我们要回溯求取其他的解,所以清理最后装进容器的元素

v[i] = false;

}

}

int main(){

int N;

vectorv1(100),v2(100);

最后

文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。**

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值