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

数据结构(并查集,图)

并查集

练习版

class UnionFindSet
{
public:void swap(int* a, int* b){int tmp = *a;*a = *b;*b = tmp;}UnionFindSet(size_t size):_ufs(size,-1){}int UnionFind(int x){}void Union(int x1, int x2){}//长分支改为相同节点int FindRoot(int x){}bool InSet(int x1, int x2){return FindRoot(x1) == FindRoot(x2);}int SetCount(){}
private:std::vector<int> _ufs;
};
class UnionFindSet
{
public:void swap(int* a, int* b){int tmp = *a;*a = *b;*b = tmp;}UnionFindSet(size_t size):_ufs(size,-1){}int UnionFind(int x){int parent = x;while (_ufs[parent] >= 0){parent = _ufs[parent];}return parent;}void Union(int x1, int x2){int root1 = UnionFind(x1);int root2 = UnionFind(x2);/*if (root1 > root2){swap(&root1, &root2);}if (root1 != root2){_ufs[root1] += _ufs[root2];_ufs[root2] = root1;}*/if (abs(_ufs[root1]) < abs(_ufs[root2]))swap(&root1, &root2);_ufs[root1] += _ufs[root2];_ufs[root2] = root1;}//长分支改为相同节点int FindRoot(int x){int root = x;while (_ufs[root] >= 0){root = _ufs[root];}while (_ufs[x] >= 0){int parent = _ufs[x];_ufs[x] = root;x = parent;}return root;}bool InSet(int x1, int x2){return FindRoot(x1) == FindRoot(x2);}int SetCount(){int count = 0;for (int i = 0; i < _ufs.size(); i++){if (_ufs[i] < 0)count++;}return count;}
private:std::vector<int> _ufs;
};

邻接矩阵

template<class V, class W, W MAX_W = INT_MAX, bool Direction = false>
class Graph
{typedef Graph<V, W, MAX_W, Direction> Self;
public:Graph() = default;// 图的创建// 1、IO输入  -- 不方便测试,oj中更适合// 2、图结构关系写到文件,读取文件// 3、手动添加边Graph(const V* a, size_t n)//邻接矩阵{_vertexs.reserve(n);for (size_t i = 0; i < n; ++i){_vertexs.push_back(a[i]);_indexMap[a[i]] = i;}_matrix.resize(n);for (size_t i = 0; i < _matrix.size(); ++i){_matrix[i].resize(n, MAX_W);}}size_t GetVertexIndex(const V& v){auto it = _indexMap.find(v);if (it != _indexMap.end()){return it->second;}else{//assert(false);throw invalid_argument("顶点不存在");return -1;}}void _AddEdge(size_t srci, size_t dsti, const W& w){_matrix[srci][dsti] = w;// 无向图if (Direction == false){_matrix[dsti][srci] = w;}}void AddEdge(const V& src, const V& dst, const W& w){size_t srci = GetVertexIndex(src);size_t dsti = GetVertexIndex(dst);_AddEdge(srci, dsti, w);}void Print(){// 顶点for (size_t i = 0; i < _vertexs.size(); ++i){cout << "[" << i << "]" << "->" << _vertexs[i] << endl;}cout << endl;// 矩阵// 横下标cout << "  ";for (size_t i = 0; i < _vertexs.size(); ++i){//cout << i << " ";printf("%4d", i);}cout << endl;for (size_t i = 0; i < _matrix.size(); ++i){cout << i << " "; // 竖下标for (size_t j = 0; j < _matrix[i].size(); ++j){//cout << _matrix[i][j] << " ";if (_matrix[i][j] == MAX_W){//cout << "* ";printf("%4c", '*');}else{//cout << _matrix[i][j] << " ";printf("%4d", _matrix[i][j]);}}cout << endl;}cout << endl;}
};

邻接矩阵 

