当前位置: 首页 > article >正文

第6次课 贪心算法 A

向日葵朝着太阳转动,时刻追求自身成长的最大可能。

贪心策略在一轮轮的简单选择中,逐步导向最佳答案。

课堂学习

引入

贪心算法(英语:greedy algorithm),是用计算机来模拟一个「贪心」的人做出决策的过程。这个人十分贪婪,每一步行动总是按某种指标选取最优的操作。而且他目光短浅,总是只看眼前,并不考虑以后可能造成的影响。

可想而知,并不是所有的时候贪心法都能获得最优解,所以一般使用贪心法的时候,都要确保自己能证明其正确性。

解释

适用范围

贪心算法在有最优子结构的问题中尤为有效。最优子结构的意思是问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最优解。1

证明

贪心算法有两种证明方法:反证法和归纳法。一般情况下,一道题只会用到其中的一种方法来证明。

  1. 反证法:如果交换方案中任意两个元素/相邻的两个元素后,答案不会变得更好,那么可以推定目前的解已经是最优解了。
  2. 归纳法:先算得出边界情况(例如 )的最优解 ,然后再证明:对于每个  都可以由  推导出结果。

要点

常见题型

在提高组难度以下的题目中,最常见的贪心有两种。

  • 「我们将 XXX 按照某某顺序排序,然后按某种顺序(例如从小到大)选择。」。
  • 「我们每次都取 XXX 中最大/小的东西,并更新 XXX。」(有时「XXX 中最大/小的东西」可以优化,比如用优先队列维护)

二者的区别在于一种是离线的,先处理后选择;一种是在线的,边处理边选择。

排序解法

用排序法常见的情况是输入一个包含几个(一般一到两个)权值的数组,通过排序然后遍历模拟计算的方法求出最优值。

后悔解法

思路是无论当前的选项是否最优都接受,然后进行比较,如果选择之后不是最优了,则反悔,舍弃掉这个选项;否则,正式接受。如此往复。

区别

与动态规划的区别

贪心算法与动态规划的不同在于它对每个子问题的解决方案都做出选择,不能回退。动态规划则会保存以前的运算结果,并根据以前的结果对当前进行选择,有回退功能。

小结

  • 贪心算法通常用于解决最优化问题,其原理是在每个决策阶段都做出局部最优的决策,以期获得全局最优解。
  • 贪心算法会迭代地做出一个又一个的贪心选择,每轮都将问题转化成一个规模更小的子问题,直到问题被解决。
  • 贪心算法不仅实现简单,还具有很高的解题效率。相比于动态规划,贪心算法的时间复杂度通常更低。
  • 在零钱兑换问题中,对于某些硬币组合,贪心算法可以保证找到最优解;对于另外一些硬币组合则不然,贪心算法可能找到很差的解。
  • 适合用贪心算法求解的问题具有两大性质:贪心选择性质和最优子结构。贪心选择性质代表贪心策略的有效性。
  • 对于某些复杂问题,贪心选择性质的证明并不简单。相对来说,证伪更加容易,例如零钱兑换问题。
  • 求解贪心问题主要分为三步:问题分析、确定贪心策略、正确性证明。其中,确定贪心策略是核心步骤,正确性证明往往是难点。
  • 分数背包问题在 0-1 背包的基础上,允许选择物品的一部分,因此可使用贪心算法求解。贪心策略的正确性可以使用反证法来证明。
  • 最大容量问题可使用穷举法求解,时间复杂度为  O(n²)。通过设计贪心策略,每轮向内移动短板,可将时间复杂度优化至 O(n)。
  • 在最大切分乘积问题中,我们先后推理出两个贪心策略:≥4 的整数都应该继续切分,最优切分因子为 3 。代码中包含幂运算,时间复杂度取决于幂运算实现方法,通常为 0(1)或O(logn)。

课堂训练

2909 贪心的小童 

描述

兔子采集队工作回来,把采集回来的胡萝卜分成 4 堆,小童只能从每堆里拿走 1 根胡萝卜。
小童的目标是拿走总重量最重的 4 根胡萝卜。假如我们知道每根胡萝卜的重量,爱学编程的你来帮帮小童吧。

输入描述

4堆胡萝卜,共4行:每行第一个正整数n,是一堆胡萝卜的数量(≤1000)。后面n个正整数,是每堆胡萝卜中每个胡萝卜的重量(1≤单个胡萝卜重≤100)。

