priority_queue优先队列

   

目录

1. 最短路径算法(Dijkstra算法)

应用场景:

优先队列的作用:

2. 最小生成树算法(Prim算法)

应用场景:

优先队列的作用:

3. 哈夫曼编码(Huffman Coding)

应用场景:

优先队列的作用:

4. 合并K个有序链表(Merge K Sorted Lists)

应用场景:

优先队列的作用:

5.贪心算法中的应用

应用场景:

优先队列的作用:

6. 动态中位数维护

应用场景:

优先队列的作用:

7.石子合并问题(Stone Merging Problem)

1. 应用场景


  最近发现优先队列真的超级好用,让我来总结一下(激动到起飞.......)。

One    What is priority_queue? (什么是优先队列)

   一堆可以进行比较的数据元素,被赋予一定的优先级,谁的优先级高,先处理谁,要是优先级一样高,通常按照它们进入队列的顺序进行处理(具体取决于代码怎么实现的)。

Two   The base operation.(基础操作)

以名称为pq的优先队列简单介绍一下。

1.在c++中priority_queue模板类定义在<queue>头文件中。

2. pq.push(元素); 将一个元素推进pq队列中。

3.pq.top(); 优先队列顶部元素(优先级最高的元素)。

4.pq.pop;将优先队列最顶部的元素删除,要先取出来(pq.top()),再删除。这两步操作要同步进行。

5.pq.size();告诉你这个优先队列有多大 。

6.pq.empty();告诉你这个优先队列是不是空的,true表示是空的,false表示不空的。

Three  Definition methods(定义方式) 

1.普通版: priority_queue<long long> pq;

2.升序版:priority_queue<元素数据类型,盛装元素的容器或数组,greatr<元素数据类型>>

举个栗子:priority<int,vector<int>,greater<int>> pq;

3.降序版:priority_queue<int,vector<int>,less<int>> pq;(priority_queue默认降序)

4.存储自定义结构体或类时,还要搞一个比较器来定义元素的优先级。

存储自定义的方式的5种主要形式:

