算法模板(8):网络流(1):最大流

news2024/9/27 23:33:17

算法模板(8):网络流(1):最大流

网络流基本概念

  • 基本概念

    • 流网络,不考虑反向边
    • 可行流,不考虑反向边
      • 两个条件(根据《算法导论》,这两个条件可以看作可行流的充要条件):容量限制( 0 ≤ f ( u , v ) ≤ C ( u , v ) 0 \le f(u,v) \le C(u,v) 0f(u,v)C(u,v),流量守恒(除了源点和汇点,每个节点的流入和流出相等)
      • 可行流的流量:从源点流出的流量 - 流入源点的流量(多数时候为流入源点的流量为0)
      • 最大流是指最大可行流
    • 残留网络(一个可行流对应一个残留网络)
      • 原网络里面,不需要考虑反向边;只有在残留网络里面才考虑反向边
      • 考虑反向边,残留网络的可行流 f’ + 原图的可行流f = 原流网络的另一个可行流
        (1) |f’ + f| = |f’| + |f|(这个加号的意思是,如果原图和新图的边的方向相同,那么就把新图的边的流量加上原图中;如果方向相反,就把原图中的边的流量)
        (2) |f’| 可能是负数
      • 残留网络的点集和原流网络的点集相等,边集分为两部分
        • 正向边:容量定义为 c ′ ( u , v ) = c ( u , v ) − f ( u , v ) c'(u,v) = c(u,v)-f(u,v) c(u,v)=c(u,v)f(u,v)
        • 反向边:容量定义为 c ′ ( u , v ) = f ( v , u ) c'(u,v)=f(v,u) c(u,v)=f(v,u). (原图中的边是 v → u v \rightarrow u vu
      • ∣ f ′ ∣ = 0 |f'| = 0 f=0 时,现在的可行流不一定是最大流。不过当前可行流是最大流的时候, ∣ f ′ ∣ |f'| f 必然是0
    image-20210518223732735
    • 增广路径:在残留网络里面,从源点出发,沿着大于0的边走,如果能走到汇点的话,那么该路径就是一条增广路径。如果残留网络不存在增广路的话,那么流网络当前的可行流一定是最大流。
      • 割的定义:把点集划分成两个子集,并且保证源点和汇点分别属于两个子集。需要注意的是,子集中的点允许不连通.
      • 割的容量:就是横跨两个集合,从 S S S T T T 的边的容量之和 c ( s , t ) = ∑ u ∈ S ∑ v ∈ T c ( u , v ) c(s,t) = \sum\limits_{u\in S}\sum\limits_{v \in T}c(u,v) c(s,t)=uSvTc(u,v).
        • 不考虑反向边,“最小割”是指容量最小的割。
      • 割的流量: f ( s , t ) = ∑ u ∈ S ∑ v ∈ T f ( u , v ) − ∑ u ∈ T ∑ v ∈ S f ( u , v ) f(s,t) = \sum\limits_{u\in S}\sum\limits_{v \in T}f(u,v) - \sum\limits_{u\in T}\sum\limits_{v \in S}f(u,v) f(s,t)=uSvTf(u,v)uTvSf(u,v)
        • 考虑反向边, f ( S , T ) < = c ( S , T ) f(S, T) <= c(S, T) f(S,T)<=c(S,T)
      • 性质,对于任意两个集合 X , Y X, Y X,Y
        • f ( X , Y ) = ∑ u ∈ X ∑ v ∈ Y f ( u , v ) − ∑ u ∈ X ∑ v ∈ Y f ( v , u ) f(X,Y) = \sum\limits_{u \in X}\sum\limits_{v \in Y}f(u,v) - \sum\limits_{u \in X}\sum\limits_{v \in Y}f(v,u) f(X,Y)=uXvYf(u,v)uXvYf(v,u)
        • f ( X , Y ) = − f ( Y , X ) f(X,Y) = -f(Y, X) f(X,Y)=f(Y,X)
        • f ( Z , X ∪ Y ) = f ( Z , X ) + f ( Z , Y ) f(Z,X\cup Y) = f(Z, X) + f(Z,Y) f(Z,XY)=f(Z,X)+f(Z,Y),其中 X ∩ Y = ∅ X \cap Y = \empty XY=
        • f ( X , X ) = 0 f(X,X) = 0 f(X,X)=0
        • f ( X ∪ Y , Z ) = f ( X , Z ) + f ( Y , Z ) f(X\cup Y,Z) = f(X, Z) + f(Y,Z) f(XY,Z)=f(X,Z)+f(Y,Z),其中 X ∩ Y = ∅ X \cap Y = \empty XY=
      • 对于任意可行流f,任意割 [ S , T ] [S, T] [S,T] ∣ f ∣ = f ( S , T ) |f| = f(S, T) f=f(S,T)
      • 对于任意可行流f,任意割 [ S , T ] [S, T] [S,T] ∣ f ∣ < = c ( S , T ) |f| <= c(S, T) f<=c(S,T)
      • 最大流最小割定理(三个条件相互等价)
        • 可行流f是最大流
        • 可行流f的残留网络中不存在增广路
        • 存在某个割 [ S , T ] [S, T] [S,T] ∣ f ∣ = c ( S , T ) |f| = c(S, T) f=c(S,T)
          • 由1推2:利用 ∣ f + f ′ ∣ = ∣ f ∣ + ∣ f ′ ∣ |f + f'| = |f| + |f'| f+f=f+f 反证
          • 由2推3:若没有增广路,我们在残留网络中,令 S S S 是从源点出发直走大于 0 的边,能够走到的所有的点集; T T T 就是剩下的点组成的点集。由此可知:我们可以构造一个割出来,对于从 S S S T T T 的边 u → v u \rightarrow v uv,我们可以让 f ( u , v ) = c ( u , v ) f(u,v) = c(u,v) f(u,v)=c(u,v). 对于从 T T T S S S 的边 u → v u\rightarrow v uv,我们可以令 f ( u , v ) = 0 f(u,v) = 0 f(u,v)=0.。而 ∣ f ∣ = f ( S , T ) = ∑ u ∈ S ∑ v ∈ T f ( u , v ) − ∑ u ∈ T ∑ v ∈ S f ( u , v ) = ∑ u ∈ S ∑ v ∈ S c ( u , v ) = c ( S , T ) . |f| = f(S, T) = \sum\limits_{u\in S}\sum\limits_{v \in T}f(u,v) - \sum\limits_{u\in T}\sum\limits_{v \in S}f(u,v) = \sum\limits_{u\in S}\sum\limits_{v\in S}c(u,v) = c(S,T). f=f(S,T)=uSvTf(u,v)uTvSf(u,v)=uSvSc(u,v)=c(S,T).
          • 由3推1:已证 f ( S , T ) = ∣ f ∣ ≤ c ( S , T ) f(S,T) = |f| \le c(S,T) f(S,T)=fc(S,T),即 最大流 ≤ 最小割 最大流 \le 最小割 最大流最小割。而 最大流 ≥ ∣ f ∣ = c ( S , T ) 最大流 \ge |f| = c(S,T) 最大流f=c(S,T)(某一个割的容量)。由此说明 最大流 ≥ 最小割 最大流 \ge 最小割 最大流最小割。因此最大流等于最小割。
    • 算法
      • EK O ( n m 2 ) O(nm^2) O(nm2)
      • Dinic O ( n 2 m ) O(n^2m) O(n2m)
      • 网络流的时间复杂度的上界是很宽松的,实际上多数达不到。
    • 应用
      • 二分图
        • 二分图匹配
        • 二分图多重匹配
      • 上下界网络流
        • 无源汇上下界可行流
        • 有源汇上下界最大流
        • 有源汇上下界最小流
      • 多源汇最大流

最大流之算法模板

2171. EK求最大流

  • 给定一个包含 n n n 个点 m m m 条边的有向图,并给定每条边的容量,边的容量非负。图中可能存在重边和自环。求从点 S S S 到点 T T T 的最大流 ( n ≤ 1000 , m ≤ 10000 , 0 ≤ m ≤ 100000 , S ≠ T n \le 1000,m \le 10000, 0 \le m \le 100000,S \ne T n1000,m10000,0m100000,S=T)
#include<bits/stdc++.h>
using namespace std;
const int N = 1010, M = 20010, INF = 1e8;
int n, m, S, T;
int h[N], f[M], e[M], ne[M], idx;
//d 到当前节点的最小流量,pre 存从哪个边转移过来.
int q[N], d[N], pre[N];
bool st[N];

void add(int a, int b, int c)
{
    e[idx] = b, ne[idx] = h[a], f[idx] = c, h[a] = idx++;
    e[idx] = a, ne[idx] = h[b], f[idx] = 0, h[b] = idx++;
}

bool bfs()
{
    int hh = 0, tt = 0;
    memset(st, false, sizeof st);
    q[0] = S, st[S] = true, d[S] = INF;
    while(hh <= tt){
        int u = q[hh++];
        for(int i = h[u]; i != -1; i = ne[i]){
            int v = e[i];
            if(st[v] || f[i] == 0) continue;
            st[v] = true;
            d[v] = min(d[u], f[i]);
            pre[v] = i;
            if(v == T) return true;
            q[++tt] = v;
        }
    }
    return false;
}
int EK()
{
    int res = 0;
    while(bfs()){
        res += d[T];
        for(int i = T; i != S; i = e[pre[i] ^ 1]){
            f[pre[i]] -= d[T], f[pre[i] ^ 1] += d[T];
        }
    }
    return res;
}
int main()
{
    scanf("%d%d%d%d", &n, &m, &S, &T);
    memset(h, -1, sizeof h);
    while(m--){
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
        add(a, b, c);
    }
    printf("%d\n", EK());
    return 0;
}

2172. Dinic/ISAP求最大流

  • 给定一个包含 n n n 个点 m m m 条边的有向图,并给定每条边的容量,边的容量非负。图中可能存在重边和自环。求从点 S S S 到点 T T T 的最大流 ( n ≤ 10000 , m ≤ 100000 , 0 ≤ c ≤ 10000 , S ≠ T n \le 10000, m \le 100000, 0 \le c \le 10000,S \ne T n10000,m100000,0c10000,S=T)
  • Dinic 算法的优化的地方在于,建立一个分层图(防止环),把能够增广的地方全部增广;第二个优化是当前弧优化,相当于优先“榨干”一条边,“榨干”这条边后再“榨干”下一条边。
#include<bits/stdc++.h>
using namespace std;
const int N = 10100, M = 200010, INF = 1e8;
int n, m, S, T;
int h[N], f[M], e[M], ne[M], idx;
//d 到当前节点的最小流量,pre 存从哪个边转移过来.
int q[N], d[N], cur[N];

void add(int a, int b, int c)
{
    e[idx] = b, ne[idx] = h[a], f[idx] = c, h[a] = idx++;
    e[idx] = a, ne[idx] = h[b], f[idx] = 0, h[b] = idx++;
}

bool bfs()
{
    //按照所有点到原点的距离建立分层图,并且更新当前弧(即优先榨取的边)
    memset(d, -1, sizeof d);
    int hh = 0, tt = 0;
    q[0] = S, d[S] = 0, cur[S] = h[S];
    while(hh <= tt){
        int u = q[hh++];
        for(int i = h[u]; i != -1; i = ne[i])
        {
            int v = e[i];
            if(d[v] == -1 && f[i])
            {
                d[v] = d[u] + 1;
                cur[v] = h[v];
                if(v == T) return true;
                q[++tt] = v;
            }
        }
    }
    return false;
}

int find(int u, int limit)
{
    if(u == T) return limit;
    int flow = 0;
    for(int i = cur[u]; i != -1 && flow < limit; i = ne[i])
    {
        cur[u] = i; //当前弧优化
        int v = e[i];
        if(d[v] == d[u] + 1 && f[i])
        {
            int t = find(v, min(f[i], limit - flow));
            if(!t) d[v] = -1;
            f[i] -= t, f[i ^ 1] += t, flow += t;
        }
    }
    return flow;
}

int dinic()
{
    int res = 0, flow;
    while(bfs()) while(flow = find(S, INF)) res += flow;
    return res;
}

int main()
{
    scanf("%d%d%d%d", &n, &m, &S, &T);
    memset(h, -1, sizeof h);
    while(m--)
    {
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
        add(a, b, c);
    }
    printf("%d\n", dinic());
    return 0;
}

最大流之二分图匹配

2175. 飞行员配对方案问题 - AcWing题库

  • 题意:第 1 1 1 行有 2 2 2 个正整数 m m m n n n m m m 是外籍飞行员数; n n n 是皇家空军的飞行员总数。外籍飞行员编号为 1 ∼ m 1∼m 1m;英国飞行员编号为 m + 1 ∼ n m+1∼n m+1n。接下来每行有 2 2 2 个正整数 i i i j j j,表示外籍飞行员 i i i 可以和英国飞行员 j j j 配合。文件最后以 2 2 2 − 1 −1 1 结束。问最大匹配数以及匹配方案。
  • 一个问题和一个网络流问题等价,意味着问题的解集与可行流集合是一一对应的。一个流是否是可行流,判断:(1)流量是否守恒;(2)是否超出容量。
  • D i n i c Dinic Dinic 算法求二分匹配最大数,复杂度是 O ( m n ) O(m\sqrt n) O(mn ).
#include<bits/stdc++.h>
using namespace std;
const int N = 110, M = 5210, INF = 1e8;
int h[N], e[M], ne[M], f[M], idx;

int q[N], cur[N], d[N];
int n, m, S, T;

//略去 dinic 的模板,只保留建图模板.

int main()
{
    memset(h, -1, sizeof h);
    scanf("%d%d", &m, &n);
    S = n + 1, T = n + 2;
    int a, b;
    while(cin >> a >> b, a != -1)
    {
        add(a, b, 1);
    }

    for(int i = 1; i <= m; i++) add(S, i, 1);
    for(int i = m + 1; i <= n; i++) add(i, T, 1);

    printf("%d\n", dinic());

    for(int i = 0; e[i ^ 1] != S; i += 2)
    {
        if(f[i] == 0) printf("%d %d\n", e[i ^ 1], e[i]);
    }
}

2179. 圆桌问题 - AcWing题库

  • 题意:假设有来自 m m m 个不同单位的代表参加一次国际会议。每个单位的代表数分别为 r i ( i = 1 , 2 , … , m ) r_i(i=1,2,\dots,m) ri(i=1,2,,m)。会议餐厅共有 n n n 张餐桌,每张餐桌可容纳 c i ( i = 1 , 2 , … , n ) c_i(i=1,2,\dots,n) ci(i=1,2,,n) 个代表就餐。为了使代表们充分交流,希望从同一个单位来的代表不在同一个餐桌就餐。试设计一个算法,给出满足要求的代表就餐方案。

  • 二分图的多重匹配问题,构造一个二分图,源点连向左半部分的图,边的容量是点权;右半部分的图向汇点连边,容量也是点权;左右两部分的结点两两相连,容量为1.
    在这里插入图片描述

// 省去 dinic 模板部分,只保留建图
int main()
{
    memset(h, -1, sizeof h);
    scanf("%d%d", &m, &n);
    S = 0, T = n + m + 1;
    int tot = 0;
    for(int i = 1; i <= m; i++)
    {
        int r;
        scanf("%d", &r);
        tot += r;
        add(S, i, r);
    }
    for(int i = m + 1; i <= m + n; i++)
    {
        int c;
        scanf("%d", &c);
        add(i, T, c);
    }
    for(int i = 1; i <= m; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            add(i, j + m, 1);
        }
    }
    int res = dinic();
    if(res != tot) printf("0\n");
    else
    {
        printf("1\n");
        for(int u = 1; u <= m; u++)
        {
            for(int i = h[u]; i != -1; i = ne[i])
            {
                if(m + 1 <= e[i] && e[i] <= m + n && !f[i])
                {
                    printf("%d ", e[i] - m);
                }
            }
            printf("\n");
        }
    }
    return 0;
}

