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

最大流-Ford-Fulkerson增广路径算法py/cpp/Java三语言实现

最大流-Ford-Fulkerson增广路径算法py/cpp/Java三语言实现

    • 一、网络流问题与相关概念
      • 1.1 网络流问题定义
      • 1.2 关键概念
    • 二、Ford-Fulkerson算法原理
      • 2.1 核心思想
      • 2.2 算法步骤
    • 三、Ford-Fulkerson算法的代码实现
      • 3.1 Python实现
      • 3.2 C++实现
      • 3.3 Java实现
    • 四、Ford-Fulkerson算法的时间复杂度与空间复杂度分析
      • 4.1 时间复杂度
      • 4.2 空间复杂度
    • 五、Ford-Fulkerson算法的应用场景
      • 5.1 资源分配
      • 5.2 通信网络
      • 5.3 交通运输
      • 5.4 任务调度与工作流管理
    • 总结

网络流问题是一类具有重要实际意义的问题,广泛应用于资源分配、通信网络、交通运输等多个领域。Ford-Fulkerson算法作为求解网络流问题的经典算法之一,基于增广路径的思想,能够有效地找到网络中的最大流。本文我将深入剖析Ford-Fulkerson算法的原理、详细介绍其实现流程,并分别使用Python、C++和Java三种语言进行代码实现,带你全面掌握这一重要算法。

一、网络流问题与相关概念

1.1 网络流问题定义

网络流问题可以抽象为一个有向图 (G=(V, E)),其中 (V) 是顶点集合,(E) 是边集合。在这个图中,存在一个源点 (s) 和一个汇点 (t),每条边 ((u, v) \in E) 都有一个非负的容量 (c(u, v)),表示这条边能够传输的最大流量。网络流问题的目标是在满足流量守恒(除源点和汇点外,每个顶点的流入流量等于流出流量)的前提下,找到从源点 (s) 到汇点 (t) 的最大流量 。

1.2 关键概念

  • 流量:对于边 ((u, v)),其流量 (f(u, v)) 表示实际通过这条边的流量,满足 (0 \leq f(u, v) \leq c(u, v))。同时,对于除源点 (s) 和汇点 (t) 之外的任意顶点 (v),流入 (v) 的总流量等于流出 (v) 的总流量,即 (\sum_{u:(u,v)\in E} f(u, v) = \sum_{w:(v,w)\in E} f(v, w))。
  • 残留网络:对于给定的网络 (G) 和流量 (f),残留网络 (G_f) 由原网络中的顶点和一些残留边组成。残留边 ((u, v)) 的容量 (c_f(u, v)) 定义为:
    • 若 ((u, v) \in E),则 (c_f(u, v) = c(u, v) - f(u, v)),表示这条边还能容纳的额外流量。
    • 若 ((v, u) \in E),则 (c_f(u, v) = f(v, u)),表示可以通过反向边撤销已经流过的流量。
    • 若 ((u, v) \notin E) 且 ((v, u) \notin E),则 (c_f(u, v) = 0)。
  • 增广路径:在残留网络 (G_f) 中,从源点 (s) 到汇点 (t) 的一条简单路径称为增广路径。沿着增广路径可以增加从源点到汇点的流量,增广路径上所有残留边的最小容量就是可以增加的流量值 。

二、Ford-Fulkerson算法原理

2.1 核心思想

Ford-Fulkerson算法基于贪心策略和增广路径的概念。算法的核心思想是从初始流量为 0 的状态开始,不断在残留网络中寻找增广路径。一旦找到增广路径,就沿着这条路径增加流量,更新残留网络。重复这个过程,直到在残留网络中不存在从源点到汇点的增广路径为止。此时,当前的流量就是网络的最大流。

2.2 算法步骤

  1. 初始化:创建原始网络 (G),设定源点 (s) 和汇点 (t),将所有边的流量 (f(u, v)) 初始化为 0,构建初始的残留网络 (G_f)。
  2. 寻找增广路径:在残留网络 (G_f) 中使用深度优先搜索(DFS)或广度优先搜索(BFS)等方法寻找从源点 (s) 到汇点 (t) 的增广路径。如果找到了增广路径,则进入步骤 3;如果找不到增广路径,说明已经达到最大流,算法结束,返回当前的流量作为最大流。
  3. 增加流量:计算增广路径上所有残留边的最小容量 (\delta),(\delta) 就是可以沿着增广路径增加的流量值。然后沿着增广路径更新原始网络中边的流量 (f(u, v)) 和残留网络中边的容量 (c_f(u, v))。对于增广路径上的边 ((u, v)):
    • 在原始网络中,若 ((u, v)) 是正向边,则 (f(u, v) = f(u, v) + \delta);若 ((u, v)) 是反向边,则 (f(u, v) = f(u, v) - \delta)。
    • 在残留网络中,更新相应边的容量 (c_f(u, v)),以反映流量的变化。
  4. 重复步骤:返回步骤 2,继续在更新后的残留网络中寻找增广路径,直到找不到增广路径为止。
    增广路径