<1>结构体:

  • 默认访问级别公有(public
  • 这意味着,除非明确指定,结构体中的成员变量和成员函数都是公有的,外部代码可以直接访问它们。
#include <iostream>
using namespace std;// 使用 struct 定义
struct PointStruct {int x;int y;
};int main(){PointStruct ps;ps.x = 10; // 可以直接访问和修改ps.y = 20;cout << "PointStruct: (" << ps.x << ", " << ps.y << ")\n";return 0;
}
PointStruct: (10, 20)

<2>类:

  • 默认访问级别私有(private
  • 这意味着,除非明确指定,类中的成员变量和成员函数都是私有的,外部代码无法直接访问它们。
#include <iostream>
#include <string>
using namespace std;// 使用 class 定义
class PointClass {
private:int x; // 私有成员变量int y; // 私有成员变量public:// 构造函数PointClass(int a = 0, int b = 0) : x(a), y(b) {}// 公有成员函数:设置 x 的值void setX(int a) {x = a;}// 公有成员函数:设置 y 的值void setY(int b) {y = b;}// 公有成员函数:获取 x 的值int getX() const {return x;}// 公有成员函数:获取 y 的值int getY() const {return y;}// 公有成员函数:打印坐标void print() const {cout << "PointClass: (" << x << ", " << y << ")\n";}
};int main(){// 使用 structPointStruct ps;ps.x = 10; // 可以直接访问和修改ps.y = 20;cout << "PointStruct: (" << ps.x << ", " << ps.y << ")\n";// 使用 classPointClass pc; // 使用默认构造函数// pc.x = 30; // 错误:'x' 是私有的,无法直接访问// pc.y = 40; // 错误:'y' 是私有的,无法直接访问// 通过公有成员函数设置值pc.setX(30);pc.setY(40);pc.print();// 通过公有成员函数获取值cout << "PointClass x: " << pc.getX() << ", y: " << pc.getY() << "\n";return 0;
}
​
PointStruct: (10, 20)
PointClass: (30, 40)
PointClass x: 30, y: 40​

<3>类+结构体: 

#include <iostream>
using namespace std;// 使用struct定义
struct PointStruct {int x;int y;
};// 使用class定义
class PointClass {
public:int x;int y;
};int main(){PointStruct ps;ps.x = 10; // 可以直接访问ps.y = 20;cout << "PointStruct: (" << ps.x << ", " << ps.y << ")\n";PointClass pc;pc.x = 30; // 需要public访问权限pc.y = 40;cout << "PointClass: (" << pc.x << ", " << pc.y << ")\n";return 0;
}
PointStruct: (10, 20)
PointClass: (30, 40)

<4>使用指针或引用

有时,为了节省内存或管理大型数据结构,可以在优先队列中存储指针(如Node*)或引用。

#include<bits/stdc++.h>
using namespace std;// 定义任务结构体
struct Task {int priority;string name;Task(int p, string n) : priority(p), name(n) {}
};// 定义比较器
struct CompareTaskPtr {bool operator()(const Task* a, const Task* b) const {return a->priority < b->priority; // 优先级高的先出}
};int main(){// 定义优先队列,存储Task*,最大堆priority_queue<Task*, vector<Task*>, CompareTaskPtr> pq;// 动态分配任务并插入优先队列pq.push(new Task(3, "Task A"));pq.push(new Task(1, "Task B"));pq.push(new Task(4, "Task C"));pq.push(new Task(2, "Task D"));// 依次取出任务并释放内存while(!pq.empty()){Task* t = pq.top();cout << "Priority: " << t->priority << ", Name: " << t->name << endl;pq.pop();delete t; // 释放动态分配的内存}return 0;
}
Priority: 4, Name: Task C
Priority: 3, Name: Task A
Priority: 2, Name: Task D
Priority: 1, Name: Task B

 <5>使用枚举类型(Enums)

当需要基于预定义的优先级级别进行排序时,可以使用枚举类型。除了上述常见的structclasspairtuple,优先队列还可以存储其他类型的数据,具体取决于问题的需求。优先级任务:高,中,低。

#include<bits/stdc++.h>
using namespace std;// 定义优先级枚举
enum Priority { LOW = 1, MEDIUM = 2, HIGH = 3 };// 定义任务结构体
struct Task {Priority priority;string name;Task(Priority p, string n) : priority(p), name(n) {}
};// 定义比较器
struct CompareTask {bool operator()(const Task& a, const Task& b) const {return a.priority < b.priority; // 高优先级先出}
};int main(){// 定义优先队列,使用自定义比较器priority_queue<Task, vector<Task>, CompareTask> pq;// 插入任务pq.emplace(HIGH, "Task A");pq.emplace(LOW, "Task B");pq.emplace(MEDIUM, "Task C");pq.emplace(HIGH, "Task D");// 依次取出任务while(!pq.empty()){Task t = pq.top();cout << "Priority: " << t.priority << ", Name: " << t.name << endl;pq.pop();}return 0;
}
Priority: 3, Name: Task A
Priority: 3, Name: Task D
Priority: 2, Name: Task C
Priority: 1, Name: Task B

比较器的三种种主要形式:

 <1> 重载全局的 operator这种方法会影响所有Node类型的比较,不仅限于优先队列。 
#include<bits/stdc++.h>
using namespace std;struct Node {int x, y;Node(int a = 0, int b = 0) : x(a), y(b) {}
};// 重载全局的 operator<
bool operator<(const Node& a, const Node& b){if(a.x == b.x)return a.y > b.y; // y 小的优先return a.x > b.x;     // x 小的优先
}int main(){// 定义一个存储 Node 的优先队列(最大堆)priority_queue<Node> pq;// 插入元素pq.push(Node(5, 3));pq.push(Node(2, 8));pq.push(Node(5, 1));pq.push(Node(3, 7));pq.push(Node(2, 4));pq.push(Node(5, 6));pq.push(Node(1, 9));pq.push(Node(3, 2));pq.push(Node(1, 5));pq.push(Node(4, 0));// 依次取出元素while(!pq.empty()){Node top = pq.top();cout << top.x << " " << top.y << endl;pq.pop();}return 0;
}
1 5
1 9
2 4
2 8
3 2
3 7
4 0
5 1
5 3
5 6

<2>  定义自定义比较器结构体,这种方法更具封装性,不会影响全局的Node比较,仅作用于特定的优先队列。
#include <iostream>
#include <queue>
#include <vector>
using namespace std;struct Node {int x, y;Node(int a = 0, int b = 0) : x(a), y(b) {}
};// 定义自定义比较器
struct cmp {bool operator()(const Node& a, const Node& b) const {
//按引用传递:为了提高效率,比较器的参数最好按const引用传递,并将operator()声明为const成员函数。if(a.x == b.x)return a.y > b.y; // y 小的优先return a.x > b.x;     // x 小的优先}
};int main(){// 定义一个存储 Node 的优先队列(最小堆)priority_queue<Node, vector<Node>, cmp> pq;// 插入元素pq.push(Node(5, 3));pq.push(Node(2, 8));pq.push(Node(5, 1));pq.push(Node(3, 7));pq.push(Node(2, 4));pq.push(Node(5, 6));pq.push(Node(1, 9));pq.push(Node(3, 2));pq.push(Node(1, 5));pq.push(Node(4, 0));// 依次取出元素while(!pq.empty()){Node top = pq.top();cout << top.x << " " << top.y << endl;pq.pop();}return 0;
}

<3>Lambda 表达式 (c++及以上版本)

#include<bits/stdc++.h>
using namespace std;struct Node {int x, y;Node(int a = 0, int b = 0) : x(a), y(b) {}
};int main(){// 定义一个存储 Node 的优先队列(最小堆),使用 Lambda 比较器auto cmp = [](const Node& a, const Node& b) -> bool {if(a.x == b.x)return a.y > b.y; // y 小的优先return a.x > b.x;     // x 小的优先};priority_queue<Node, vector<Node>, decltype(cmp)> pq(cmp);// 插入元素pq.push(Node(5, 3));pq.push(Node(2, 8));pq.push(Node(5, 1));pq.push(Node(3, 7));pq.push(Node(2, 4));pq.push(Node(5, 6));pq.push(Node(1, 9));pq.push(Node(3, 2));pq.push(Node(1, 5));pq.push(Node(4, 0));// 依次取出元素while(!pq.empty()){Node top = pq.top();cout << top.x << " " << top.y << endl;pq.pop();}return 0;
}
Priority: 1, Name: Task B
Priority: 2, Name: Task D
Priority: 3, Name: Task A
Priority: 4, Name: Task C

 

 Four  Application scenario(应用场景)

1. 最短路径算法(Dijkstra算法)

应用场景:

  • 问题类型:图论中的单源最短路径问题。
  • 示例问题:给定一个带权有向图,计算从起点到所有其他节点的最短路径。

优先队列的作用:

  • 在Dijkstra算法中,优先队列用于选择当前未处理节点中距离起点最近的节点,以确保每次扩展的都是最优路径。

上题目:

 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll find_min_idx(const ll n,vector<ll> &vis,vector<ll> &dis){ll MINidx=-1,MIN=LLONG_MAX;for(ll i=0;i<n;i++){if(dis[i]<MIN&&!vis[i]){MIN=dis[i];MINidx=i;}}return MINidx;
}
void Dijkstra(ll idx,const ll n,vector<ll> &vis,vector<ll> &dis,vector<vector<ll>> &mp){dis[idx]=0;for(ll i=0;i<n;i++){ll u=find_min_idx(n,vis,dis);if(u==-1)break;vis[u]=1;for(ll j=0;j<n;j++){if(!vis[j]&&mp[u][j]>0&&mp[u][j]+dis[u]<dis[j]){dis[j]=mp[u][j]+dis[u];}}}
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);string s;cin>>s;ll n=s.length();vector<vector<ll>> mp(n,vector<ll>(n,0));for(ll i=0;i<n;i++){for(ll j=0;j<n;j++){cin>>mp[i][j];}}char start;cin>>start;ll idx=s.find(start);vector<ll> vis(n,0);vector<ll> dis(n,LLONG_MAX);dis[idx]=0;Dijkstra(idx,n,vis,dis,mp);for(ll i=0;i<n;i++){if(i==idx)continue;cout<<s[i]<<": "<<(dis[i]==LLONG_MAX?0:dis[i])<<endl;}return 0;
}

2. 最小生成树算法(Prim算法)

应用场景:

  • 问题类型:图论中的最小生成树问题。
  • 示例问题:给定一个无向带权图,找到包含所有节点且边权和最小的树。

优先队列的作用:

  • 在Prim算法中,优先队列用于选择当前可以连接到生成树的最小权重边。

#include<bits/stdc++.h>
using namespace std;
using u64 = unsigned long long;
#define int long long
const int N=1e6+10;
vector<pair<int,int>> e[N],g[N];
int n,m;
int vis[N],dis[N],fa[N];
int ans=0,tot=2;
void bfs(){priority_queue<pair<int,int>> q;q.push({0,1});while(q.size()){auto [d,u] = q.top();q.pop();if(vis[u]) continue;vis[u]=1;ans+=-d;for(auto [v,di]:e[u]){q.push({d-di,v});}}
}
void bfs2(){priority_queue<pair<int,int>> q;q.push({0,1});while(q.size()){auto [d,u] = q.top();q.pop();if(vis[u]==tot) continue;vis[u]=tot;ans+=-d;for(auto [v,di]:g[u]){q.push({d-di,v});}}
}
void solve(){cin>>n>>m;for(int i=1;i<=m;i++){int u,v,d;cin>>u>>v>>d;e[u].push_back({v,d});g[v].push_back({u,d});}bfs();bfs2();cout<<ans<<'\n';
}
signed main(){ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int T=1;// cin>>T;while(T--){solve();}return 0;
}

 

3. 哈夫曼编码(Huffman Coding)

应用场景:

  • 问题类型:数据压缩和编码问题。
  • 示例问题:根据字符出现频率构建哈夫曼树,并生成最优前缀编码。

优先队列的作用:

  • 哈夫曼编码算法使用优先队列来选择频率最小的两个节点,逐步合并生成哈夫曼树。

 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Node {ll l, r, p, w, id;string res;       
};
struct Compare {bool operator()(const Node &a, const Node &b) const {return a.w != b.w ? a.w > b.w : a.id > b.id;}
};
void dfs(vector<Node> &nodes, ll id, string code) {if (nodes[id].l == -1 && nodes[id].r == -1) {nodes[id].res = code; // 直接赋值哈夫曼编码return;}if (nodes[id].l != -1) dfs(nodes, nodes[id].l, code + "0");if (nodes[id].r != -1) dfs(nodes, nodes[id].r, code + "1");
}
int main() {ll n;cin >> n;string s;cin >> s;priority_queue<Node, vector<Node>, Compare> pq;vector<Node> nodes;for (ll i = 0; i < n; i++) {ll w;cin >> w;nodes.push_back({-1, -1, -1, w, i, ""}); // 初始化叶子节点pq.push(nodes.back());}ll nextId = n; // 新生成节点的编号从 n 开始while (pq.size() > 1) {Node x = pq.top();pq.pop();Node y = pq.top();pq.pop();Node z = {-1, -1, -1, x.w + y.w, nextId++, ""};z.l = x.id;z.r = y.id;nodes[x.id].p = z.id;nodes[y.id].p = z.id;nodes.push_back(z);pq.push(z);}ll rootId = pq.top().id;dfs(nodes, rootId, "");for (ll i = 0; i < n; i++) cout << nodes[i].res << '\n';return 0;
}

4. 合并K个有序链表(Merge K Sorted Lists)

应用场景:

  • 问题类型:链表操作和归并排序。
  • 示例问题:给定K个有序链表,将它们合并为一个有序链表。

优先队列的作用:

  • 使用优先队列维护当前K个链表的最小元素,逐步合并。

 

 

 

#include <bits/stdc++.h>
using namespace std;
inline uint64_t read() {uint64_t x = 0;char ch = getchar();while (!isdigit(ch))ch = getchar();while (isdigit(ch))x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar();return x;
}
uint64_t a[10000001], b[10000001];
signed main() {for (int T = read(), n, m; (T--) && (n = read(), m = read()); ) {for (int i = 1; i <= n; i++)a[i] = read();for (int i = 1; i <= m; i++)b[i] = read();int j = 1, cnt = 0, ans = 0;for (int i = 1; i <= n; i++) {cnt = 0;while (j <= m && a[i] >= b[j]) {cnt += (a[i] == b[j]);j++;}ans ^= cnt;}printf("%d\n", ans);}return 0;
}

 

5.贪心算法中的应用

应用场景:

  • 问题类型:贪心选择性质的问题,如活动安排、区间调度等。
  • 示例问题:选择尽可能多的不重叠活动。

优先队列的作用:

  • 通过优先队列快速选择最优的下一步操作,如选择最早结束的活动。

 

#include <bits/stdc++.h>
#define int long long
using namespace std;
int t,h,n;
struct node{int a,c,now;bool operator < (const node &b) const{return this->now > b.now;}//冷却完成的时间点越早越优先
}b[200005];void solve(){cin >> h >> n;int turn = 1;for(int i=1;i<=n;i++) cin >> b[i].a;for(int i=1;i<=n;i++) cin >> b[i].c;queue<node> que;priority_queue<node> pq;for(int i=1;i<=n;i++) que.push({b[i].a,b[i].c,1});while(h > 0){if(!pq.empty()){turn = pq.top().now;while(!pq.empty() && pq.top().now == turn){que.push({pq.top().a,pq.top().c,pq.top().now});pq.pop();}}while(!que.empty()){h -= que.front().a;pq.push({que.front().a,que.front().c,que.front().c+que.front().now});que.pop();}}cout << turn << '\n';
}signed main()
{ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);cin >> t;while(t--){solve();}return 0;
}

 

6. 动态中位数维护

应用场景:

  • 问题类型:动态数据流问题,需要实时获取中位数。
  • 示例问题:设计一个数据结构,支持动态插入元素并实时获取中位数。

优先队列的作用:

  • 使用两个优先队列(最大堆和最小堆)分别维护较小一半和较大一半的元素,以快速计算中位数。

(写的题目没有涉及过,以后遇到会补充) 

 

7.石子合并问题(Stone Merging Problem)

1. 应用场景

石子合并问题在多种实际应用中具有重要意义,特别是在需要优化合并过程以最小化成本或时间的场景中。通常被归类为**贪心算法(Greedy Algorithms)**问题,因为它涉及在每一步选择最优的局部决策,以期达到全局最优的结果。具体类型包括:

  • 最小合并成本:给定一组石子,每次可以合并两个石子,合并成本为这两个石子的重量之和,目标是通过一系列合并操作,使得所有石子最终合并成一个石子,并使得总合并成本最小。

 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;int main() {ios::sync_with_stdio(false);cin.tie(0);int n;cin >> n;priority_queue<int, vector<int>, greater<int>> pq; for (int i = 0; i < n; i++) {int x;cin >> x;pq.push(x);  }ll total_cost = 0; while (pq.size() > 1) {int x = pq.top();pq.pop();int y = pq.top();pq.pop();int merge_cost = x + y;total_cost += merge_cost;pq.push(merge_cost);}cout << total_cost << endl; return 0;
}

暂时先到这里吧,Good Bye! 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/505845.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vs2022编译webrtc步骤

1、主要步骤说明 概述&#xff1a;基础环境必须有&#xff0c;比如git&#xff0c;Powershell这些&#xff0c;就不写到下面了。 1.1 安装vs2022 1、选择使用C的桌面开发 2、 Windows 10 SDK安装10.0.20348.0 3、勾选MFC及ATL这两项 4、 安装完VS2022后&#xff0c;必须安…

如何评价deepseek-V3 VS OpenAI o1 自然语言处理成Sql的能力

DeepSeek-V3 介绍 在目前大模型主流榜单中&#xff0c;DeepSeek-V3 在开源模型中位列榜首&#xff0c;与世界上最先进的闭源模型不分伯仲。 准备工作&#xff1a; 笔者只演示实例o1 VS DeepSeek-V3两个模型&#xff0c;大家可以自行验证结果或者实验更多场景&#xff0c;同时…

9.4 visualStudio 2022 配置 cuda 和 torch (c++)

一、配置torch 1.Libtorch下载 该内容看了【Libtorch 一】libtorchwin10环境配置_vsixtorch-CSDN博客的博客&#xff0c;作为笔记用。我自己搭建后可以正常运行。 下载地址为windows系统下各种LibTorch下载地址_libtorch 百度云-CSDN博客 下载解压后的目录为&#xff1a; 2.vs…

Mysql--基础篇--多表查询(JOIN,笛卡尔积)

在MySQL中&#xff0c;多表查询&#xff08;也称为联表查询或JOIN操作&#xff09;是数据库操作中非常常见的需求。通过多表查询&#xff0c;你可以从多个表中获取相关数据&#xff0c;并根据一定的条件将它们组合在一起。MySQL支持多种类型的JOIN操作&#xff0c;每种JOIN都有…

gesp(C++四级)(11)洛谷:B4005:[GESP202406 四级] 黑白方块

gesp(C四级)&#xff08;11&#xff09;洛谷&#xff1a;B4005&#xff1a;[GESP202406 四级] 黑白方块 题目描述 小杨有一个 n n n 行 m m m 列的网格图&#xff0c;其中每个格子要么是白色&#xff0c;要么是黑色。对于网格图中的一个子矩形&#xff0c;小杨认为它是平衡的…

易于上手难于精通---关于游戏性的一点思考

1、小鸟、狙击、一闪&#xff0c;都是通过精准时机来逼迫玩家练习&#xff0c; 而弹道、出招时机等玩意&#xff0c;不是那么容易掌握的&#xff0c;需要反复的观察、反应与行动&#xff0c; 这也正是游戏性的体现&#xff0c; 玩家能感觉到一些朦胧的东西&#xff0c;但又不…

微信小程序——创建滑动颜色条

在微信小程序中&#xff0c;你可以使用 slider 组件来创建一个颜色滑动条。以下是一个简单的示例&#xff0c;展示了如何实现一个颜色滑动条&#xff0c;该滑动条会根据滑动位置改变背景颜色。 步骤一&#xff1a;创建小程序项目 首先&#xff0c;使用微信开发者工具创建一个新…

JVM实战—12.OOM的定位和解决

大纲 1.如何对系统的OOM异常进行监控和报警 2.如何在JVM内存溢出时自动dump内存快照 3.Metaspace区域内存溢出时应如何解决(OutOfMemoryError: Metaspace) 4.JVM栈内存溢出时应如何解决(StackOverflowError) 5.JVM堆内存溢出时应该如何解决(OutOfMemoryError: Java heap s…

Unity自定义编辑器:基于枚举类型动态显示属性

1.参考链接 2.应用 target并设置多选编辑 添加[CanEditMultipleObjects] using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor;[CustomEditor(typeof(LightsState))] [CanEditMultipleObjects] public class TestInspector :…

Qt重写webrtc的demo peerconnection

整个demo为&#xff1a; 可以选择多个编码方式&#xff1a; cmake_minimum_required(VERSION 3.5)project(untitled LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_INCLUDE_CURRENT_DIR ON)set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON)set(CMA…

IOS HTTPS代理抓包工具使用教程

打开抓包软件 在设备列表中选择要抓包的 设备&#xff0c;然后选择功能区域中的 HTTPS代理抓包。根据弹出的提示按照配置文件和设置手机代理。如果是本机则会自动配置&#xff0c;只需要按照提醒操作即可。 iOS 抓包准备 通过 USB 将 iOS 设备连接到电脑&#xff0c;设备需解…

《机器学习》——支持向量机(SVM)

文章目录 什么是支持向量机&#xff1f;基本原理数学模型 支持向量机模型模型参数属性信息 支持向量机实例&#xff08;1&#xff09;实例步骤读取数据可视化原始数据使用支持向量机训练可视化支持向量机结果完整代码 支持向量机实例&#xff08;2&#xff09;实例步骤导入数据…

高级软件工程-复习

高级软件工程复习 坐标国科大&#xff0c;下面是老师说的考试重点。 Ruby编程语言的一些特征需要了解要能读得懂Ruby程序Git的基本命令操作知道Rails的MVC工作机理需要清楚&#xff0c;Model, Controller, View各司什么职责明白BDD的User Story需要会写&#xff0c;SMART要求能…

使用 Maxwell 计算母线的电动势

三相短路事件的动力学 三相短路事件在电气系统中至关重要&#xff0c;因为三相之间的意外连接会导致电流大幅激增。如果管理不当&#xff0c;这些事件可能会造成损坏&#xff0c;因为它们会对电气元件&#xff08;尤其是母线&#xff09;产生极大的力和热效应。 短路时&#x…

Github出现复杂问题 无法合并 分支冲突太多 如何复原

目录 问题再现 解决思路 当然我所指的是在 main 分支开一个新的分支 删除本地文件夹 重新克隆 开一个新分支 切换分支 下载远程分支 文件覆盖 合并到主分支 ​​​​​​​问题再现 太复杂了 无法更改 编译器现状 全部崩溃了 无法更改 即使创建一个新的分支也无济于…

Jenkins触发器--在其他项目执行后构建

前言&#xff1a; jenkins中有多种触发器可用&#xff0c;可以方便的控制构建的启动 这里简单介绍下项目后构建的配置方法 1. 解释&#xff1a; Build after other projects are built Set up a trigger so that when some other projects finish building, a new build is…

CI/CD 流水线

CI/CD 流水线 CI 与 CD 的边界CI 持续集成CD&#xff08;持续交付/持续部署&#xff09;自动化流程示例&#xff1a; Jenkins 引入到 CI/CD 流程在本地或服务器上安装 Jenkins。配置 Jenkins 环境流程设计CI 阶段&#xff1a;Jenkins 流水线实现CD 阶段&#xff1a;Jenkins 流水…

计算机毕业设计Python机器学习农作物健康识别系统 人工智能 图像识别 机器学习 大数据毕业设计 算法

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

计算机网络之---物理层设备

什么是物理层设备 物理层设备是指负责数据在物理媒介上传输的硬件设备&#xff0c;它们主要处理数据的转换、信号的传输与接收&#xff0c;而不涉及数据的内容或意义。常见的物理层设备包括网卡、集线器、光纤收发器、调制解调器等。 物理层设备有哪些 1、网卡&#xff08;N…

HTML实战课堂之简单的拜年程序

一、目录&#xff1a; &#xfffc;&#xfffc; 一、目录&#xff1a; 二、祝福 三&#xff1a;代码讲解 &#xff08;1&#xff09;详细解释&#xff1a; 1.HTML部分 2. CSS部分 三、运行效果&#xff08;随机截图&#xff09;&#xff1a; 四、完整代码&#xff1a; 二、祝福…