最大流之上下界可行流

2188. 无源汇上下界可行流 - AcWing题库

  • 给定一个包含 n n n 个点 m m m 条边的有向图,每条边都有一个流量下界和流量上界。求一种可行方案使得在所有点满足流量平衡条件的前提下,所有边满足流量限制。
  • 建图方式,每条边都减去容量下界;对于每个点,计算容量下界入度之和 C i n C_{in} Cin 和下界出度之和 C o u t C_{out} Cout,若 C i n > C o u t C_{in} > C_{out} Cin>Cout,那么从源点 S S S 到该点连一条容量为 C i n − C o u t C_{in} - C_{out} CinCout 的边。因为在新图中如果不加这样的边,流量可能不守恒,减去的入流比减去的出流要多,那么把这个多减掉的东西补上去。同理,如果 C i n < C o u t C_{in} < C_{out} Cin<Cout,那么就是从当前结点向汇点连一条 C o u t − C i n C_{out} - C_{in} CoutCin 的边.
  • 当然需要满足从 S S S 发出的边需要满流,不然不满足流量守恒;同理需要满足到汇点 T T T 需要满流。不过原图中每一条边都会贡献一个入度和出度。因此在新图中, S S S 发出的边的容量一定等于汇入 T T T 的容量,加上从源点流出的流量一定等于流入汇点的流量。因此只要一个满流,另一个一定会满流。