三、Ford-Fulkerson算法的代码实现

3.1 Python实现

from collections import dequedef bfs(residual_graph, source, sink, parent):visited = [False] * len(residual_graph)queue = deque()queue.append(source)visited[source] = Truewhile queue:u = queue.popleft()for ind, val in enumerate(residual_graph[u]):if not visited[ind] and val > 0:queue.append(ind)visited[ind] = Trueparent[ind] = ureturn visited[sink]def ford_fulkerson(graph, source, sink):residual_graph = [row.copy() for row in graph]parent = [-1] * len(graph)max_flow = 0while bfs(residual_graph, source, sink, parent):path_flow = float("Inf")s = sinkwhile s != source:path_flow = min(path_flow, residual_graph[parent[s]][s])s = parent[s]max_flow += path_flowv = sinkwhile v != source:u = parent[v]residual_graph[u][v] -= path_flowresidual_graph[v][u] += path_flowv = parent[v]return max_flowgraph = [[0, 16, 13, 0, 0, 0],[0, 0, 10, 12, 0, 0],[0, 4, 0, 0, 14, 0],[0, 0, 9, 0, 0, 20],[0, 0, 0, 7, 0, 4],[0, 0, 0, 0, 0, 0]
]
source = 0
sink = 5
print(ford_fulkerson(graph, source, sink))

在上述Python代码中,bfs 函数用于在残留网络中使用广度优先搜索寻找增广路径。ford_fulkerson 函数则实现了Ford-Fulkerson算法的整体流程,包括初始化残留网络、不断寻找增广路径、增加流量并更新残留网络,直到找不到增广路径,最终返回最大流。

3.2 C++实现

#include <iostream>
#include <vector>
#include <queue>
using namespace std;bool bfs(vector<vector<int>>& residual_graph, int source, int sink, vector<int>& parent) {vector<bool> visited(residual_graph.size(), false);queue<int> q;q.push(source);visited[source] = true;while (!q.empty()) {int u = q.front();q.pop();for (int ind = 0; ind < residual_graph.size(); ind++) {if (!visited[ind] && residual_graph[u][ind] > 0) {q.push(ind);visited[ind] = true;parent[ind] = u;}}}return visited[sink];
}int ford_fulkerson(vector<vector<int>>& graph, int source, int sink) {vector<vector<int>> residual_graph = graph;vector<int> parent(graph.size(), -1);int max_flow = 0;while (bfs(residual_graph, source, sink, parent)) {int path_flow = INT_MAX;int v = sink;while (v != source) {path_flow = min(path_flow, residual_graph[parent[v]][v]);v = parent[v];}max_flow += path_flow;v = sink;while (v != source) {int u = parent[v];residual_graph[u][v] -= path_flow;residual_graph[v][u] += path_flow;v = parent[v];}}return max_flow;
}int main() {vector<vector<int>> graph = {{0, 16, 13, 0, 0, 0},{0, 0, 10, 12, 0, 0},{0, 4, 0, 0, 14, 0},{0, 0, 9, 0, 0, 20},{0, 0, 0, 7, 0, 4},{0, 0, 0, 0, 0, 0}};int source = 0;int sink = 5;cout << ford_fulkerson(graph, source, sink) << endl;return 0;
}

C++代码中,bfs 函数实现了在残留网络中使用广度优先搜索寻找增广路径的功能。ford_fulkerson 函数按照Ford-Fulkerson算法的步骤,初始化残留网络,通过不断调用 bfs 寻找增广路径,更新流量和残留网络,最终返回最大流。

3.3 Java实现