template<class V, class W, W MAX_W = INT_MAX, bool Direction = false>
class Graph
{typedef Graph<V, W, MAX_W, Direction> Self;
public:Graph() = default;// 图的创建// 1、IO输入  -- 不方便测试,oj中更适合// 2、图结构关系写到文件,读取文件// 3、手动添加边Graph(const V* a, size_t n)//邻接矩阵{_vertexs.reserve(n);for (size_t i = 0; i < n; ++i){_vertexs.push_back(a[i]);_indexMap[a[i]] = i;}_matrix.resize(n);for (size_t i = 0; i < _matrix.size(); ++i){_matrix[i].resize(n, MAX_W);}}size_t GetVertexIndex(const V& v){auto it = _indexMap.find(v);if (it != _indexMap.end()){return it->second;}else{//assert(false);throw invalid_argument("顶点不存在");return -1;}}void _AddEdge(size_t srci, size_t dsti, const W& w){_matrix[srci][dsti] = w;// 无向图if (Direction == false){_matrix[dsti][srci] = w;}}void AddEdge(const V& src, const V& dst, const W& w){size_t srci = GetVertexIndex(src);size_t dsti = GetVertexIndex(dst);_AddEdge(srci, dsti, w);}void Print(){// 顶点for (size_t i = 0; i < _vertexs.size(); ++i){cout << "[" << i << "]" << "->" << _vertexs[i] << endl;}cout << endl;// 矩阵// 横下标cout << "  ";for (size_t i = 0; i < _vertexs.size(); ++i){//cout << i << " ";printf("%4d", i);}cout << endl;for (size_t i = 0; i < _matrix.size(); ++i){cout << i << " "; // 竖下标for (size_t j = 0; j < _matrix[i].size(); ++j){//cout << _matrix[i][j] << " ";if (_matrix[i][j] == MAX_W){//cout << "* ";printf("%4c", '*');}else{//cout << _matrix[i][j] << " ";printf("%4d", _matrix[i][j]);}}cout << endl;}cout << endl;}
private:vector<V> _vertexs;			// 顶点集合map<V, int> _indexMap;		// 顶点映射下标vector<vector<W>> _matrix;  // 邻接矩阵
};

广度优先遍历

void BFS(const V& src)//广度优先遍历
{size_t srci = GetVertexIndex(src);// 队列和标记数组queue<int> q;vector<bool> visited(_vertexs.size(), false);q.push(srci);visited[srci] = true;int levelSize = 1;size_t n = _vertexs.size();while (!q.empty()){// 一层一层出for (int i = 0; i < levelSize; ++i){int front = q.front();//下标q.pop();cout << front << ":" << _vertexs[front] << " ";//下标对应的值// 把front顶点的邻接顶点入队列for (size_t i = 0; i < n; ++i){if (_matrix[front][i] != MAX_W){if (visited[i] == false){q.push(i);visited[i] = true;}}}}cout << endl;levelSize = q.size();}cout << endl;
}

深度优先遍历