int main()
{
    memset(h, -1, sizeof h);
    scanf("%d%d", &n, &m);
    S = 0, T = n + 1;
    
    for(int i = 1; i <= m; i++)
    {
        int a, b, c, d;
        scanf("%d%d%d%d", &a, &b, &c, &d);
        add(a, b, c, d);
        A[a] -= c, A[b] += c;
    }
    
    int tot = 0;
    
    for(int i = 1; i <= n; i++)
    {
        if(A[i] > 0) add(S, i, 0, A[i]), tot += A[i];
        else if(A[i] < 0) add(i, T, 0, -A[i]);
    }
    
    if(dinic() != tot) printf("NO\n");
    else
    {
        printf("YES\n");
        for(int i = 0; i < 2 * m; i += 2)
        {
            //注意流量要输出反向边
            printf("%d\n", f[i ^ 1] + l[i]);
        }
    }
    return 0;
}

2189. 有源汇上下界最大流 - AcWing题库

  • 题意:给定一个包含 n n n 个点 m m m 条边的有向图,每条边都有一个流量下界和流量上界。给定源点 S S S 和汇点 T T T,求源点到汇点的最大流
  • 另一种建图方式如下,对于每个点 v v v,建一条从 S S S v v v 容量是入度下界之和的边,以及一条从 v v v 指向 T T T 容量出度下界之和。然后从 原图的 t t t s s s 的一条容量为 ∞ \infty 的边,这样子可以保证所有点的流量守恒
  • 原图的任意一个可行流,都对应于新图任意一个最大流?证明没懂
    在这里插入图片描述