import java.util.LinkedList;
import java.util.Queue;class FordFulkerson {static boolean bfs(int[][] residualGraph, int source, int sink, int[] parent) {boolean[] visited = new boolean[residualGraph.length];Queue<Integer> queue = new LinkedList<>();queue.add(source);visited[source] = true;while (!queue.isEmpty()) {int u = queue.poll();for (int ind = 0; ind < residualGraph.length; ind++) {if (!visited[ind] && residualGraph[u][ind] > 0) {queue.add(ind);visited[ind] = true;parent[ind] = u;}}}return visited[sink];}static int fordFulkerson(int[][] graph, int source, int sink) {int[][] residualGraph = new int[graph.length][graph.length];for (int i = 0; i < graph.length; i++) {for (int j = 0; j < graph.length; j++) {residualGraph[i][j] = graph[i][j];}}int[] parent = new int[graph.length];int maxFlow = 0;while (bfs(residualGraph, source, sink, parent)) {int pathFlow = Integer.MAX_VALUE;int v = sink;while (v != source) {pathFlow = Math.min(pathFlow, residualGraph[parent[v]][v]);v = parent[v];}maxFlow += pathFlow;v = sink;while (v != source) {int u = parent[v];residualGraph[u][v] -= pathFlow;residualGraph[v][u] += pathFlow;v = parent[v];}}return maxFlow;}
}public class Main {public static void main(String[] args) {int[][] graph = {{0, 16, 13, 0, 0, 0},{0, 0, 10, 12, 0, 0},{0, 4, 0, 0, 14, 0},{0, 0, 9, 0, 0, 20},{0, 0, 0, 7, 0, 4},{0, 0, 0, 0, 0, 0}};int source = 0;int sink = 5;System.out.println(FordFulkerson.fordFulkerson(graph, source, sink));}
}

Java代码中,bfs 方法用于在残留网络中进行广度优先搜索以寻找增广路径。fordFulkerson 方法实现了Ford-Fulkerson算法的全过程,包括初始化残留网络、不断利用 bfs 寻找增广路径、更新流量和残留网络,最后返回最大流。

四、Ford-Fulkerson算法的时间复杂度与空间复杂度分析

4.1 时间复杂度

Ford-Fulkerson算法的时间复杂度取决于寻找增广路径的方法以及网络的结构。

  • 使用BFS或DFS寻找增广路径:在每次迭代中,寻找增广路径的时间复杂度为 (O(V + E)),其中 (V) 是顶点数量,(E) 是边的数量。
  • 迭代次数:算法的迭代次数取决于网络中的最大流的值 (|f^|) 和边的容量。在最坏情况下,算法可能需要进行 (|f^|) 次迭代才能找到最大流。如果边的容量都是整数,且最大流的值为 (|f^|),则算法的时间复杂度为 (O(|f^|(V + E)))。
  • 改进版本:通过使用更高效的寻找增广路径的方法(如Edmonds-Karp算法,它总是选择最短的增广路径),可以将时间复杂度改进为 (O(VE^2)),其中 (V) 是顶点数,(E) 是边数。

4.2 空间复杂度

Ford-Fulkerson算法的空间复杂度主要取决于存储网络和残留网络所需的空间:

  • 存储网络:如果使用邻接矩阵存储网络,空间复杂度为 (O(V^2));如果使用邻接表存储网络,空间复杂度为 (O(V + E))。
  • 存储残留网络:同样,使用邻接矩阵存储残留网络时空间复杂度为 (O(V^2)),使用邻接表时为 (O(V + E))。此外,还需要一些额外的空间用于存储搜索过程中的辅助数据(如访问标记、路径信息等),但这些辅助数据的空间复杂度相对较小。因此,在使用邻接表存储时,算法的空间复杂度为 (O(V + E)) 。

五、Ford-Fulkerson算法的应用场景

5.1 资源分配

在资源分配问题中,可以将资源的提供者看作源点,资源的需求者看作汇点,资源的传输路径看作边,边的容量表示路径能够传输的资源量上限。通过Ford-Fulkerson算法可以找到一种最优的资源分配方案,使得从资源提供者到需求者的资源传输总量最大,从而实现资源的合理分配 。

5.2 通信网络

在通信网络中,数据从源节点传输到目标节点,网络中的链路可以看作边,链路的带宽可以看作边的容量。使用Ford-Fulkerson算法可以计算出在给定网络拓扑和链路带宽的情况下,从源节点到目标节点的最大数据传输量,帮助网络管理员优化网络资源,提高网络的传输效率和可靠性。

5.3 交通运输

在城市交通系统中,道路可以看作边,道路的通行能力可以看作边的容量,起点和终点可以分别看作源点和汇点。通过Ford-Fulkerson算法可以分析城市交通网络的最大通行流量,为交通规划和拥堵管理提供决策依据,例如确定需要拓宽哪些道路或者调整交通流量的分配策略 。

