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

蓝桥杯C语言组:图论问题

蓝桥杯C语言组图论问题研究


摘要

图论是计算机科学中的一个重要分支,在蓝桥杯C语言组竞赛中,图论问题频繁出现,对参赛选手的算法设计和编程能力提出了较高要求。本文系统地介绍了图论的基本概念、常见算法及其在蓝桥杯C语言组中的应用,通过具体实例和表格,详细解释了图论问题的解题思路和实现方法,旨在为参赛选手提供参考和指导。


一、引言

蓝桥杯全国软件和信息技术专业人才大赛是国内知名的IT类竞赛,其中C语言组竞赛备受高校学生的关注和参与。图论作为计算机科学中的经典理论,广泛应用于网络设计、路径规划、资源分配等领域。在蓝桥杯C语言组竞赛中,图论问题的考察不仅测试选手对图论知识的掌握程度,还考察其编程实现能力。因此,深入研究图论问题及其解题方法对于提高竞赛成绩具有重要意义。


二、图论基础

(一)图的基本概念

图是一种由顶点(节点)和边(或弧)组成的离散结构,用于表示对象之间的关系。图可以分为无向图和有向图。无向图中的边没有方向,表示两个顶点之间的对称关系;有向图中的边有方向,表示从一个顶点指向另一个顶点的关系。

术语定义
顶点(Vertex)图中的基本元素,表示对象
边(Edge)连接两个顶点的线段,表示对象之间的关系
度(Degree)与一个顶点相连的边的数量
路径(Path)从一个顶点到另一个顶点的边的序列
连通性(Connectivity)图中任意两个顶点之间是否存在路径

(二)图的存储结构

在计算机中,图可以通过邻接矩阵、邻接表等数据结构来存储。

  1. 邻接矩阵:用一个二维数组表示图的顶点之间的关系。对于无向图,邻接矩阵是对称的;对于有向图,邻接矩阵不一定对称。邻接矩阵的优点是实现简单,判断两个顶点之间是否存在边的时间复杂度为O(1),但缺点是空间复杂度较高,尤其是对于稀疏图。

  2. 邻接表:用一个数组存储图的顶点,每个顶点对应一个链表,链表中的节点表示与该顶点相连的边。邻接表的优点是节省空间,适合稀疏图,但判断两个顶点之间是否存在边的时间复杂度较高。


三、图论算法

(一)最短路径算法

最短路径问题是图论中的经典问题,目标是找到从一个顶点到另一个顶点的最短路径。常见的最短路径算法包括Dijkstra算法、Bellman-Ford算法和Floyd-Warshall算法。

1. Dijkstra算法

Dijkstra算法用于求解单源最短路径问题,即从一个起点到所有其他顶点的最短路径。算法的基本思想是通过贪心策略逐步扩展已知的最短路径集合。Dijkstra算法的时间复杂度为O(V^2),其中V是顶点的数量。通过使用优先队列优化,时间复杂度可以降低到O(VlogV)。

2. Floyd-Warshall算法

Floyd-Warshall算法用于求解所有顶点对之间的最短路径。算法的核心思想是动态规划,通过逐步考虑每个顶点作为中间点来更新路径长度。Floyd-Warshall算法的时间复杂度为O(V^3),适用于顶点数量较少的图。

(二)最小生成树算法

最小生成树是图论中的另一个重要问题,目标是在一个连通图中找到一棵包含所有顶点的生成树,使得树的边权总和最小。常见的最小生成树算法包括Prim算法和Kruskal算法。

1. Prim算法

Prim算法从一个顶点开始,逐步扩展生成树,每次选择与当前生成树相连的最小边。Prim算法的时间复杂度为O(V^2),通过使用优先队列优化,时间复杂度可以降低到O(VlogV)。

2. Kruskal算法

Kruskal算法通过选择最小的边逐步构建生成树,同时避免形成环。Kruskal算法的时间复杂度主要取决于边的排序,通常为O(ElogE),其中E是边的数量。

(三)深度优先搜索(DFS)与广度优先搜索(BFS)