2190. 有源汇上下界最小流 - AcWing题库

  • 题意:给定一个包含 n n n 个点 m m m 条边的有向图,每条边都有一个流量下界和流量上界。给定源点 S S S 和汇点 T T T,求源点到汇点的最小流

最大流之多源汇最大流

最大流之关键边

最大流之最大流判定

最大流之拆点

最大流之建图实战

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mapbox实现线要素的文字标注功能

效果图 操作步骤 首先查看mapbox自己的api里面有没有&#xff0c;好像里面并没有类似于line-text的属性 然后打开mapbox studio&#xff0c;发现里面确实是有这种样式的&#xff0c;他的图层名字叫 然后我们下载下来这个样式 打开style.json文件之后&#xff0c;找到这个图…

【数据可视化】Plotly Express绘图库使用

Plotly Express是一个基于Plotly库的高级Python可视化库。它旨在使绘图变得简单且直观&#xff0c;无需繁琐的设置和配置。通过使用Plotly Express&#xff0c;您可以使用少量的代码创建具有丰富交互性和专业外观的各种图表。以下是Plotly Express的一些主要特点和优势&#xf…

Maven教学--上

Maven教程–上 先看一个问题&#xff0c;引出Maven 需求说明/图解 编写一个类, 有一个方法sum&#xff0c;可以返回两个数的和编写测试类TestSum, 可以测试sum 是否正确. 使用传统方式完成 创建传统的java 项目java-hello 创建Hello.java public class Hello {public S…