void _DFS(size_t srci, vector<bool>& visited)
{cout << srci << ":" << _vertexs[srci] << endl;//访问起点visited[srci] = true;// 找一个srci相邻的没有访问过的点,去往深度遍历for (size_t i = 0; i < _vertexs.size(); ++i){if (_matrix[srci][i] != MAX_W && visited[i] == false){_DFS(i, visited);}}}void DFS(const V& src)
{size_t srci = GetVertexIndex(src);vector<bool> visited(_vertexs.size(), false);_DFS(srci, visited);
}

最小生成树

Kruskal算法
W Kruskal(Self& minTree)
{size_t n = _vertexs.size();//最小生成树初始化,否则越界minTree._vertexs = _vertexs;minTree._indexMap = _indexMap;minTree._matrix.resize(n);for (size_t i = 0; i < n; ++i){minTree._matrix[i].resize(n, MAX_W);}priority_queue<Edge, vector<Edge>, greater<Edge>> minque;for (size_t i = 0; i < n; ++i){for (size_t j = 0; j < n; ++j){if (i < j && _matrix[i][j] != MAX_W){minque.push(Edge(i, j, _matrix[i][j]));}}}// 选出n-1条边int size = 0;W totalW = W();UnionFindSet ufs(n);while (!minque.empty()){Edge min = minque.top();minque.pop();if (!ufs.InSet(min._srci, min._dsti))//如果一条边的两个端点属于同一个集合,则形成环{cout << _vertexs[min._srci] << "->" << _vertexs[min._dsti] << ":" << min._w << endl;minTree._AddEdge(min._srci, min._dsti, min._w);ufs.Union(min._srci, min._dsti);++size;totalW += min._w;}else{cout << "构成环:";cout << _vertexs[min._srci] << "->" << _vertexs[min._dsti] << ":" << min._w << endl;}}if (size == n - 1){return totalW;}else{return W();}
}

void TestGraphMinTree()
{const char* str = "abcdefghi";Graph<char, int> g(str, strlen(str));g.AddEdge('a', 'b', 4);g.AddEdge('a', 'h', 8);//g.AddEdge('a', 'h', 9);g.AddEdge('b', 'c', 8);g.AddEdge('b', 'h', 11);g.AddEdge('c', 'i', 2);g.AddEdge('c', 'f', 4);g.AddEdge('c', 'd', 7);g.AddEdge('d', 'f', 14);g.AddEdge('d', 'e', 9);g.AddEdge('e', 'f', 10);g.AddEdge('f', 'g', 2);g.AddEdge('g', 'h', 1);g.AddEdge('g', 'i', 6);g.AddEdge('h', 'i', 7);Graph<char, int> kminTree;cout << "Kruskal:" << g.Kruskal(kminTree) << endl;kminTree.Print();
}

Prim算法

局部贪心

W Prim(Self& minTree, const W& src)
{size_t srci = GetVertexIndex(src);size_t n = _vertexs.size();minTree._vertexs = _vertexs;minTree._indexMap = _indexMap;minTree._matrix.resize(n);for (size_t i = 0; i < n; ++i){minTree._matrix[i].resize(n, MAX_W);}/*set<int> X;set<int> Y;X.insert(srci);for (size_t i = 0; i < n; ++i){if (i != srci){Y.insert(i);}}*/vector<bool> X(n, false);vector<bool> Y(n, true);X[srci] = true;Y[srci] = false;// 从X->Y集合中连接的边里面选出最小的边priority_queue<Edge, vector<Edge>, greater<Edge>> minq;// 先把srci连接的边添加到队列中//for (size_t i = 0; i < n; ++i){if (_matrix[srci][i] != MAX_W){minq.push(Edge(srci, i, _matrix[srci][i]));}}cout << "Prim开始选边" << endl;size_t size = 0;W totalW = W();while (!minq.empty()){Edge min = minq.top();minq.pop();// 最小边的目标点也在X集合,则构成环if (X[min._dsti]){//cout << "构成环:";//cout << _vertexs[min._srci] << "->" << _vertexs[min._dsti] << ":" << min._w << endl;}else{minTree._AddEdge(min._srci, min._dsti, min._w);cout << _vertexs[min._srci] << "->" << _vertexs[min._dsti] << ":" << min._w << endl;X[min._dsti] = true;Y[min._dsti] = false;++size;totalW += min._w;if (size == n - 1)break;for (size_t i = 0; i < n; ++i){if (_matrix[min._dsti][i] != MAX_W && Y[i])//避免重复{minq.push(Edge(min._dsti, i, _matrix[min._dsti][i]));}}}}if (size == n - 1){return totalW;}else{return W();}
}
void TestGraphMinTree(){const char str[] = "abcdefghi";Graph<char, int> g(str, strlen(str));g.AddEdge('a', 'b', 4);g.AddEdge('a', 'h', 8);//g.AddEdge('a', 'h', 9);g.AddEdge('b', 'c', 8);g.AddEdge('b', 'h', 11);g.AddEdge('c', 'i', 2);g.AddEdge('c', 'f', 4);g.AddEdge('c', 'd', 7);g.AddEdge('d', 'f', 14);g.AddEdge('d', 'e', 9);g.AddEdge('e', 'f', 10);g.AddEdge('f', 'g', 2);g.AddEdge('g', 'h', 1);g.AddEdge('g', 'i', 6);g.AddEdge('h', 'i', 7);Graph<char, int> kminTree;cout << "Kruskal:" << g.Kruskal(kminTree) << endl;kminTree.Print();cout << endl << endl;Graph<char, int> pminTree;cout << "Prim:" << g.Prim(pminTree, 'a') << endl;pminTree.Print();cout << endl;for (size_t i = 0; i < strlen(str); ++i){cout << "Prim:" << g.Prim(pminTree, str[i]) << endl;}}

 

邻接表

template<class W>
struct Edge
{//int _srci;int _dsti;  // 目标点的下标W _w;		// 权值Edge<W>* _next;Edge(int dsti, const W& w):_dsti(dsti), _w(w), _next(nullptr){}
};template<class V, class W, bool Direction = false>
class Graph
{typedef Edge<W> Edge;
public:Graph(const V* a, size_t n){_vertexs.reserve(n);for (size_t i = 0; i < n; ++i){_vertexs.push_back(a[i]);_indexMap[a[i]] = i;}_tables.resize(n, nullptr);}size_t GetVertexIndex(const V& v){auto it = _indexMap.find(v);if (it != _indexMap.end()){return it->second;}else{//assert(false);throw invalid_argument("顶点不存在");return -1;}}void AddEdge(const V& src, const V& dst, const W& w){size_t srci = GetVertexIndex(src);size_t dsti = GetVertexIndex(dst);// 1->2Edge* eg = new Edge(dsti, w);eg->_next = _tables[srci];//新创建的边的 _next 指针指向当前 _tables[srci] 所指向的链表头节点_tables[srci] = eg;//更新 _tables[srci] 使其指向新创建的边 eg,即将新边插入到链表头部// 2->1if (Direction == false){Edge* eg = new Edge(srci, w);eg->_next = _tables[dsti];_tables[dsti] = eg;}}void Print(){// 顶点for (size_t i = 0; i < _vertexs.size(); ++i){cout << "[" << i << "]" << "->" << _vertexs[i] << endl;}cout << endl;for (size_t i = 0; i < _tables.size(); ++i){cout << _vertexs[i] << "[" << i << "]->";Edge* cur = _tables[i];while (cur){cout << "[" << _vertexs[cur->_dsti] << ":" << cur->_dsti << ":" << cur->_w << "]->";cur = cur->_next;}cout << "nullptr" << endl;}}private:vector<V> _vertexs;			// 顶点集合map<V, int> _indexMap;		// 顶点映射下标vector<Edge*> _tables;		// 邻接表//表示存储每个顶点对应的边链表的表头指针数组
};

相关文章:

数据结构(并查集,图)

并查集 练习版 class UnionFindSet { public:void swap(int* a, int* b){int tmp *a;*a *b;*b tmp;}UnionFindSet(size_t size):_ufs(size,-1){}int UnionFind(int x){}void Union(int x1, int x2){}//长分支改为相同节点int FindRoot(int x){}bool InSet(int x1, int x2)…...

深度学习篇---断点重训模型部署文件

文章目录 前言一、断点重训&#xff08;Checkpoint&#xff09;文件1. 动态图&#xff08;DyGraph&#xff09;模式.pdparams 文件.pdopt 文件.pdscaler 文件.pdmeta 或 .pkl 文件 2. 静态图&#xff08;Static Graph&#xff09;模式.pdparams 和 .pdopt 文件.ckpt 文件 3. 恢…...

chromem-go + ollama + bge-m3 进行文档向量嵌入和查询

Ollama 安装 https://ollama.com/download Ollama 运行嵌入模型 bge-m3:latest ollama run bge-m3:latestchromem-go 文档嵌入和查询 package mainimport ("context""fmt""runtime""github.com/philippgille/chromem-go" )func ma…...

运维面试题(十一)

1.如果一个硬盘 IO 时阻塞了&#xff0c;会发生什么情况&#xff1f; 进程/线程挂起&#xff1a;发起I/O操作的进程或线程会被操作系统置为阻塞状态&#xff08;等待状态&#xff09;&#xff0c;直到I/O完成。CPU资源释放&#xff1a;阻塞的线程会让出CPU&#xff0c;操作系统…...

深度学习中常见的专业术语汇总

本硕博都是搞机械的匠人&#xff0c;当然也想做一下交叉学科的东西&#xff0c;蹭一下人工智能的热点。虽然世界是个草台班子&#xff0c;但是来都来了&#xff0c;咱也要把这场戏演好。 记得之前网上爆料有位大学生发了很多水文&#xff0c;对&#xff0c;是交叉学科的&#x…...

人工智能赋能医疗:开启智慧医疗新时代

在当今数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的速度渗透到各个行业&#xff0c;其中医疗领域更是成为AI技术大放异彩的重要舞台。从疾病诊断到治疗方案制定&#xff0c;从医疗影像分析到药物研发&#xff0c;AI正在为传统医疗带来…...

stable diffusion 本地部署教程 2025最新版

前提&#xff1a; 需要环境 git git下载地址Git - Downloading Package ​ 直接装即可 python3.10.6 下载地址 Python Release Python 3.10.6 | Python.org ​ 记得python环境一定要3.10.6&#xff01;&#xff01;&#xff01; 第一个版本 项目地址https://github.…...

[Mac]利用Hexo+Github Pages搭建个人博客

由于我这台Mac基本没啥环境&#xff0c;因此需要从零开始配置&#xff0c;供各位参考。 注意⚠️&#xff1a;MacBook (M4)使用/bin/zsh作为默认Shell&#xff0c;其对应的配置文件为~/.zshrc 参考文档&#xff1a; HEXO系列教程 | 使用GitHub部署静态博客HEXO | 小白向教程 文…...

罗杰斯特回归

定义 逻辑回归其实就是原来的线性回归加了激活函数&#xff0c;这个函数其实就是sigmoid函数&#xff0c;把一个回归的连续数值压缩到了0到1的空间&#xff0c;其实只要有函数能够满足把数值压缩到0,1之间就可以&#xff08;因为0到1之间的数值就是概率值&#xff09; 对于分类…...

27_promise

插入一下前端助手测试&#xff0c;顺手可以用来做安全 promise promise 是一个es6新增的语法 汉语&#xff1a;承诺的意思 作用:是专门用来解决回调地狱!!!! 什么是回调函数&#xff1f; <script>// 回调函数 callback回调// 就是把函数A当作参数传递到函数B中// 在函…...

【机械视觉】C#+VisionPro联合编程———【六、visionPro连接工业相机设备】

【机械视觉】C#VisionPro联合编程———【六、visionPro连接工业相机设备】 目录 【机械视觉】C#VisionPro联合编程———【六、visionPro连接工业相机设备】 前言&#xff1a; 连接步骤说明 一. 硬件连接 支持的相机接口类型&#xff1a; 连接步骤 2. 软件配置 Visio…...

红宝书第十九讲:详解JavaScript的Fetch API与Ajax请求

红宝书第十九讲&#xff1a;详解JavaScript的Fetch API与Ajax请求 资料取自《JavaScript高级程序设计&#xff08;第5版&#xff09;》。 查看总目录&#xff1a;红宝书学习大纲 一、基本概念&#xff1a;为什么需要Fetch&#xff1f; Fetch API是浏览器提供的现代网络请求工…...

【深度学习新浪潮】具身智能及其发展前景分析

一、具身智能的定义 具身智能(Embodied Intelligence) 是指通过物理载体(如机器人)与环境实时交互,实现感知、决策与行动闭环的智能系统。其核心在于将人工智能与物理实体结合,强调“智能源于身体与环境的互动”,而非仅依赖虚拟算法。具身智能的典型特征包括多模态感知…...

练习题:111

目录 Python题目 题目 题目分析 需求理解 关键知识点 实现思路分析 代码实现 代码解释 指定文件路径和名称&#xff1a; 定义要写入的内容&#xff1a; 打开文件并写入内容&#xff1a; 异常处理&#xff1a; 输出提示信息&#xff1a; 运行思路 结束语 Python题…...

第三次作业

1、将你的虚拟机的网卡模式设置为nat模式&#xff0c;给虚拟机网卡配置三个主机位分别为100、200、168的ip地址 首先将虚拟机在vmware编辑里将网卡模式改为nat 然后用nmcli c mod ens160 ipv4.addresses 192.168.254.100 nmcli c mod ens160 ipv4.addresses 192.168.254.200…...

Oracle数据库数据编程SQL<3.1 PL/SQL 匿名块 及 流程控制中的条件判断、循环、异常处理和随机函数应用>

PL/SQL部分 在SQL的基础上增加了一些过程化的控制语句。 过程化控制语句包括&#xff1a;类型定义、判断、循环、游标、异常处理&#xff08;例外处理&#xff09; 目录 PL/SQL匿名块 一、匿名块基本结构 1、匿名块由三个部分组成&#xff1a; 2、注意事项&#xff1a; …...

CEF 给交互函数, 添加控制台是否显示交互参数log开关

CEF 控制台添加一函数,枚举 注册的供前端使用的CPP交互函数有哪些 CEF 多进程模式时,注入函数,获得交互信息-CSDN博客 这两篇文章,介绍了注入函数,在控制台中显示 各自提供的交互函数信息。 有些场景下,我们还需要更详细的信息,比如想知道 彼此传递的参数, 如果每次调…...

如何用 Postman 正确传递 Date 类型参数,避免服务器解析错误?

如何在 Postman 中传递 Date 类型参数。调试工具如何模拟发送用户端的当前时间呢&#xff1f; Postman 传递 Date 类型参数教程...

从代码学习深度学习 - 含并行连结的网络(GoogLeNet)PyTorch版

文章目录 前言一、GoogLeNet的理论基础1.1 背景与创新点1.2. Inception模块的工作原理二、完整代码实现与解析2.1. 环境准备与工具函数2.2. 数据加载 - Fashion-MNIST2.3. Inception模块设计2.4. GoogLeNet完整模型2.5. 训练函数2.6. 运行训练三、训练结果与分析3.1. 性能分析3…...

进程Kill杀死后GPU显存没有释放仍然被占用,怎么杀死僵尸进程

参考链接&#xff1a; https://blog.csdn.net/qq_37591986/article/details/131118109 使用下面的命令&#xff1a; fuser -v /dev/nvidia0 | awk {print $0} | xargs kill -9一般来说他会杀掉整个用户的所有进程。...

Deepseek API+Python 测试用例一键生成与导出 V1.0.3

** 功能详解** 随着软件测试复杂度的不断提升,测试工程师需要更高效的方法来设计高覆盖率的测试用例。Deepseek API+Python 测试用例生成工具在 V1.0.3 版本中,新增了多个功能点,优化了提示词模板,并增强了对文档和接口测试用例的支持,极大提升了测试用例设计的智能化和易…...

【字符设备驱动开发–IMX6ULL】(一)简介

【字符设备驱动开发–IMX6ULL】&#xff08;一&#xff09;简介 一、Linux驱动与裸机开发区别 1.裸机驱动开发回顾 ​ 1、底层&#xff0c;跟寄存器打交道&#xff0c;有些MCU提供了库。 spi.c&#xff1a;主机驱动&#xff08;换成任何一个设备之后只需要调用此文件里面的…...

MaxKB 如何通过Nginx修改浮框提示文字

在使用MaxKB做第三方嵌入的时候&#xff0c;总会有想Diy前端样式的场景&#xff0c;下面就通过Nginx的方式&#xff0c;实现浮框样式的改变。 一、效果对比 修改前&#xff1a; 修改后&#xff1a; 前后对比&#xff1a; 修改了提示文字。去掉了图标后面的白框 下面讲一下该…...

中小型企业网络的搭建

1.1 网络逻辑拓扑、布线方案的设计 1.1.1 网络设计依据 网络设计应遵循以下基本原则&#xff1a; 高效性&#xff1a;确保网络架构能够支持企业日常业务的高效运行。 可靠性&#xff1a;采用冗余设计&#xff0c;确保网络的高可用性&#xff0c;避免单点故障。 可扩展性…...

第二卷:海盐城血战(37-72回)正反人物群像

第二卷&#xff1a;海盐城血战&#xff08;37-72回&#xff09;正反人物群像 核心矛盾&#xff1a;寒门军事崛起 → 内部倾轧 → 制度性腐败 主题&#xff1a;通过人物群像展现寒门胜利的虚幻性与权力异化的必然性 一、正派阵营&#xff08;寒门抗争势力&#xff09; 1. 刘裕…...

qt之使用redis与其他程序(python)交互同通信

一、前言 有需求&#xff0c;趁热调试出了嵌入式系统的算法环境安装和远程桌面以及一些其他的之前一直未调试出搁置的功能&#xff0c;趁热继续调试进阶功能redis通信&#xff0c;redis与sqlite各有千秋&#xff0c;redis可以作为在嵌入式系统下多个程序之间相互通信的中间件&…...

Pycharm(七):几个简单案例

一.剪刀石头布 需求&#xff1a;和电脑玩剪刀石头布游戏 考察点&#xff1a;1.随机数&#xff1b;2.判断语句 import random # numrandom.randint(1,3) # print(num) # print(**30) #1.录入玩家手势 playerint(input(请输入手势&#xff1a;&#xff08;1.剪刀 2.石头 3&…...

05.AI搭建preparationの(transformers01)BertTokenizer实现分词编码

一、下载 bert-base-chinese镜像下载 二、简介作用&#xff1a; 模型每个参数占用的字节大小模型大小模型大小层数头数GPT-14 个字节的 FP32 精度浮点数117M446MB1212GPT-22 个字节的 FP161.5亿到1.75亿0.5GB到1.5GB4816GPT-32 个字节的 FP161.75万亿&#xff08;17500亿&a…...

Perl 环境安装指南

Perl 环境安装指南 引言 Perl是一种广泛使用的解释型、动态编程语言,以其强大的文本处理能力和灵活性著称。本文将为您详细介绍Perl环境的安装过程,包括系统要求、安装步骤以及注意事项。 系统要求 在安装Perl之前,请确保您的计算机满足以下基本要求: 操作系统:Window…...

Visual Studio中创建和配置设置文件(Settings.settings) - 详细步骤指南——待调试

#在Visual Studio中创建和配置设置文件(Settings.settings) - 详细步骤指南 在Visual Studio中创建和配置应用程序设置文件&#xff0c;用于保存用户上次输入的值。 第一步&#xff1a;添加设置文件 1. **打开你的项目**&#xff1a;在Visual Studio中打开你的AutoCAD插件项目 …...

Nginx的时钟精度陷阱:request_time与upstream_response_time差异分析

在elasticsearch 采集nginx日志分析的场景下发现&#xff0c; request_time 小于upstream_response_time &#xff0c;于是才有了这边文章。 在 Nginx 中&#xff0c;upstream_response_time 和 request_time 使用不同的系统时钟和精度机制来记录时间&#xff0c;这可能导致 u…...

参加李继刚线下活动启发:未来提示词还会存在吗?

上周六&#xff0c;我参加了李继刚老师组织的线下活动。 现场干货满满&#xff0c;尤其是关于 AI 时代提示词的价值、与 AI 沟通的艺术等话题&#xff0c;李老师的分享如同醍醐灌顶&#xff0c;让我对 AI 人机协作有了更深的理解。 将几点核心收获整理出来&#xff0c;与大家…...

C++作用域辨识详解

在 C 中&#xff0c;作用域&#xff08;Scope&#xff09;定义了变量、函数、类等标识符的可见性和生命周期。理解作用域对于编写清晰、高效的代码至关重要。以下是 C 中作用域的详细分类和说明。 1. 全局作用域&#xff08;Global Scope&#xff09; 全局作用域是指在所有函…...

MYTOOL-记事本

一、前言 目录 1.原型设计 2.程序实现 3.最终界面说明 二、环境 windows10 每个软件工具前期会设计大概的原型&#xff0c;我设计的原型工具使用Axure RP9&#xff0c;很不错的一个设计工具 三、正文 1.原型设计 2.程序实现 3.最终界面说明 四、结语...

混合知识表示系统框架python示例

前文我们已经深入学习了框架表示法、产生式规则和一阶谓词逻辑,并对它们进行了深度对比,发现它们在不同的应用场景下各有优缺点。 一阶谓词逻辑适合复杂逻辑推理场景,具有数学定理证明、形式化系统规范的优点;产生式规则适合动态决策系统,支持实时决策(如风控、诊断),规…...

Vue2——常用指令总结、指令修饰符、v-model原理、computed计算属性、watch监听器、ref和$refs

文章目录 一、概念理解二、指令1. 常用内置指令总结2. 常用指令修饰符3. 自定义指令4. v-model原理表单类组件封装 三、补充1. computed计算属性2. watch监视器3. ref和$refs 一、概念理解 【事件处理函数】 事件处理函数应该写到一个跟data同级的配置项&#xff08;methods&a…...

2025-3-29算法打卡

一&#xff0c;回文判定 1.题目描述&#xff1a; 题目描述 给定一个长度为 nn 的字符串 SS。请你判断字符串 SS 是否回文。 输入描述 输入仅 11 行包含一个字符串 SS。 1≤∣S∣≤1061≤∣S∣≤106&#xff0c;保证 SS 只包含大小写、字母。 输出描述 若字符串 SS 为回…...

【网络编程】搭建一个简单的UDP通信服务器和客户端

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:网络编程 ⚙️操作环境:VS Code (操作系统:Ubuntu 22.04 server 64bit) 目录 搭建UDP服务器 搭建UDP客户端 其余工程文件 主函数文件Main.cc 日志打印文件Log.hpp Makefile文件 结语 搭建UDP服务器 搭建UDP服务器的主要流…...

数据分析概述

数据分析&#xff1a;用适当的分析方法和挖掘方法对收集来的数据进行研究总结&#xff0c;提取有用的信息&#xff0c;形成结论并支持决策的过程。 一.数据分析的分类 1.业务描述性分析。以数据为分析对象&#xff0c;以探索数据内的有用信息为主要途径&#xff0c;以解决业务…...

【C#】C#字符串拼接的6种方式及其性能分析对比

C#字符串拼接的6种方式及其性能分析对比 前言BenchmarkDotNet拼接基础数据操作符$内插字符串String.FormatString.ConcatString.JoinStringBuilder性能基准对比测试完整代码少量字符串拼接大量字符串拼接 前言 在C#编程中字符串拼接是一种常见且基础的操作&#xff0c;广泛应用…...

图解AUTOSAR_SWS_SPIHandlerDriver

AUTOSAR SPI Handler/Driver 详解 AUTOSAR标准下的SPI通信模块详细设计与实现 目录 AUTOSAR SPI Handler/Driver 详解 目录1. AUTOSAR SPI模块概述 1.1 SPI模块的作用1.2 SPI模块在AUTOSAR中的位置1.3 SPI模块整体架构 2. SPI模块状态机 2.1 状态定义2.2 状态转换2.3 子状态机…...

华为HCIE网络工程师培训选机构攻略

从 官方授权机构 到 性价比黑马&#xff0c;结合价格、师资、通过率等维度&#xff0c;为你筛选出最适合的培训方案。 一、华为官方授权机构&#xff08;优先推荐&#xff09; 华为官方授权机构拥有 真机实验环境考官级讲师&#xff0c;适合预算充足、追求高通过率的学员。 机…...

【银河麒麟系统常识】命令:dotnet --list-sdks(列出已安装的 .NET SDK 版本)

命令&#xff1a; dotnet --list-sdks 功能 列出当前系统中所有已安装的 .NET SDK 版本&#xff1b; 返回值规则 # 1. 格式&#xff1a;<版本号>[<安装路径>]&#xff1b; # 2. 排序&#xff1a;按版本号从低到高排序&#xff1b;示例...

【数据仓库】湖仓一体的核心建模理论

湖仓一体&#xff08;Lakehouse&#xff09;是一种融合数据湖与数据仓库优势的新型架构&#xff0c;其建模理论在传统数据仓库与数据湖基础上进行了扩展和创新。以下从核心建模理论、关键技术支撑及与传统架构的差异三个维度进行解析&#xff1a; 一、湖仓一体的核心建模理论 …...

Go 语言规范学习(3)

文章目录 Properties of types and valuesRepresentation of valuesUnderlying types【底层类型】Core types【核心类型】Type identityAssignabilityRepresentabilityMethod sets BlocksDeclarations and scopeLabel scopesBlank identifierPredeclared identifiersExported i…...

基于django优秀少儿图书推荐网(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;图书推荐网当然不能排除在外。本次开发的优秀少儿图书推荐网是在实际应用和软件工程的开发原理之上&#xff0c;运用Python语言、爬虫技术…...

CS2 DEMO导入blender(慢慢更新咯)

流程&#xff1a;cs2-sourcefilmmaker-blender 工具&#xff1a;cs2tools&#xff0c;cs2manager&#xff0c;blender&#xff0c;blender插件sourceio&#xff0c;source2viewer 导入sfm 工具界面 选择这个 sourceio插件 sourceIO其中新版本导入相机路径不见了&#xff0c…...

SVTAV1函数分析-svt_av1_cost_coeffs_txb

一 函数作用 函数svt_av1_cost_coefss_txb是一个与AV1视频编码相关的函数&#xff0c;主要用于计算变换块(Transform Block)中系数的成本(Cost)。在视频编码中&#xff0c;特被是在AV1编码中&#xff0c;计算系数的成本对于模式决策(Mode Decision)和熵编码(Entropy Coding) 等…...

【Linux加餐-验证UDP:TCP】-windows作为client访问Linux

一、验证UDP-windows作为client访问Linux UDP client样例代码 #include <iostream> #include <cstdio> #include <thread> #include <string> #include <cstdlib> #include <WinSock2.h> #include <Windows.h>#pragma warning(dis…...

qt+opengl 加载三维obj文件

1前面我们已经熟悉了opengl自定义顶点生成一个立方体&#xff0c;并且我们实现了立方体的旋转&#xff0c;光照等功能。下面我们来用opengl来加载一个obj文件。准备我们首先准备一个简单的obj文件&#xff08;head.obj&#xff09;。资源在本页下载 2 在obj文件里面&#xff0c…...