DFS和BFS是图论中的两种基本搜索算法,广泛应用于路径搜索、连通性判断等问题。

1. 深度优先搜索(DFS)

DFS从一个顶点开始,沿着路径尽可能深地搜索,直到无法继续为止,然后回溯。DFS通常使用递归实现,时间复杂度为O(V + E),其中V是顶点数量,E是边的数量。

2. 广度优先搜索(BFS)

BFS从一个顶点开始,依次访问所有相邻顶点,然后再从这些相邻顶点开始,依次访问它们的相邻顶点。

(四)实例分析

1. 最短路径问题

假设有一个图,顶点集合为{A, B, C, D, E},边集合为{(A, B, 1), (A, C, 4), (B, C, 2), (B, D, 5), (C, D, 1), (C, E, 3), (D, E, 2)},其中每个元组表示边的起点、终点和权重。使用Dijkstra算法求解从顶点A到其他所有顶点的最短路径。

步骤当前顶点距离集合已访问集合
1A{A: 0, B: 1, C: 4, D: ∞, E: ∞}{A}
2B{A: 0, B: 1, C: 3, D: 6, E: ∞}{A, B}
3C{A: 0, B: 1, C: 3, D: 4, E: 6}{A, B, C}
4D{A: 0, B: 1, C: 3, D: 4, E: 6}{A, B, C, D}
5E{A: 0, B: 1, C: 3, D: 4, E: 6}{A, B, C, D, E}

最终,从顶点A到其他顶点的最短路径分别为:A到B为1,A到C为3,A到D为4,A到E为6。

2. 最小生成树问题

假设有一个图,顶点集合为{A, B, C, D, E},边集合为{(A, B, 1), (A, C, 4), (B, C, 2), (B, D, 5), (C, D, 1), (C, E, 3), (D, E, 2)},使用Kruskal算法求解最小生成树。

步骤边集合是否加入原因
1(A, B, 1)不形成环
2(C, D, 1)不形成环
3(B, C, 2)不形成环
4(D, E, 2)不形成环
5(C, E, 3)形成环
6(A, C, 4)形成环
7(B, D, 5)形成环

最终,最小生成树的边集合为{(A, B, 1), (C, D, 1), (B, C, 2), (D, E, 2)}。


四、结论

图论是蓝桥杯C语言组竞赛中的重要内容,掌握图论的基本概念和常见算法对于参赛选手来说至关重要。通过实例分析和表格解释,本文详细介绍了图论问题的解题思路和实现方法,希望对参赛选手有所帮助。


以下是几个关于图论问题的例题及其解决代码,涵盖常见的图论算法,如Dijkstra算法、Floyd-Warshall算法、拓扑排序等,适用于蓝桥杯C语言组竞赛的备考。

例题1:单源最短路径问题(Dijkstra算法)

问题描述:给定一个带权有向图,求从某个源点到所有其他顶点的最短路径。

C语言实现代码

#include <stdio.h>
#include <stdlib.h>
#include <limits.h> // For INT_MAX#define V 5 // 假设图中有5个顶点// 找到距离最小且未被访问的顶点
int minDistance(int dist[], int sptSet[], int n) {int min = INT_MAX, min_index;for (int v = 0; v < n; v++)if (sptSet[v] == 0 && dist[v] <= min)min = dist[v], min_index = v;return min_index;
}// Dijkstra算法实现
void dijkstra(int graph[V][V], int src) {int dist[V]; // dist[i] 会保存源顶点到顶点i的最短路径int sptSet[V]; // sptSet[i] 为真 (1) 时表示该顶点i已在最短路径树中或最短距离已确定// 初始化所有距离为无穷大,sptSet[]为假for (int i = 0; i < V; i++)dist[i] = INT_MAX, sptSet[i] = 0;dist[src] = 0; // 源顶点到自身的距离总是为0for (int count = 0; count < V - 1; count++) {int u = minDistance(dist, sptSet, V);sptSet[u] = 1; // 将选定的顶点标记为已处理// 更新相邻顶点的距离值for (int v = 0; v < V; v++)if (!sptSet[v] && graph[u][v] && dist[u] != INT_MAX&& dist[u] + graph[u][v] < dist[v])dist[v] = dist[u] + graph[u][v];}// 打印结果printf("Vertex \t Distance from Source\n");for (int i = 0; i < V; i++)printf("%d \t\t %d\n", i, dist[i]);
}int main() {int graph[V][V] = {{ 0, 6, 0, 1, 0 },{ 6, 0, 5, 2, 2 },{ 0, 5, 0, 0, 5 },{ 1, 2, 0, 0, 1 },{ 0, 2, 5, 1, 0 }};dijkstra(graph, 0); // 假设从顶点0开始return 0;
}