【30天熟悉Go语言】5 Go 基本数据类型

文章目录 一、前言二、数据类型总览1、基本数据类型1&#xff09;数值型-整数类型1> 有符号整数类型&#xff1a;2> 无符号整数类型&#xff1a;3> 其他整数类型&#xff1a;4> PS:Go的整数类型&#xff0c;默认声明为int类型&#xff1a;5> 变量占用的字节数 2…

PowerShell系列(六):PowerShell脚本执行策略梳理

目录 1、执行策略等级 2、执行策略范围 3、执行策略命令语法格式 4、执行策略常用命令 PowerShell 是一种用于操作 系统的命令行界面&#xff0c;支持跨平台&#xff0c;它提供了许多功能来自动化和优化各种任务。PowerShell 是由微软官方开发的&#xff0c;并作为 Windows Ser…

教培行业的“智能GPT私教”?WorkPlusAI助理帮助教培机构实现十倍人效!

从横空出世到掀起高潮&#xff0c;当下&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;模式下的ChatGPT它正以惊人的速度席卷各个领域&#xff0c;在线教培行业也不例外。那么&#xff0c;正式进入落地期的ChatGPT&#xff0c;在在线教培行业有那些应用前景呢&#…

QT中信号和槽的概念

信号就是发生什么事件&#xff0c;槽就是触发什么函数&#xff0c;所以信号与槽就是发生什么事件(比如点击某个按钮)然后就会触发某个函数 connect(信号的发送者&#xff0c;发送的具体信号&#xff0c;信号的接受者&#xff0c;信号的处理&#xff09; connect(myButton , &a…