5.4 任务调度与工作流管理

在一些任务调度系统中,任务之间可能存在依赖关系和资源限制。可以将任务看作顶点,任务之间的依赖关系和资源传输关系看作边,边的容量表示资源的限制或任务执行的先后顺序约束。Ford-Fulkerson算法可以用于确定在满足所有约束条件下,能够完成的最大任务数量或者最优的任务执行顺序,提高任务调度的效率和资源利用率。

总结

本文我从网络流基础概念出发,逐步深入讲解了Ford-Fulkerson算法的原理、多种语言实现方式,分析了其时间与空间复杂度,并探讨了丰富的实际应用场景。希望通过这些内容,你能够全面理解该算法的理论与实践价值。

That’s all, thanks for reading!
觉得有用就点个赞、收进收藏夹吧!关注我,获取更多干货~

相关文章:

最大流-Ford-Fulkerson增广路径算法py/cpp/Java三语言实现

最大流-Ford-Fulkerson增广路径算法py/cpp/Java三语言实现 一、网络流问题与相关概念1.1 网络流问题定义1.2 关键概念 二、Ford-Fulkerson算法原理2.1 核心思想2.2 算法步骤 三、Ford-Fulkerson算法的代码实现3.1 Python实现3.2 C实现3.3 Java实现 四、Ford-Fulkerson算法的时间…...

怎么从一台电脑拷贝已安装的所有python第三方库到另一台

要将Python库从一台电脑拷贝到另一台&#xff0c;可以采用以下方法&#xff1a; 方法一&#xff1a;使用pip命令导出和安装依赖 如果目标电脑在线&#xff0c;且python与pip命令可以正常使用 在源电脑上&#xff0c;打开命令行&#xff0c;执行以下命令导出所有依赖库到requ…...

【测试】Bug和用例

软件测试贯穿于软件的整个⽣命周期 软件测试的⽣命周期是指测试流程&#xff0c;这个流程是按照⼀定顺序执⾏的⼀系列特定的步骤&#xff0c;去保证产品质量符合需求。在软件测试⽣命周期流程中&#xff0c;每个活动都按照计划的系统的执⾏。每个阶段有不同的⽬标和交付产物 Bu…...

缓存穿透、缓存击穿、缓存雪崩目前记录(纯日记)

今天学了学这三个知识&#xff0c;这命名真是有点东西。 1.先说在命名方面与其余两个内容能明显区分开的缓存雪崩&#xff0c;简单来讲&#xff1a; 缓存雪崩就是缓存宕机了&#xff0c;也甭管咋宕机了&#xff0c;反正就是某一时刻&#xff0c;缓存用不了了。 那咋办&#…...

鸿蒙OS的5.0.1.120版本体验怎么样?

点击上方关注 “终端研发部” 设为“星标”&#xff0c;和你一起掌握更多数据库知识 越来越是好用了&#xff0c;之前是凑合能用&#xff0c;现在是大多能用。 我朋友的mate30PRO和PuraX一起用&#xff0c;新系统确实满足我90%以上的需求 一个系统适配一款机型&#xff0c;是要…...

使用ssh-audit扫描ssh过期加密算法配置

使用ssh-audit扫描ssh过期加密算法配置 安装检查ssh的加密算法配置修改ssh的加密算法配置 安装 # pip3安装ssh-audit pip3 instal ssh-audit检查ssh的加密算法配置 # 检查ssh的配置 ssh-audit 192.168.50.149修改ssh的加密算法配置 # 查看ssh加密配置文件是否存在 ls /etc/c…...

前端工程化 Source Map(源码映射)详解

我们来深入讲解前端 Source Map&#xff08;源码映射&#xff09;&#xff0c;围绕以下结构展开&#xff1a; 一、为什么要用 Source Map&#xff1f;&#xff08;Why&#xff09; 背景问题&#xff1a; 在前端构建中&#xff0c;源代码通常会被压缩&#xff08;minify&#…...

2025.05.28-华为暑期实习第二题-200分

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 02. A先生的旅游路径规划 问题描述 A先生正在为即将到来的假期规划一次城市旅游。这座城市有 n n n...

Java+Playwright自动化-2-环境准备与搭建-基于Maven