说明:该代码实现了Dijkstra算法,用于求解单源最短路径问题。

例题2:所有顶点对的最短路径问题(Floyd-Warshall算法)

问题描述:给定一个带权图,求图中所有顶点对之间的最短路径。

C语言实现代码

#include <stdio.h>
#include <limits.h> // For INT_MAX#define V 4 // 假设图中有4个顶点void printSolution(int dist[][V]);void floydWarshall(int graph[][V]) {int dist[V][V], i, j, k;// 初始化距离矩阵for (i = 0; i < V; i++)for (j = 0; j < V; j++)dist[i][j] = graph[i][j];// 计算所有顶点对的最短路径for (k = 0; k < V; k++) {for (i = 0; i < V; i++) {for (j = 0; j < V; j++) {if (dist[i][k] + dist[k][j] < dist[i][j])dist[i][j] = dist[i][k] + dist[k][j];}}}// 打印结果printSolution(dist);
}void printSolution(int dist[][V]) {printf("The following matrix shows the shortest distances between every pair of vertices:\n");for (int i = 0; i < V; i++) {for (int j = 0; j < V; j++) {if (dist[i][j] == INT_MAX)printf("%7s", "INF");elseprintf("%7d", dist[i][j]);}printf("\n");}
}int main() {int graph[V][V] = {{ 0, 5, INT_MAX, 10 },{ INT_MAX, 0, 3, INT_MAX },{ INT_MAX, INT_MAX, 0, 1 },{ INT_MAX, INT_MAX, INT_MAX, 0 }};floydWarshall(graph);return 0;
}

说明:该代码实现了Floyd-Warshall算法,用于求解所有顶点对之间的最短路径。

例题3:拓扑排序(Kahn算法)

问题描述:给定一个有向无环图(DAG),对图中的顶点进行拓扑排序。

C语言实现代码

#include <stdio.h>
#include <stdlib.h>#define V 6 // 假设图中有6个顶点void topologicalSort(int adj[][V], int inDegree[], int result[]) {int count = 0;int queue[V], front = 0, rear = 0;// 初始化队列,将所有入度为0的顶点入队for (int i = 0; i < V; i++) {if (inDegree[i] == 0) {queue[rear++] = i;}}while (front < rear) {int u = queue[front++];result[count++] = u;// 遍历所有邻接点,减少其入度for (int v = 0; v < V; v++) {if (adj[u][v]) {if (--inDegree[v] == 0) {queue[rear++] = v;}}}}if (count != V) {printf("There exists a cycle in the graph\n");}
}int main() {int adj[V][V] = {{0, 1, 1, 0, 0, 0},{0, 0, 0, 1, 0, 0},{0, 0, 0, 1, 0, 0},{0, 0, 0, 0, 1, 1},{0, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 0}};int inDegree[V] = {0};for (int i = 0; i < V; i++) {for (int j = 0; j < V; j++) {inDegree[i] += adj[j][i];}}int result[V];topologicalSort(adj, inDegree, result);printf("Topological Sort: ");for (int i = 0; i < V; i++) {printf("%d ", result[i]);}printf("\n");return 0;
}

说明:该代码实现了Kahn算法,用于对有向无环图进行拓扑排序。

例题4:最小生成树(Prim算法)

问题描述:给定一个无向连通图,求该图的最小生成树。