Android 内存泄漏

名词解释 内存泄漏:即memory leak。是指内存空间使用完毕后无法被释放的现象&#xff0c;虽然Java有垃圾回收机制&#xff08;GC&#xff09;&#xff0c;但是对于还保持着引用&#xff0c; 该内存不能再被分配使用&#xff0c;逻辑上却已经不会再用到的对象&#xff0c;垃圾回…

阿里P8整理的《亿级并发系统设计》实战教程,面面俱到,实在太全了

候&#xff0c;那系统架构一定不是那么简单的&#xff0c;用个 redis&#xff0c;用 mq 就能搞定&#xff1f;当然不是&#xff0c;真实的系统架构搭配上业务之后&#xff0c;会比这种简单的所谓“高并发架构”要复杂很多倍。 如果有面试官问你个问题说&#xff0c;如何设计一…

亚马逊、eBay新品期没有出单怎么办?自养买家号的重要性和技巧

一&#xff1a;新品期没有出单怎么办&#xff1f; 1.刚开始,低bid 调整&#xff0c;20元预算&#xff0c;让位置可以靠后点&#xff0c;因为前期跟前面比&#xff0c;比不赢&#xff0c;不如去后面比。 2.价格不是由卖家单一决定&#xff0c;而是由市场决定的。 3.切记自嗨型…

Kotlin Lambda表达式和匿名函数的组合简直太强了