1.简介 上一章中已经讲如何通过引入jar包来搭建JavaPlaywright自动化测试环境&#xff0c;这一种是比较老的方法&#xff0c;说白了就是过时的老古董&#xff0c;但是我们必须了解和知道&#xff0c;其实maven搭建无非也就是下载引入相关的jar包&#xff0c;只不过相比之下是简…...

由sigmod权重曲线存在锯齿的探索

深度学习的知识点&#xff0c;一般按照执行流程&#xff0c;有 网络层类型&#xff0c;归一化&#xff0c;激活函数&#xff0c;学习率&#xff0c;损失函数&#xff0c;优化器。如果是研究生上课学的应该系统一点&#xff0c;自学的话知识点一开始有点乱。 一、激活函数Sigmod…...

二、OpenCV图像处理-图像处理

目录 1、连通性 2、形态学操作 2.1腐蚀和膨胀 2.2开闭运算 2.3礼帽和黑帽 2.4总结 3、图像平滑 3.1图像噪声 3.2均值滤波 3.3高斯滤波 3.4中值滤波 3.5总结 4、直方图 4.1直方图的原理与显示 4.2掩膜的应用 4.3直方图均衡化 4.4自适应均衡化 4.5总结 5、边缘…...

UPS的工作原理和UPS系统中旁路的作用

UPS&#xff08;不间断电源&#xff09;根据工作原理和适用场景的不同&#xff0c;主要分为以下三种类型&#xff0c;每种类型的特点和适用场景如下&#xff1a; 1. 后备式UPS&#xff08;Offline/Standby UPS&#xff09; 工作原理&#xff1a; 正常供电时&#xff0c;负载直接…...

麒麟系统 Linux(aarch64处理器)系统java项目接入海康SDK问题

1. 麒麟系统部署海康摄像头时的 JNA 链接错误&#xff0c; 海康提供的jna sdk版本太低&#xff0c;需升级版本4.5及以上&#xff0c;把集成的Structure 替换成以下类 public class SDK_Structure extends Structure {protected List<String> getFieldOrder() {List<St…...

深入理解数组索引:原理、应用与优化

在编程中&#xff0c;数组是一种最基本且广泛使用的数据结构。而数组索引则是访问数组元素的关键机制。本文将深入探讨数组索引的原理、应用以及优化方法&#xff0c;帮助读者更好地理解和使用数组索引。 一、数组索引的基本原理 数组是一种线性数据结构&#xff0c;它将一组…...

【洛谷P9303题解】AC- [CCC 2023 J5] CCC Word Hunt

在CCC单词搜索游戏中&#xff0c;单词隐藏在一个字母网格中。目标是确定给定单词在网格中隐藏的次数。单词可以以直线或直角的方式排列。以下是详细的解题思路及代码实现&#xff1a; 传送门&#xff1a; https://www.luogu.com.cn/problem/P9303 解题思路 输入读取与初始化&…...

Python图片格式批量转换器教程

&#x1f4da; 前言 编程基础第一期《11-30》-- 在图像处理工作中&#xff0c;我们经常需要将大量图片从一种格式转换为另一种格式。本教程将介绍如何使用Python的Pillow库开发一个简单但功能强大的图片格式批量转换器&#xff0c;帮助你高效处理图片格式转换任务。 目录 &…...

从公开到私密:重新思考 Web3 的数据安全

去中心化存储是 Web3 的基石之一&#xff0c;使用户和应用能够在无需依赖中心化服务商的情况下存储数据。但自由也带来了一个重大挑战&#xff1a;数据安全。在一个无许可的世界中&#xff0c;如何确保用户文档、游戏资产或 AI 数据集等敏感内容是私密的、可控访问的&#xff0…...

计算机网络常见体系结构、分层必要性、分层设计思想以及专用术语介绍

计算机网络体系结构 从本此开始&#xff0c;我们就要开始介绍有关计算机网络体系结构的知识了。内容包括&#xff1a; 常见的计算机网络体系结构 计算机网络体系结构分层的必要性 计算机网络体系结构的设计思想 举例说明及专用术语 计算机网络体系结构是计算机网络课程中…...

接口自动化测试用例的编写方法

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 phpunit 接口自动化测试系列 Post接口自动化测试用例 Post方式的接口是上传接口&#xff0c;需要对接口头部进行封装&#xff0c;所以没有办法在浏览器下直接调…...

解决Docker存储空间不足问题

虚拟机磁盘扩展实战&#xff1a;解决Docker存储空间不足问题 问题背景 在虚拟机中运行的Linux系统上&#xff0c;Docker服务因根分区空间不足而无法正常运行。初始状态如下&#xff1a; [rootlocalhost ~]# df -h / 文件系统 容量 已用 可用 已用% 挂载点…...