C语言实现代码

#include <stdio.h>
#include <limits.h> // For INT_MAX#define V 5 // 假设图中有5个顶点int minKey(int key[], int mstSet[], int n) {int min = INT_MAX, min_index;for (int v = 0; v < n; v++)if (mstSet[v] == 0 && key[v] < min)min = key[v], min_index = v;return min_index;
}void primMST(int graph[V][V]) {int parent[V]; // 存储最小生成树的构建过程int key[V]; // key[i]保存顶点i到最小生成树的最小权重int mstSet[V]; // mstSet[i]为真(1)时表示该顶点i已在最小生成树中for (int i = 0; i < V; i++)key[i] = INT_MAX, mstSet[i] = 0;key[0] = 0; // 从顶点0开始parent[0] = -1;for (int i = 0; i < V - 1; i++) {int u = minKey(key, mstSet, V);mstSet[u] = 1;for (int v = 0; v < V; v++)if (graph[u][v] && mstSet[v] == 0 && graph[u][v] < key[v])parent[v] = u, key[v] = graph[u][v];}printf("Edge \tWeight\n");for (int i = 1; i < V; i++)printf("%d - %d \t%d \n", parent[i], i, graph[i][parent[i]]);
}int main() {int graph[V][V] = {{ 0, 2, 0, 6, 0 },{ 2, 0, 3, 8, 5 },{ 0, 3, 0, 0, 7 },{ 6, 8, 0, 0, 9 },{ 0, 5, 7, 9, 0 }};primMST(graph);return 0;
}

说明:该代码实现了Prim算法,用于求解无向连通图的最小生成树。

例题5:深度优先搜索(DFS)与连通分量

问题描述:给定一个无向图,使用深度优先搜索(DFS)找出图中的所有连通分量。

C语言实现代码

#include <stdio.h>
#include <stdlib.h>#define V 5 // 假设图中有5个顶点void DFS(int adj[][V], int visited[], int v) {visited[v] = 1;printf("%d ", v);for (int i = 0; i < V; i++) {if (adj[v][i] && !visited[i]) {DFS(adj, visited, i);}}
}void findConnectedComponents(int adj[][V], int visited[]) {for (int i = 0; i < V; i++) {if (!visited[i]) {DFS(adj, visited, i);printf("\n");}}
}int main() {int adj[V][V] = {{0, 1, 0, 0, 0},{1, 0, 1, 0, 0},{0, 1, 0, 1, 0},{0, 0, 1, 0, 1},{0, 0, 0, 1, 0}};int visited[V] = {0};printf("Connected components:\n");findConnectedComponents(adj, visited);return 0;
}

说明:该代码实现了深度优先搜索(DFS),用于找出无向图中的所有连通分量。

例题6:广度优先搜索(BFS)与最短路径

问题描述:给定一个无权图,使用广度优先搜索(BFS)找出从源点到所有其他顶点的最短路径。

C语言实现代码

#include <stdio.h>
#include <stdlib.h>#define V 6 // 假设图中有6个顶点void BFS(int adj[][V], int src, int dist[]) {int visited[V] = {0};int queue[V], front = 0, rear = 0;visited[src] = 1;dist[src] = 0;queue[rear++] = src;while (front < rear) {int u = queue[front++];for (int v = 0; v < V; v++) {if (adj[u][v] && !visited[v]) {visited[v] = 1;dist[v] = dist[u] + 1;queue[rear++] = v;}}}
}int main() {int adj[V][V] = {{0, 1, 1, 0, 0, 0},{1, 0, 0, 1, 0, 0},{1, 0, 0, 1, 0, 0},{0, 1, 1, 0, 1, 1},{0, 0, 0, 1, 0, 0},{0, 0, 0, 1, 0, 0}};int dist[V];BFS(adj, 0, dist);printf("Shortest distances from source vertex 0:\n");for (int i = 0; i < V; i++) {printf("Vertex %d: %d\n", i, dist[i]);}return 0;
}

说明:该代码实现了广度优先搜索(BFS),用于找出无权图中从源点到所有其他顶点的最短路径。