输出描述

请问拿走的4根胡萝卜总重量最大是多少?

样例输入 1 

5 4 3 2 1 6
4 3 2 1 4
6 9 3 2 4 6 3
3 11 2 1

样例输出 1 

30
#include <bits/stdc++.h>
using namespace std;
int a[1001],n,sum=0;
int main(){for(int i=1;i<=4;i++){cin>>n;int t=0; //定义一个变量,存储每堆胡萝卜重量的最大值。for(int j=1;j<=n;j++){cin>>a[j]; //输入胡萝卜的重量//胡萝卜的重量大于t,就更新t的值。求出每一堆的最优结果。if(a[j]>t) t=a[j];}sum+=t; //累加每堆最重胡萝卜的重量,得到最终的最优结果。}cout<<sum<<endl;return 0;
}

2910 士兵突击

描述

森林战争中兔子们决定越过一个无人防守的湖泊偷袭敌人。一共n名士兵,输入每名士兵的体重。只有一艘船,船的载重量一定(需要输入)。只能运输一次,要求能装载最多的士兵,最多能运送多少名士兵?

输入描述

共两行:
第一行输入两个整数,士兵数量和船载重量(小于2000)。
第二行,输入每名士兵的体重(体重<300)。

输出描述

共1行,最多装载多少名士兵。

样例输入 1 

5 11
7 2 6 4 5

样例输出 1 

3
#include <bits/stdc++.h>
using namespace std;
int main() {//定义变量和数组int n,c,w[2001]= {};//输入士兵个数n和船载重量cin>>n>>c;//输入n个士兵兔体重for(int i=0; i<n; i++)cin>>w[i];//按照体重升序排序sort(w,w+n);//tmp计算上船的总体重ans数量int tmp=0,ans=0;for(int i=0; i<n; i++) {//从体重最小士兵开始依次上船tmp+=w[i];//上船士兵兔总重量小于载重量if(tmp<=c)ans++;  //统计士兵数量elsebreak;  //否则终止循环}cout<<ans;return 0;
}

4454 上船问题

描述

有 n 个人,需要过河,第 i 个人的体重为wi,河边有很多船,每艘船的最大载重为m且最多可以上两个人,问最少需要多少艘船。

输入描述

第一行输入两个整数 n 和 m,表示人数和船的载重。
第二行 n 个整数,用空格隔开,表示体重。

输出描述

一个整数,表示需要的最少船只。

样例输入 1 

6 120
15 17 102 70 90 68

样例输出 1 

4

提示

数据范围与提示

1≤n,m≤200,1≤wi​≤100,wi​≤m

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[201];
int main()
{//n为人数,m为一条船的最大承重cin>>n>>m;//输入体重for(int i=1;i<=n;i++) cin>>a[i];//体重从小到大排序sort(a+1,a+n+1);//i表示最轻体重下标位置,j表示最重体重下标位置int i=1,j=n;//记录所用船数int cnt=0;//遍历所有船员while(i<=j){//判断最轻和最重船员是否超过载重if(a[i]+a[j]>m) {j--;//超过载重就选择更轻的船员cnt++;//记录船的数量}else{//切换下一组最轻、最终i++;j--;cnt++;//记录船的数量}}//输出最终解cout<<cnt<<endl;	return 0;
}

2908 节省时间

描述

童程学校的信息奥赛课非常受欢迎。每次午休,学生们都要排队找IT龙老师答疑。有的同学问题简单,答疑时间短。有的同学问题难,答疑时间长。IT龙老师想到了一个办法,让助理老师对每个学生的问题预估一个答疑时长,写成小条给IT龙老师。请你编程帮助IT龙老师,找到一种排队顺序,让同学们的平均答疑完成时间最少(结果保留两位小数)。注意:答疑完成时间=自己的答疑时间+等前面同学的时间。

输入描述

第一行,输入答疑学生数量(学生数量≤1000)。
第二行,助理老师预估的每个学生的答疑时长(时长≤2000 单位分钟)。

输出描述

平均答疑完成时间最少。

样例输入 1 

4
3 1 2 6

样例输出 1 

5.50
#include <bits/stdc++.h>
using namespace std;
int a[1001],n;
int main(){cin>>n;for(int i=0;i<n;i++)cin>>a[i];sort(a,a+n);//按照答疑时间升序排序int s=0;for(int i=0;i<n;i++){//第1个人的答疑时间乘以n,等于自己的答疑时间和后面人的等待时间  s+=(n-i)*a[i];//计算所有人的总时间}printf("%.2f",s*1.0/n);return 0;
} 

4453 购物竞赛

描述

某大型卖场在节日期间举行购物竞赛,参赛者可以推着购物车在卖场中选择提前罗列好的商品,可选商品有 N 种,每种商品的总价为 M 元,被拆分成均等的 K 个包装,现在购物车里可以装的包装数量被固定为 L 个,问怎么选才能使购物车中的价值最大。

输入描述

第一行输入整数 N 和 L,用空格隔开。
第二行到第 N+1 行,每行两个整数 M 和 K,用空格隔开。

输出描述

一个整数,购物车中可以装载的最大价值。

样例输入 1 

5 10
12 6
8 2
20 4
7 7
15 5

样例输出 1 

40

提示

数据范围与提示

1≤N,L≤100,1≤M,K≤100,M%K=0

#include<bits/stdc++.h>
using namespace std;
//创建表示商品属性的结构体
struct cmdt{int price, num, ave;
}box[110];
//排序规则-单价从大到小排序
bool cmp(cmdt x, cmdt y) {return x.ave>y.ave;
}
int main() {int n=0, l=0, sum=0;cin>>n>>l;for (int i=0; i<n; i++) {//输入商品价值及数量cin>>box[i].price>>box[i].num;//计算商品单价box[i].ave=box[i].price/box[i].num;}//按照单价从大到小排序sort(box, box+n, cmp);//遍历商品种类for (int i=0; i<n; i++) {//当前商品价值全部累加if (box[i].num<l) {sum+=box[i].price;l-=box[i].num;//当前商品价值部分累加} else {sum+=box[i].ave*l;break;}}cout<<sum;return 0;
}

课后作业

2381 可可岛的宝藏

描述

可可岛位于距哥斯达黎加海岸300英里的海中,曾是17世纪海盗的休息站,海盗们将掠夺的财宝在此装装卸卸,埋埋藏藏,为这个无名小岛平添了神秘色彩,据说岛上至少埋有6处宝藏。某天童童历经千难万险到了可可岛上,上面有许多珍贵的金属,童童虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为w的物品。岛上金属有 s 个种类, 每种金属重量不同,分别为 n1,n2,…,ns,同时每个种类的金属总的价值也不同,分别为 v1,v2, …, vs。童童想一次带走价值尽可能多的金属,问他最多能带走价值多少的金属。注意到金属是可以被任意分割的,并且金属的价值和其重量成正比。

数据范围与提示:
1≤w≤10000,1≤s≤100,1≤ni≤10000,1≤vi≤10000

输入描述

第1行是测试数据的组数 k,后面跟着 k 组输入。
每组测试数据占3行,第 1 行是一个正整数 w(1≤w≤10000),表示口袋承重上限。
第 2 行是一个正整数 s(1≤s≤100) ,表示金属种类。
第 3 行有 2s 个正整数,分别为n1,v1,n2,v2,…,ns,vs分别为第一种,第二种,…,第 s 种金属的总重量和总价值 (1≤ni≤10000,1≤vi≤10000)。

输出描述

k 行,每行输出对应一个输入。输出应精确到小数点后 2 位。

样例输入 1 

2
50
4
10 100 50 30 7 34 87 100
10000
5
1 43 43 323 35 45 43 54 87 43

样例输出 1 

171.93
508.00

提示

数据范围与提示:
1≤w≤10000,1≤s≤100,1≤ni≤10000,1≤vi≤10000

#include<bits/stdc++.h>
using namespace std;
struct node{//结构体存储重量和价值int wei,v;//用来存储单位价值double p;
}b[210];
int k,w,s;
bool my_cmp(node x,node y){return x.p>y.p;}//按照单位价值降序排序
int main(){cin>>k;//输入k组数据while(k--){cin>>w>>s;double sum=0;//在while循环里面初始化for(int i=1;i<=s;i++){cin>>b[i].wei>>b[i].v;b[i].p=b[i].v*1.0/b[i].wei;//计算单位价值}//排序sort(b+1,b+s+1,my_cmp);for(int i=1;i<=s;i++){if(w-b[i].wei>=0){//能装入w-=b[i].wei;//装入,减去物品重量sum+=b[i].v;//计算装入物品的价值}else{//不能装入sum+=w*b[i].p;//装一部分break;//终止循环}}printf("%.2f\n",sum);//输出一定要加换行}return 0;
} 

1547 童程同学讲礼貌

描述

童程学校的学生非常遵守学校的规章制度。小朋友们课间喝水,都去排队打水,但是条件很有限,只有一台饮水机。为了珍惜有限的课余时间,老师想到了一个办法,让同学们的平均等待时间最少。现在有 n 个小朋友在一个饮水机前排队接水,假如每个人接水的时间为 Ti,请你编程帮老师找出这 n 个小朋友排队的一种顺序,使得 n 个人的平均等待时间最小。(需要考虑自己打水的时间)

输入描述

输入文件共两行,第一行为 n,1≤n≤1000
第二行分别表示第 1 个同学到第 n 个同学每人的接水时间 T1,T2,…,Tn,每个数据之间有 1 个空格,0<Ti≤1000。

输出描述

输出文件有一行,为老师得到的某种排列方案下的最小平均等待时间(输出结果精确到小数点后两位)。

样例输入 1 

10                                    
56 12 1 99 1000 234 33 55 99 812

样例输出 1 

532.00

提示

数据范围与提示:
1≤n≤1000,0<Ti≤1000。

#include<bits/stdc++.h>
using namespace std;
int a[1010],n;
int main(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];//按照打水时间排序sort(a+1,a+n+1);int s=0;for(int i=1;i<=n;i++){//计算等待时间s+=(n-i+1)*a[i];}printf("%.2f",s*1.0/n);return 0;
}

4458 分配礼物

描述

有 n 件礼物,第 i 件礼物的价值为 wi​,需要给这些礼物进行分组,每组礼物数量不能超过 2、价值不能超过 y,要求组数尽量少,每位同学可以领一组礼物领完为止,问有多少同学领到两个礼物。

输入描述

第一行两个整数 n、y,用空格隔开。
第二行 n 个整数,用空格隔开,表示礼物的价值。

输出描述

一个整数,表示获得两个礼物的人数。

样例输入 1 

5 36
12 35 20 2 25

样例输出 1 

2

提示

数据范围与提示

1≤n,y≤100,1≤wi​≤100,wi≤y

#include<bits/stdc++.h>
using namespace std;
int main(){int a[105]={};int n,y;cin>>n>>y;for(int i=1;i<=n;i++)	cin>>a[i];sort(a+1,a+n+1);  //按礼物价值升序int i=1,j=n; //i表示价值最小礼物 j表示价值最大礼物int two=0; //表示两个礼物一组的组数while(i<j){if(a[i]+a[j]>y) //价值和超过y,价值高的自己1组 j--;else{ //没有超过y,两个礼物放1组i++;j--;two++;}}cout<<two;return 0;
}

1743 童童看节目

描述

寒假到了,童童终于可以开心的看电视节目了。寒假播放的少儿节目太多了,童童想尽量多的看到这些节目,但是童童有个习惯,他只看完整的节目。
现在他把他喜欢的电视节目的转播时间表给你,你能帮他合理安排吗?

数据范围与提示:
n≤100

输入描述

输入包含多组测试数据。每组输入的第一行是一个整数 n(n≤100),表示童童给你的节目表上节目的总数。
接下来 n 行,每行输入两个整数 si 和 ei(1≤i≤n,表示第 i 个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。
当 n=0 时,输入结束。

输出描述

对于每组输入,输出能完整看到最多多少个节目。

样例输入 1 

12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
5
1 5
2 6
5 8
7 13
9 12
0

样例输出 1 

5
3
#include<bits/stdc++.h>
using namespace std;
struct Node{int s;int e;
};
Node a[105];
bool cmp(Node x,Node y){if(x.e!=y.e)	return x.e<y.e;else	return x.s<y.s;
}
int main(){int n;cin>>n;while(n!=0){ //n不等于0就继续for(int i=1;i<=n;i++)cin>>a[i].s>>a[i].e;sort(a+1,a+n+1,cmp); //结束时间早的在前int s=1;//统计节目数量,默认第1可以看Node t=a[1];//t记录已统计的最后1个节目for(int i=2;i<=n;i++){//当前节目开始时间不小于t的结束时间if(a[i].s>=t.e){s++;t=a[i];}}cout<<s<<endl;cin>>n; //输入下1组n,如果n=0则退出while}return 0;
}

相关文章:

第6次课 贪心算法 A

向日葵朝着太阳转动&#xff0c;时刻追求自身成长的最大可能。 贪心策略在一轮轮的简单选择中&#xff0c;逐步导向最佳答案。 课堂学习 引入 贪心算法&#xff08;英语&#xff1a;greedy algorithm&#xff09;&#xff0c;是用计算机来模拟一个「贪心」的人做出决策的过程…...

C# 高级编程:Lambda 表达式

在 C# 的高级编程中,Lambda 表达式是一个强大而灵活的工具,广泛应用于 LINQ 查询、委托、事件处理以及函数式编程等多个领域。它不仅使代码更简洁、表达更直接,而且在某些场景中能极大提高代码的可读性与可维护性。本文将从 Lambda 表达式的基本语法入手,深入探讨其原理、常…...

Hexo+Github+gitee图床零成本搭建自己的专属博客

一个详细、完善的 Hexo 博客部署教程&#xff0c;不仅涵盖了基本的安装、配置、生成与部署步骤&#xff0c;还增加了常见问题的解决、主题设置、图片上传等 在开始之前可以看看我最终搭建出来的成果&#xff1a;https://liangjh.blog 1.安装git和nodejs 在Windows上使用Git&a…...

数字信号处理技术架构与功能演进

数字信号处理&#xff08;DSP&#xff09;是通过数字运算实现信号分析、变换、滤波及调制解调的技术领域&#xff0c;其发展过程与技术应用如下&#xff1a; 一、定义与核心功能 技术定义&#xff1a;通过算法将模拟信号转换为数字形式进行处理&#xff0c;具有高精度、可编程…...

深入理解 Android Handler

一、引言 Handler 在安卓中的地位是不言而喻的&#xff0c;几乎维系着整个安卓程序运行的生命周期&#xff0c;但是这么重要的一个东西&#xff0c;我们真的了解它吗&#xff1f;下面跟随着我的脚步&#xff0c;慢慢揭开Hanler的神秘面纱吧&#xff01; 本文将介绍Handler 的运…...

C++ 什么是隐式类型转换,什么是显式类型转换

在 C 中&#xff0c;​​类型转换​​是将一种数据类型的值转换为另一种数据类型的过程&#xff0c;分为 ​​隐式类型转换​​&#xff08;由编译器自动完成&#xff09;和 ​​显式类型转换​​&#xff08;由程序员手动指定&#xff09;。以下是它们的区别和示例&#xff1a…...

NVIDIA 自动驾驶技术见解

前言 参与 NVIDIA自动驾驶开发者实验室 活动&#xff0c;以及解读了 NVIDIA 安全报告 自动驾驶 白皮书&#xff0c;本文是我的一些思考和见解。自动驾驶技术的目标是为了改善道理安全、减少交通堵塞&#xff0c;重塑更安全、高效、包容的交通生态。在这一领域&#xff0c;NVI…...

【Flask】Explore-Flask:早期 Flask 生态的实用指南

开源项目&#xff1a;explore-flask/README.rst at master rpicard/explore-flask (github.com) 一、Coding conventions Summary Try to follow the coding style conventions laid out in PEP 8. Try to document your app with docstrings as defined in PEP 257. def…...

STM32 中断系统深度剖析

在嵌入式系统开发领域&#xff0c;STM32 系列微控制器凭借其强大的性能和丰富的资源被广泛应用。中断系统作为 STM32 的关键特性之一&#xff0c;能够极大地提升系统的实时响应能力和多任务处理效率。本文将基于 STM32F4 系列芯片&#xff0c;深入剖析中断与外设中断的原理、配…...

FAST‘25论文解读:HaSiS单索引存储架构实现HTAP数据处理新范式

想象一下这样的场景&#xff1a;每一笔线上交易都能实时更新库存分析&#xff0c;金融应用能在交易发生那一刻完成欺诈检测——既不延迟也不损失性能。这正是HTAP&#xff08;Hybrid Transactional and Analytical Processing&#xff0c;混合事务与分析处理&#xff09;带来的…...

FastAPI:现代高性能Python Web框架的技术解析与实践指南

一、FastAPI的诞生背景与技术定位 在数字化转型的浪潮中,API(应用程序接口)作为连接服务与数据的核心枢纽,其性能与开发效率直接影响业务迭代速度。传统Python框架如Django和Flask虽功能丰富,但在高并发场景下面临性能瓶颈,且缺乏对异步编程的原生支持。FastAPI应运而生…...

缓存 --- 缓存击穿, 缓存雪崩, 缓存穿透

缓存 --- 缓存击穿, 缓存雪崩, 缓存穿透 缓存击穿&#xff08;Cache Breakdown&#xff09;概念原理实际场景代码实现&#xff08;互斥锁方案&#xff09; 缓存雪崩&#xff08;Cache Avalanche&#xff09;概念原理实际场景代码实现&#xff08;随机过期时间&#xff09; 缓存…...

Android 中实现图片翻转动画(卡片翻转效果)

1、简述 通过 ObjectAnimator 和 AnimatorSet 可以实现图片的翻转动画,并在翻转过程中切换图片,同时避免图片被镜像。 ObjectAnimator 是 Android 动画框架中的一个类,用于对对象的属性进行动画效果处理。它通过改变对象的属性值来实现动画效果,非常适合实现复杂的动画,如…...

【论文阅读21】-PSOSVM-CNN-GRU-Attention-滑坡预测(2024-12)

这篇论文主要提出并验证了一种新型的混合智能模型&#xff08;PSOSVM-CNN-GRU-Attention&#xff09;&#xff0c;用于准确预测滑坡的点位移&#xff0c;并构建可靠的位移预测区间。通过对Baishuihe滑坡和Shuping滑坡的案例分析&#xff0c;展示了该模型的出色性能。 [1] Zai D…...

蓝牙 6.0 发布,解锁无线科技新可能

在5G和Wi-Fi 7高速发展的时代&#xff0c;蓝牙技术始终以独特优势深度融入日常生活。从无线耳机到智能家居&#xff0c;它凭借低功耗、高兼容的特性&#xff0c;悄然连接各类智能设备&#xff0c;打造无缝的数字生活体验。无论是聆听音乐、智能门禁还是健康监测&#xff0c;蓝牙…...

EasyCVR视频智能分析平台助力智慧园区:全场景视频监控摄像头融合解决方案

一、方案背景 在智慧园区建设的浪潮下&#xff0c;设备融合、数据整合与智能联动已成为核心诉求。视频监控作为智慧园区的“视觉中枢”&#xff0c;其高效整合直接影响园区的管理效能与安全水平。然而&#xff0c;园区内繁杂的视频监控设备生态——不同品牌、型号、制式的摄像…...

PHP发送邮件

一、安装PHPMailer 进入项目目录下&#xff0c;执行&#xff1a;composer require phpmailer/phpmailer 二、使用 <?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception;require vendor/autoload.php;$mail new PHPMailer(true); header("…...

为您的照片提供本地 AI 视觉:使用 Llama Vision 和 ChromaDB 构建 AI 图像标记器

有没有花 20 分钟浏览您的文件夹以找到心中的特定图像或屏幕截图&#xff1f;您并不孤单。 作为工作中的产品经理&#xff0c;我总是淹没在竞争对手产品的屏幕截图、UI 灵感以及白板会议或草图的照片的海洋中。在我的个人生活中&#xff0c;我总是捕捉我在生活中遇到的事物&am…...

Spark on K8s 在 vivo 大数据平台的混部实战与优化

一、Spark on K8s 简介 (一)定义与架构 Spark on K8s 是一种将 Spark 运行在 Kubernetes(K8s)集群上的架构,由 K8s 直接创建 Driver 和 Executor 的 Pod 来运行 Spark 作业。其架构如下。 Driver Pod:相当于 Spark 集群中的 Driver,负责作业的调度和管理,它会根据作业…...

K8S节点出现Evicted状态“被驱逐”

在Kubernetes集群中&#xff0c;Pod状态为“被驱逐&#xff08;evicted&#xff09;”表示Pod无法在当前节点上继续运行&#xff0c;已被集群从节点上移除。 问题分析&#xff1a; 节点磁盘空间不足 &#xff0c;使用df -h查看磁盘使用情况 可以看到根目录 / 已100%满&#x…...

重学React(一):描述UI

背景&#xff1a;React现在已经更新到19了&#xff0c;文档地址也做了全面的更新&#xff0c;上一次系统性的学习还是在16-17的大版本更新。所以&#xff0c;现在就开始重新学习吧&#xff5e; 学习内容&#xff1a; React官网教程&#xff1a;https://zh-hans.react.dev/lea…...

CSS核心笔记002

margin塌陷问题 第一个子元素的上margin会作用在父元素上, 最后一个子元素的下margin会作用在父元素上解决 1. 给父元素设置 不为0的pandding 2. 给父元素设置宽度不为0 的border 3. 给父元素设置样式 overflow:hiddenmargin合并问题 兄弟元素的下外margin和会下面兄弟的上…...

遨游通讯发布国产化旗舰三防手机AORO AU1:以自主可控重塑工业安全

在全球产业链加速重构的背景下&#xff0c;国产化技术突破已成为工业领域高质量发展的核心驱动力。作为专精特新中小企业&#xff0c;遨游通讯始终以“让世界更安全、更高效、更简单”为使命&#xff0c;深耕“危、急、特”场景智能通信设备的研发。近日&#xff0c;遨游通讯正…...

【Python】Selenium切换网页的标签页的写法(全!!!)

在使用selenium做网站爬取测试的时候&#xff0c;我们经常会遇到一些需要点击的元素&#xff0c;才能点击到我们想要进入的页面&#xff0c; 于是我们就要模拟 不断地 点点点击 鼠标的样子。 这个时候网页上就会有很多的标签页&#xff0c;你的浏览器网页标签栏 be like: 那…...

洛谷P1177【模板】排序:十种排序算法全解(1)

扯谈 之前我已经把十大排序算法全讲了一遍&#xff08;具体详见专栏C排序算法&#xff09;,今天我们来用一道简单的题目总结实战一下。 算法实现 一、桶排序&#xff08;Bucket Sort&#xff09; ‌适用场景‌&#xff1a;数据范围已知且较小&#xff08;需根据测试数据调整…...

pytorch 51 GroundingDINO模型导出tensorrt并使用c++进行部署,53ms一张图

本专栏博客第49篇文章分享了将 GroundingDINO模型导出onnx并使用c++进行部署,并尝试将onnx模型转换为trt模型,fp16进行推理,可以发现推理速度提升了一倍。为此对GroundingDINO的trt推理进行调研,发现 在GroundingDINO-TensorRT-and-ONNX-Inference项目中分享了模型导出onnx…...

中间件--ClickHouse-11--部署示例(Linux宿主机部署,Docker容器部署)

一、Linux宿主机部署 1、环境准备 操作系统&#xff1a;推荐使用 CentOS 7/8 或 Ubuntu 18.04/20.04。硬件要求&#xff1a; 至少 2 核 CPU 和 4GB 内存。足够的磁盘空间&#xff08;根据数据量评估&#xff09;。CPU需支持SSE4.2指令集&#xff08;可通过以下命令检查&#…...

DeepSeek和Excel结合生成动态图表

文章目录 一、前言二、3D柱状图案例2.1、pyecharts可视化官网2.2、Bar3d-Bar3d_puch_card2.3、Deepseek2.4、WPS2.5、动态调整数据 一、前言 最近在找一些比较炫酷的动态图表&#xff0c;用于日常汇报&#xff0c;于是找到了 DeepseekExcel王牌组合&#xff0c;其等同于动态图…...

[Python入门学习记录(小甲鱼)]第6章 函数

函数就是把代码整理打包的东西 6.1 Python的函数基操 函数的基本操作 6.1.1 创建和调用函数 def myfunc():print(1)print(2)print(3) myfunc() # 输出 1 2 3 带换行 调用时会自动找函数定义6.1.2 函数的参数 def add(num1, num2):print(num1 num2) add(1, 2) # 输出 3…...

Ubuntu20.04 部署llama-factory问题集

llama3 微调教程之 llama factory 的 安装部署与模型微调过程&#xff0c;模型量化和gguf转换。_llamafactory 部署-CSDN博客 1.跟着教程 llama-factory下载不下来 来&#xff0c;试着换源&#xff0c;多试几次&#xff0c;就可以成功了。。。 2.跟着教程&#xff0c;发现无法…...