基于SpringBoot的商家销售管理网站的设计与实现

湖南软件职业技术大学 本科毕业设计(论文) 设计(论文)题目 基于SpringBoot的商家销售管理网站的设计与实现 学生姓名 学生学号 所在学院 专业班级 校内指导教师 企业指导教师 毕业设计(论文)真实性承诺及声明 学生对毕业设计(论文)真实性承诺 本人郑重声明:所提交的毕…...

【数据集】高分辨率(1 km)月尺度中国气候(降水+最高/低温)数据集(1952–2019)

目录 数据描述🧩 输入数据⚙️ 数据处理流程一、ChinaClim_baseline(基准气候表面)二、ChinaClim_time-series(时序气候数据)📊 评估与验证方法📤 数据下载月最低气温月最高气温python绘制代码参考论文《1 km monthly precipitation and temperatures dataset for Ch…...

word中表格拉不动以及插入图片有间距

1、word中表格插入图片始终有间隙&#xff0c;怎么调表格高度和宽度都消除不了间隙&#xff0c;如下所示&#xff1a; 可以在表布局—单元格边距—修改上下左右边距为0即可 2、经过上述调整后左右没有间隔了&#xff0c;但图片上下有间隔&#xff0c;直觉是行距问题&#xff0c…...

JavaSE:面向对象进阶之接口(Interface)

JavaSE 面向对象进阶之接口&#xff08;Interface&#xff09; 一、接口的核心概念 接口是一种完全抽象的类型&#xff0c;它定义了一组方法签名&#xff08;契约&#xff09;&#xff0c;但不包含方法实现。接口的核心作用是&#xff1a; 规范行为&#xff1a;强制实现类遵…...

【Java学习笔记】接口

接口 应用场景引出 一、接口的介绍 1. 接口的基本结构 interface 接口名{属性抽象方法 }引出关键字&#xff1a;implements 2. 子类实现接口 class a implements 接口名{}3. 接口中的属性说明&#xff1a;属性默认是public static final修饰的 &#xff08;1&#xff09;f…...

代码随想录打卡|Day50 图论(拓扑排序精讲 、dijkstra(朴素版)精讲 )

图论part08 拓扑排序精讲 代码随想录讲解链接 题目链接 思路 在这个题目之中&#xff0c;个别文件的处理依赖于别的文件&#xff0c;因此&#xff0c;文件的处理顺序十分重要。我们用图来表示文件的处理顺序&#xff0c;文件s指向文件t&#xff0c;则说明如果要正确的处理文…...

Wan2.1 图生视频模型内部协作流程

Wan2.1 图生视频模型内部协作流程 flyfish Wan2.1作为一个多模态生成模型&#xff0c;其内部涉及多个子模型的协同工作。 1. 模型架构概览 Wan2.1主要由以下核心组件构成&#xff1a; 文本编码器&#xff1a;基于T5的文本理解模型&#xff0c;将prompt转换为语义向量图像编…...

SI24R05国产低功耗2.4GHz+125K低频唤醒SoC人员定位/畜牧业牛羊定位/资产管理定位方案芯片

目录 SI24R05简介功能框图 主要特性开发工具方案特性 SI24R05简介 Si24R05 是一款高度集成的低功耗 SOC 芯片&#xff0c;具有低功耗、Low Pin Count、 宽电压工作范围&#xff0c;集成了 13/14/15/16 位精度的 ADC、LVD、UART、SPI、I2C、TIMER、WUP、IWDG、RTC、无线收发器、…...

qt QAxWidget

QAxWidget 是 Qt 中用于嵌入 ActiveX 控件或 COM 对象的类&#xff0c;主要用于 Windows 平台。以下是其使用方法的详细步骤和示例&#xff1a; 1. 环境配置 在 .pro 文件中添加 axcontainer 模块&#xff1a; QT axcontainer2. 基本使用 创建控件实例 #include <QAxW…...

机器学习与深度学习04-逻辑回归02

目录 前文回顾6.正则化在逻辑回归中的作用7.特征工程是什么8.逻辑回归的预测结果如何9.什么是ROC曲线和AUC值10.如何处理类不平衡问题11.什么是交叉验证 前文回顾 上一篇文章地址&#xff1a;链接 6.正则化在逻辑回归中的作用 逻辑回归中&#xff0c;正则化是一种用于控制模…...