相关文章:

蓝桥杯C语言组:图论问题

蓝桥杯C语言组图论问题研究 摘要 图论是计算机科学中的一个重要分支&#xff0c;在蓝桥杯C语言组竞赛中&#xff0c;图论问题频繁出现&#xff0c;对参赛选手的算法设计和编程能力提出了较高要求。本文系统地介绍了图论的基本概念、常见算法及其在蓝桥杯C语言组中的应用&#…...

jmeter 性能测试Linux 常用的安装

把软件安装包全部都放在/data/soft目录下 一、 Java 环境安装 1. 把JDK的安装包上传到/data/soft/目录下 2. 解压jdk安装包,重命名jdk 3. 配置环境变量 JAVA_HOME [root@MiWiFi-RA72-srv soft]# vim /etc/profile export JAVA_HOME=/data/soft/jdk1.8 export PATH=…...

19 角度操作模块(angle.rs)

angle.rs代码定义了一个泛型结构体 Angle&#xff0c;用于表示一个角度&#xff0c;其中角度以弧度为单位存储。这个结构体提供了许多特性&#xff0c;包括复制、克隆、默认实现、调试输出、部分相等性比较、哈希等。此外&#xff0c;它还根据编译时的特性&#xff08;features…...

前端高级面试题及其答案

以下是一些前端高级面试题及其答案&#xff1a; 一、JavaScript相关 事件循环&#xff08;Event Loop&#xff09;机制 答案&#xff1a; JavaScript的事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。它包含宏任务&#xff08;macrotask&#xff09;队列&…...

【ORACLE】这个‘‘和null不等价的场景,deepseek你怎么看?

【ORACLE】一处’和null不等价的场景–to_char(number,varchar2) 背景 最近在做一个国产数据库替代项目&#xff0c;要求将ORACLE迁移到一个openGauss系数据库&#xff0c;迁移后&#xff0c;执行一个存储过程时&#xff0c;发现国产库的执行结果和ORACLE不一致&#xff0c; …...

使用Python实现PDF与SVG相互转换

目录 使用工具 使用Python将SVG转换为PDF 使用Python将SVG添加到现有PDF中 使用Python将PDF转换为SVG 使用Python将PDF的特定页面转换为SVG SVG&#xff08;可缩放矢量图形&#xff09;和PDF&#xff08;便携式文档格式&#xff09;是两种常见且广泛使用的文件格式。SVG是…...

ComfyUI 安装教程:macOS 和 Linux 统一步骤

本教程将详细介绍如何在 macOS 和 Linux 上安装 ComfyUI。我们将从 安装 Anaconda 开始&#xff0c;到安装 PyTorch 和 ComfyUI&#xff0c;最后提供一些常见问题的解决方法。 macOS和linux安装步骤很相似 可以按照1️⃣安装anaconda2️⃣安装python3️⃣torch4️⃣comfyui Co…...

360手机刷机 360手机解Bootloader 360手机ROOT

360手机刷机 360手机解Bootloader 360手机ROOT 问&#xff1a;360手机已停产&#xff0c;现在和以后&#xff0c;能刷机吗&#xff1f; 答&#xff1a;360手机&#xff0c;是肯定能刷机的 360手机资源下载网站 360手机-360手机刷机RootTwrp 360os.top 360rom.github.io 一、…...

t113-qt

修改QT配置: # # qmake configuration for building with arm-linux-gnueabi-g ## MAKEFILE_GENERATOR UNIX # CONFIG incremental # QMAKE_INCREMENTAL_STYLE sublib# include(../common/linux.conf) # include(../common/gcc-base-unix.conf) # inc…...

【真一键部署脚本】——一键部署deepseek

目录 deepseek一键部署脚本说明 0 必要前提 1 使用方法 1.1 使用默认安装配置 1.1 .1 使用其它ds模型 1.2 使用自定义安装 2 附录&#xff1a;deepseek模型手动下载 3 脚本下载地址 deepseek一键部署脚本说明 0 必要前提 linux环境 python>3.10 1 使用方法 1.1 …...