Kotlin Lambda表达式和匿名函数的组合简直太强了 简介 首先&#xff0c;在 Kotlin 中&#xff0c;函数是“第一公民”&#xff08;First Class Citizen&#xff09;。因此&#xff0c;它们可以被分配为变量的值&#xff0c;作为其他函数的参数传递或者函数的返回值。同样&…

去中心化公链生态是否还有未来

2020年流动性挖矿带来的高收益让 DeFi Summer 点燃了2021年的大牛市。质押借贷、AMM作市、DEX、GameFi以及元宇宙等赛道的相继爆火&#xff0c;让整个行业看到了区块链的未来潜力&#xff0c;公链生态的繁荣也给项目带来了更多的可能性。而当市场进入熊市时&#xff0c;不少公链…

【netty基础】Java NIO三件套

文章目录 一. 缓冲区1&#xff0e;Buffer操作基本API2&#xff0e;Buffer的基本原理2.1. put操作2.2. get操作2.3. clear()回到初始化buffer的值 3&#xff0e;缓冲区的分配4&#xff0e;缓冲区分片5&#xff0e;只读缓冲区6. 直接(direct)缓冲区7. 内存映射 二. 选择器三. 通道…

直接插入排序--C语言(附详细代码)(附图详解)

目录 插入排序法的介绍 什么是插入排序法&#xff1f; 稳定性分析 插入排序基本思想 例子分析 实现代码 运行结果 插入排序法的介绍 什么是插入排序法&#xff1f; 插入排序&#xff0c;一般也被称为直接插入排序。对于少量元素的排序&#xff0c;它是一个有效的算法 。…

Django-3.2-LTS兼容哪些Python版本?支不支持Python3.9.10?

问&#xff1a;请问Python的3.9.10版本兼不兼容Django的3.2版&#xff1f; 答&#xff1a;Python 3.9.10 和 Django 3.2 之间是兼容的。Django 3.2 是一个长期支持&#xff08;LTS&#xff09;版本&#xff0c;它支持 Python 3.6、3.7、3.8 和 3.9。因此&#xff0c;Python 3.9…

母线差动保护(二)

3、大差和小差 接入大差元件的电流为I母、II母所有支路&#xff08;母联除外&#xff09;的电流&#xff0c;目的是为了判断故障是否为母线区内故障&#xff1b;接入小差元件的电流为接入该段母线的所有支路的电流&#xff0c;目的是为了判断故障具体发生在哪一条母线上。 以双…

ifconfig: RX packets 一直为 0

本博客的很多内容都是经验之谈&#xff0c;目的是给遇到类似问题的小伙伴提供一个解决问题的思路&#xff0c;如果试了不行&#xff0c;可以快速跳过&#xff0c;再寻找其他的解决方案。 如题目所言&#xff0c;今天遇到的问题是和网络连通性相关的&#xff0c;就是网络不通&a…

为什么企业推行OEE总是坚持不下去?

OEE很难推行吗&#xff1f; 企业追求高效率和减少浪费变得尤为重要&#xff0c;而在这个过程中&#xff0c;OEE&#xff08;Overall Equipment Efficiency&#xff09;成为了一个非常有用的工具&#xff0c;它可以为企业提供准确的数据&#xff0c;了解生产过程中存在的浪费程…

AttributeError: module ‘numpy‘ has no attribute ‘typeDict‘

问题描述&#xff1a;运行一个网上下载的PyQt5代码&#xff0c;出现了AttributeError: module numpy has no attribute typeDict的错误。具体如下&#xff1a; Traceback (most recent call last):File "F:/PyQt5/Javacr/main.py", line 16, in <module>from …

面向对象的介绍和内存

学习面向对象内容的三条主线 • Java 类及类的成员&#xff1a;&#xff08;重点&#xff09;属性、方法、构造器&#xff1b;&#xff08;熟悉&#xff09;代码块、内部类 • 面向对象的特征&#xff1a;封装、继承、多态、&#xff08;抽象&#xff09; • 其他关键字的使用…