【AI 语音】实时语音交互优化全解析:从 RTC 技术到双讲处理

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

pytest-xdist 进行多进程并发测试

在自动化测试中&#xff0c;运行时间过长往往是令人头疼的问题。你是否遇到过执行 Pytest 测试用例时&#xff0c;整个测试流程缓慢得让人抓狂&#xff1f;别担心&#xff0c;pytest-xdist 正是解决这一问题的利器&#xff01;它支持多进程并发执行&#xff0c;能够显著加快测试…...

【Android】版本和API对应关系表

目录 版本和API对应关系表 不积跬步&#xff0c;无以至千里&#xff1b;不积小流&#xff0c;无以成江海。要沉下心来&#xff0c;诗和远方的路费真的很贵&#xff01; 版本和API对应关系表 版本名版本号名称APIAndroid 1616.0W36Android 1515.0V35Android 1414.0U34Android 1…...

通过acme生成与续签ssl证书,并部署到nginx

通过acme生成与续签ssl证书&#xff0c;并部署到nginx 介绍 官方介绍&#xff1a; acme.sh 实现了 acme 协议&#xff0c;可以从 ZeroSSL&#xff0c;Lets Encrypt 等 CA 生成免费的证书。 安装 acme.sh 1. curl方式 curl https://get.acme.sh | sh -s emailmyexample.com…...

mysql系统库介绍,数据字典(介绍,存储方式,常见表,访问权限),系统表(介绍,不同功能的表)

目录 mysql系统库 介绍 数据字典 介绍 不同版本下的存储方式 常见的数据字典表 访问权限 系统表 介绍 权限授予系统表 对象信息系统表 服务器端帮助系统表 时区系统表 mysql系统库 介绍 MySQL 默认创建 的特殊数据库&#xff0c;主要用于存储服务器运行时所需的信…...

spring 学习(工厂方式 实例化对象(静态工厂,实例化工厂,实现factorybean 规范))

目录 前言 第一种&#xff1a;静态工厂方式实例化对象 静态工厂的特点 demo(案例&#xff09; 第二种&#xff1a;实例工厂的方式 实例工厂和静态工厂的区别 demo(案例&#xff09; 第三种&#xff1a;实现FactoryBean规范的方式 demo(案例&#xff09; 前言 spring 实…...

MarkupLM:用于视觉丰富文档理解的文本和标记语言预训练

摘要 结合文本、布局和图像的多模态预训练在视觉丰富文档理解&#xff08;VRDU&#xff09;领域取得了显著进展&#xff0c;尤其是对于固定布局文档&#xff08;如扫描文档图像&#xff09;。然而&#xff0c;仍然有大量的数字文档&#xff0c;其布局信息不是固定的&#xff0…...

讯飞智作 AI 配音技术浅析(三):自然语言处理

自然语言处理&#xff08;NLP&#xff09;是讯飞智作 AI 配音技术的重要组成部分&#xff0c;负责将输入的文本转换为机器可理解的格式&#xff0c;并提取出文本的语义和情感信息&#xff0c;以便生成自然、富有表现力的语音。 一、基本原理 讯飞智作 AI 配音的 NLP 技术主要包…...

kafka服务端之日志存储

文章目录 日志布局日志索引日志清理日志删除基于时间基千日志大小基于日志起始偏移量 日志压缩总结 日志布局 Ka饮a 中的消息是以主题为基本单位进行归类的&#xff0c; 各个主题在逻辑 上相互独立。 每个主题又可以分为一个或多个分区&#xff0c; 分区的数量可以在主题创建的…...

软件工程的熵减:AI如何降低系统复杂度

软件开发的世界&#xff0c;如同一个不断膨胀的宇宙。随着功能的增加和时间的推移&#xff0c;代码库越来越庞大&#xff0c;系统复杂度也随之水涨船高。代码膨胀、维护困难、开发效率低下等问题困扰着无数开发者。这不禁让人联想到物理学中的“熵增”原理——一个孤立系统的熵…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...