网络流算法-最大流问题总结-(Edmonds_Karp+Dinic优化+ISAP优化)

dinic sap 模板,有当前弧优化,gap优化,网上搜集,链式前向星存储方式,测试可用 dinic sap 模板,有当前弧优化,gap优化,网上搜集,链式前向星存储方式,测试可用,包含3套模板,可以应付基本所有网络流题目 立即下载

EK算法的思路:

1.通过BFS扩展合法节点,找到汇点,并记录pre前一个节点,如果找不到增广路,算法结束

2.通过BFS的记录,从汇点回溯到起点,记录下每条边的 res残流

3.将所有经过的边减去res 反向边加上

4.重复上面的步骤,直到找不到增广路,结束

1.朴素EK: 

通过邻接矩阵来储存

但是复杂度太大 N^2

附上源代码 :

const int MAX=220;
int pre[MAX];
int flow[MAX][MAX];
int cap[MAX][MAX];
int res[MAX];//res残量
int Edmonds_Karp(int s,int e){ //EK算法
    int maxflow=0;
    mms(flow,0);
    mms(pre,0);
    queue<int>q;
    while (true) {
        mms(res,0);
        res[s]=INF;
        q.push(s);
        while (!q.empty()) {
            int u=q.front();
            q.pop();
            for(int v=1;v<=e;v++){
                if(!res[v]&&cap[u][v]>flow[u][v]){
                    res[v]=min(res[u],cap[u][v]-flow[u][v]);
                    pre[v]=u;
                    q.push(v);
                }
            }
        }
        while(res[e]==0) return maxflow;
        for(int u=e;u!=s;u=pre[u]){
            flow[pre[u]][u]+=res[e];
            flow[u][pre[u]]-=res[e];
        }
        maxflow+=res[e];
    }
}
int main(){
    
    
    int t;
    cin>>t;
    while (t--) {
        //
        mms(cap,0);
        int n,m;
        cin>>n>>m;
        //for
        for(int i=0;i<m;i++){
            int u,v,w;
            cin>>u>>v>>w;
            cap[u][v]+=w;
        }
//        cout<<Edmonds_Karp(1,n)<<endl;
        int k=1;
        cout<<"Case "<<k++<<": "<<Edmonds_Karp(1,n)<<endl;
    }
    
//    int u,v,w;
//    cap[u][v]+=w;//+=考虑重边的问题
    //
}

 2.无优化的Dinic算法:

const int MAX=10010;
int n,m,s,t;
struct E{
    int next,to,w; //对应边的残量
}e[MAX];
int head[MAX];
int cnt=0;  //反边直接^
void add(int u,int v,int w){ //前向星存图
    e[cnt].to=v;
    e[cnt].w=w;
    e[cnt].next=head[u];
    head[u]=cnt++;
}
int dep[MAX]; //深度
queue<int >q;
int bfs(){ //bfs分层图
    while (!q.empty()) { //先清空
        q.pop();
    }
    mms(dep,0);
    dep[s]=1;
    q.push(s);
    while (!q.empty()) {
        int u=q.front();
        q.pop();
        for(re int i=head[u];i!=-1;i=e[i].next){
            int v=e[i].to;
            if(e[i].w>0&&dep[v]==0){
                dep[v]=dep[u]+1;
                q.push(v);
            }
            
        }
        
    }
    if(dep[t]==0) return 0; //当汇点的深度不存在时候 说明不存在分层图 同时也说明了不存在增广路
    return 1;
}
int dfs(int u,int dist){ //u是当前的节点 dist是当前的流量
    if(u==t)return dist;
    for(re int i=head[u];i!=-1;i=e[i].next){
        int v=e[i].to;
        if(dep[v]==dep[u]+1&&e[i].w!=0){
            int d=dfs(v,min(dist,e[i].w));
            if(d>0){ //增广成功
                e[i].w-=d; //正边-
                e[i^1].w+=d;//反向边+
                return d; //向上传递
            }
        }
    }
    return 0;
}
int Dinic(){
    int ans=0;
    while (bfs()) {
        ans+=dfs(s,INF);
    }
    return ans;
}
int main(){
    mms(head,-1);
    n=read();
    m=read();
    s=read();
    t=read();
    for(re int i=1,x,y,z;i<=m;i++){
        x=read();
        y=read();
        z=read();
        add(x,y,z);
        add(y,x,0);
    }
    cout<<Dinic()<<endl;
    return 0;
}

3.Dinic+当前弧优化:

const int MAX=10010;
int n,m,s,t;
struct E{
    int next,to,w; //对应边的残量
}e[MAX];
int head[MAX];
int cnt=0;  //反边直接^
void add(int u,int v,int w){ //前向星存图
    e[cnt].to=v;
    e[cnt].w=w;
    e[cnt].next=head[u];
    head[u]=cnt++;
}

//当前弧优化部分
int rec[MAX];  //记录u循环到了那条边
//end

int dep[MAX]; //深度
queue<int >q;
int bfs(){ //bfs分层图
    while (!q.empty()) { //先清空
        q.pop();
    }
    mms(dep,0);
    dep[s]=1;
    q.push(s);
    while (!q.empty()) {
        int u=q.front();
        q.pop();
        for(re int i=head[u];i!=-1;i=e[i].next){
            int v=e[i].to;
            if(e[i].w>0&&dep[v]==0){
                dep[v]=dep[u]+1;
                q.push(v);
            }
            
        }
        
    }
    if(dep[t]==0) return 0; //当汇点的深度不存在时候 说明不存在分层图 同时也说明了不存在增广路
    return 1;
}
int dfs(int u,int dist){ //u是当前的节点 dist是当前的流量
    if(u==t)return dist;
    //优化部分当前弧
    for(re int &i=rec[u];i!=-1;i=e[i].next){ //&可以起到增加i的同时增加cur[u]的值
        int v=e[i].to;
        if(dep[v]==dep[u]+1&&e[i].w!=0){
            int d=dfs(v,min(dist,e[i].w));
            if(d>0){ //增广成功
                e[i].w-=d; //正边-
                e[i^1].w+=d;//反向边+
                return d; //向上传递
            }
        }
    }
    return 0;
    
    
    
    //未优化
//    for(re int i=head[u];i!=-1;i=e[i].next){
//        int v=e[i].to;
//        if(dep[v]==dep[u]+1&&e[i].w!=0){
//            int d=dfs(v,min(dist,e[i].w));
//            if(d>0){ //增广成功
//                e[i].w-=d; //正边-
//                e[i^1].w+=d;//反向边+
//                return d; //向上传递
//            }
//        }
//    }
//    return 0;
}
int Dinic(){
    int ans=0;
    //未优化
//    while (bfs()) {
//        ans+=dfs(s,INF);
//    }
    //当前弧优化
    while (bfs()) {
        for(re int i=1;i<=n;i++){
            rec[i]=head[i]; //每次建完图以后都要把rec重置到每个点的第一条边
        }
        ans+=dfs(s,INF);
    }
    return ans;
}
int main(){
    mms(head,-1);
    n=read();
    m=read();
    s=read();
    t=read();
    for(re int i=1,x,y,z;i<=m;i++){
        x=read();
        y=read();
        z=read();
        add(x,y,z);
        add(y,x,0);
    }
    cout<<Dinic()<<endl;
    return 0;
}

4.Dinic 多路增广优化+当前弧优化:

const int MAX=10010;
int n,m,s,t;
struct E{
    int next,to,w; //对应边的残量
}e[MAX];
int head[MAX];
int cnt=0;  //反边直接^
void add(int u,int v,int w){ //前向星存图
    e[cnt].to=v;
    e[cnt].w=w;
    e[cnt].next=head[u];
    head[u]=cnt++;
}

//当前弧优化部分
int rec[MAX];  //记录u循环到了那条边
//end
int  maxflow;
int dep[MAX]; //深度
queue<int >q;
int bfs(){ //bfs分层图
    while (!q.empty()) { //先清空
        q.pop();
    }
    mms(dep,0);
    dep[s]=1;
    q.push(s);
    while (!q.empty()) {
        int u=q.front();
        q.pop();
        for(re int i=head[u];i!=-1;i=e[i].next){
            int v=e[i].to;
            if(e[i].w>0&&dep[v]==0){
                dep[v]=dep[u]+1;
                q.push(v);
            }
            
        }
        
    }
    if(dep[t]==0) return 0; //当汇点的深度不存在时候 说明不存在分层图 同时也说明了不存在增广路
    return 1;
}
//当前弧优化
//int dfs(int u,int dist){ //u是当前的节点 dist是当前的流量
//    if(u==t)return dist;
//    //优化部分当前弧
//    for(re int &i=rec[u];i!=-1;i=e[i].next){ //&可以起到增加i的同时增加cur[u]的值
//        int v=e[i].to;
//        if(dep[v]==dep[u]+1&&e[i].w!=0){
//            int d=dfs(v,min(dist,e[i].w));
//            if(d>0){ //增广成功
//                e[i].w-=d; //正边-
//                e[i^1].w+=d;//反向边+
//                return d; //向上传递
//            }
//        }
//    }
//    return 0;
//
//
//
//    //未优化
////    for(re int i=head[u];i!=-1;i=e[i].next){
////        int v=e[i].to;
////        if(dep[v]==dep[u]+1&&e[i].w!=0){
////            int d=dfs(v,min(dist,e[i].w));
////            if(d>0){ //增广成功
////                e[i].w-=d; //正边-
////                e[i^1].w+=d;//反向边+
////                return d; //向上传递
////            }
////        }
////    }
////    return 0;
//}
//多路增广优化
int dfs(int u,int flow){
    if(u==t){
        maxflow+=flow;
        return flow;
    }
    int used=0; //表示这个点的流量用了多少
    for(re int &i=rec[u];~i;i=e[i].next){
        int v=e[i].to;
        if(dep[v]==dep[u]+1&&e[i].w!=0){
            int d=dfs(v,min(flow-used,e[i].w));
            if(d>0){
                e[i].w-=d;
                e[i^1].w+=d;
                used+=d;
                if(used==flow) break; //这点的流量满了 不需要找了
                //dfs找到一条增广路 不需要返回 只需要修改used就行
                //如果used没有到达flow的上限 就可以继续寻找
            }
        }
    }
    return used;
}
int Dinic(){
    int ans=0;
    //未优化
//    while (bfs()) {
//        ans+=dfs(s,INF);
//    }
    //当前弧优化
    while (bfs()) {
        for(re int i=1;i<=n;i++){
            rec[i]=head[i]; //每次建完图以后都要把rec重置到每个点的第一条边
        }
        ans+=dfs(s,INF);
    }
    return ans;
}
int main(){
    mms(head,-1);
    n=read();
    m=read();
    s=read();
    t=read();
    for(re int i=1,x,y,z;i<=m;i++){
        x=read();
        y=read();
        z=read();
        add(x,y,z);
        add(y,x,0);
    }
    cout<<Dinic()<<endl;
    return 0;
}

5.ISAP+gap优化+多路增广:

const int MAX=10010;
int n,m,s,t;
struct E{
    int next,to,w; //对应边的残量
}e[MAX<<1]; //双向边*2
int head[MAX];
int gap[MAX]; //gap是深度为i的点的数量 优化
int cnt=0;  //反边直接^
void add(int u,int v,int w){ //前向星存图
    e[cnt].to=v;
    e[cnt].w=w;
    e[cnt].next=head[u];
    head[u]=cnt++;
}

//当前弧优化部分
int rec[MAX];  //记录u循环到了那条边
//end
int  maxflow;
int dep[MAX]; //深度
queue<int >q;
int bfs(){ //bfs分层图
    mms(dep,-1);
    mms(gap,0);
    q.push(t);
    dep[t]=0;
    gap[0]=1;
    while (!q.empty()) {
        int u=q.front();
        q.pop();
        for(re int i=head[u];i!=-1;i=e[i].next){
            int v=e[i].to;
            if(dep[v]!=-1) continue; //防止重复修改某个点
            q.push(v);
            dep[v]=dep[u]+1;
            gap[dep[v]]++;
        }
        
    }
    if(dep[t]==0) return 0; //当汇点的深度不存在时候 说明不存在分层图 同时也说明了不存在增广路
    return 1;
}
int dfs(int u,int flow){
    if(u==t) {
        maxflow+=flow;
        return flow;
    }
    int used=0;
    for(re int i=head[u];~i;i=e[i].next){
        int v=e[i].to;
        if(e[i].w&&dep[v]+1==dep[u]){
            int d=dfs(v,min(flow-used,e[i].w));
            if(d>0){
                e[i].w-=d;
                e[i^1].w+=d;
                used+=d;
            }
            if(used==flow){
                return used;
            }
        }
    }
    --gap[dep[u]];
    if(!gap[dep[u]]) dep[s]=n+1;
    dep[u]++;
    gap[dep[u]]++;
    return used;
}
void ISAP(int s,int t){
    bfs();//从t到s跑一遍bfs 标记初始深度
    while (dep[s]<n) {
        dfs(s,INF);
    }
    //终止条件 dep[s]<n
    //每走一次增广路 s的层数+1 若一直没有断层 最多跑n-dep(刚bfs完s的深度)
}
int main(){
    mms(head,-1);
    n=read();
    m=read();
    s=read();
    t=read();
    for(re int i=1,x,y,z;i<=m;i++){
        x=read();
        y=read();
        z=read();
        add(x,y,z);
        add(y,x,0);
    }
    ISAP(s,t);
    cout<<maxflow<<endl;
}

海思MPP平台千兆以太网驱动集成与测试指南 千兆以太网(GE)是嵌入式视觉系统中音视频流传输与边缘控制的核心物理接口,其底层驱动需兼顾DMA高效调度、中断实时响应与PHY链路稳定性。在Linux嵌入式环境中,GE驱动通常基于net_device框架实现,并深度耦合于SoC专用媒体处理平台(如海思MPP),通过硬件抽象层(HAL)屏蔽寄存器操作,提供零拷贝、RGMII时序适配、描述符环管理等关键能力。技术价值体现在降低CPU负载、保障1080p@30fps实时推流、支持ONVIF/RTSP协议交互及固件远程升级。典型应用场景包括网络摄像机(IPC)、A 阅读详情

相关推荐

VS2015编译配置GDAL(图文并茂、超详细!!!)

文章目录一、GDAL介绍二、下载GDAL三、修改源代码四、工具命令提示符操作五、编译GDAL六、安装GDAL七、在VS2015的项目中配置GDAL八、添加环境变量九、测试是否配置成功 一、GDAL介绍 GDAL(Geospatial Data Abstraction Library)是一个在XMIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。OGR是GDAL项目的一个分支,功能与GDAL类似,只不过它提供对矢量数据的支持。因此

weixin_46196863的博客 3756

最大流算法之三:ISAP <

最大流算法之三:ISAP   (2009-08-14 19:24:27) 转载▼ 标签:  it 分类: 理论     通常的 SAP 类算法在寻找增广路时总要先进行 BFS,BFS 的最坏情况下复杂度为 O(E),这样使得普通 SAP 类算法最坏情况下时间复杂度达到了 O(VE2)。为了避免这种情况,Ahuja 和 Or

pi9nc的专栏 4704

人大金仓V8R3企业版License更新全攻略:从查看到重启一步到位

本文详细解析了人大金仓V8R3企业版License更新的完整运维流程,涵盖从诊断当前授权状态、获取与验证新文件、精准定位旧文件路径,到安全替换文件及服务重启验证的全过程。重点针对更新流程中常见的版本匹配、文件定位、权限与服务重启等关键环节提供了实战解决方案和避坑指南,帮助运维人员高效、平稳地完成授权续期。

redis7keeper的博客 896

网络流之最大流学习总结

网络流之最大流学习总结 Acwing-2171-EK求最大流 该算发可用于求流网络的最大流,大致过程就是每次找一条路径,然后这条路径上面的容量都减去这条路径里的容量最小值,由于每次找一条,所以复杂度较高 AcWing 2172. Dinic/ISAP求最大流 这里使用了Dinic,并没有用ISAP,两者掌握一种即可。 Dinic利用了分层思路,每次BFS进行分层,然后DFS,这样一次BFS可以找到多条路径。 算法中利用了两种优化: ​ ①优先弧优化:某个节点的某条出边流量已经满了,那么下次DFS就不必再

zzulizyl的博客 438

单细胞分析避坑指南:SCTransform和Harmony参数设置详解

本文深入解析了单细胞分析中SCTransform标准化与Harmony批次校正的关键参数设置。针对10x Genomics等数据,详细探讨了如何通过调整`vars.to.regress`、`theta`等核心参数,在有效去除技术噪音的同时,避免过度校正以保留关键的生物学差异,从而提升分析结果的可靠性与可解释性。

weixin_29053073的博客 608

Ubuntu20.04下Docker无缝升级实战指南

本文提供了一份在Ubuntu20.04系统上安全、无缝升级Docker的实战指南。文章详细阐述了升级前的版本检查、数据备份等准备工作,逐步演示了通过APT包管理器进行升级或指定版本安装的操作步骤,并强调了升级后的验证与常见问题回滚方案,确保业务容器平稳过渡。

postgres8guard的博客 478

网络最大流算法小结

1. EK 编码请看:http://www.maidoupig.cn const int MN = 400; int que[MN]; bool visited[MN]; int head,tail; int map[MN][MN]; int pre[MN]; int N,M; bool bfs(){ int i,j,k; memset(visited,0,sizeof(visited)...

MYIHS 864

安卓应用锁开发实战:如何通过拦截Activity启动实现密码验证(附完整代码)

本文深入探讨了在安卓系统中开发应用锁功能的两种实战方案:通过修改ActivityStarter源码或实现IActivityController接口来拦截Activity启动流程,从而实现启动前的密码验证。文章详细对比了两种方案的技术选型、实现细节与适用场景,并提供了处理隐式Intent、验证状态管理等核心问题的完整代码,为开发系统级安全功能提供了实用指南。

tcp8optimizer的博客 456

求最大网络流(最小割)总结

求最大网络流总结        一个有向图,每条边都有最大可能的数据传输量c,要求一个点到某个点一次能传输的最大数据量,即为求最大网络流,每条边实际的数据传输量称为流量。        基本思路:使用贪心算法,每次找出能使总流量更大的边,将数据向那条边流。   Ford-fulkerson算法 读入所有有向边,并且加入流量为0的反向

MrH929的博客 2053

uboot引导vxworks--t2080调试记录

开发环境: t2080rdb, uboot2015, vxworks7.01. 《VxWorks_7_fsl_t2t4_BSP_Supplement_Guide__SR0620.pdf》描述: 实际上默认创建的vip,profile选项为none时,vip内核配置中是包含了INCLUDE_END选项的。所以在创建vip的时候最好就添加上PROFILE_DEVELOPMENT。 2. 内核参数bootargs是一些网络参数设置=> pri bootargs bootargs=memac(1,0)b109304

珂珂可爱多 2640

①电子产品拆解分析-暖手宝

电子产品拆解分析-暖手宝 ①按键三档调温暖手; ②长按进入氛围呼吸灯; ③安卓接口充电以及支持USB输出;

a6662580的博客 5294

网络流之最大流算法总结(FF, EK, Dinic)

目录 FF算法:最基础的最大流算法 EK算法:每次BFS寻找増广路 Dinic算法:EK算法的优化 Dinic+链式前向星 这里以POJ1273这道题为例,题目链接:http://poj.org/problem?id=1273 FF算法:最基础的最大流算法 通过DFS増广,直到不能増广为止。 记最大流的流量为F,FF算法最多进行F次DFS,所以其复杂度为O(F|E|),每一次DFS...

7116

【专栏导引贴】100+智能优化算法:从背景原理到代码实战(持续更新)

本专栏系统整理100+种现代优化算法,涵盖粒子群优化(PSO)、遗传算法(GA)、鲸鱼优化(WOA)等经典方法,以及白鲸优化(BWO)、非洲秃鹫优化(AVOA)等新兴算法。每篇详解包含生物启发原理、数学模型、代码实现及工程应用,采用统一编程风格,提供可直接运行的实例代码。专栏持续更新,旨在为研究者提供系统化的智能优化算法参考资料,实现从理论到实践的完整知识链。目前已收录23种算法,包括蚁群系统(ACS)、蝙蝠算法(BA)、天牛须搜索(BAS)等自然启发式优化方法。

qq_42212808的博客 3650

最大流、最小割算法:Ford-Fulkerson算法

最大流、最小割算法:Ford-Fulkerson算法

闲余知道 651

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Faster-Whisper 本地部署实操:语音转写提速 4 倍、显存占用省四成

Faster-Whisper 是一个本地语音识别工具。它把 OpenAI 的 Whisper 模型换到 CTranslate2 推理引擎上运行,精度基本不变,速度最高提升约 4 倍,内存占用降到一半左右。 ## 📊 先看结果 同一台 RTX 3070 Ti,转写同一段 13 分钟音频(large-v2 模型),原版 openai/whisper 耗时 2 分 23 秒,faster-whis

gitblog_00371的博客 770

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【网络流】最大流问题(EK算法带模板,Dinic算法带模板及弧优化,ISAP算法带模板及弧优化)上下界网络流

不会的就是网络流没错了

525

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Poj1273--Drainage Ditches(最大流)

Drainage Ditches Time Limit:1000MS Memory Limit:10000K Total Submissions:66508 Accepted:25687 Description Every time it rains on Farmer John's fields, a pond f...

dixi7825的博客 145

初入网络流 -- 最大流 Edmonds-Karp算法 & Dinic算法 & ISAP算法

一、网络流基本概念 什么是网络流: 在一个有向图上选择一个源点,一个汇点,每一条边上都有一个流量上限(以下称为容量),即经过这条边的流量不能超过这个上界,同时,除源点和汇点外,所有点的入流和出流都相等,而源点只有流出的流,汇点只有汇入的流。这样的图叫做网络流。 所谓网络或容量网络指的是一个连通的赋权有向图 D= (V、E、C) , 其中V 是该图的顶点集,E是有向边(即弧)集,C是弧上的容量。此外...

dajiangyou123456的博客 771

网络流(最大流)

网络流的相关定义: 源点:有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点。 汇点:另一个点也很特殊,只进不出,叫做汇点。 容量和流量:每条有向边上有两个量,容量和流量,从i到j的容量通常用c[i,j]表示,流量则通常是f[i,j]. 通常可以把这些边想象成道路,流量就是这条道路的车流量,容量就是道路可承受的最大的车流量。很显然的,流量<=容量。而对于每个不是源点和汇点的点...

weixin_42165786的博客 1万+

【深圳大学算法设计与分析】 实验六 最大流应用问题 FF -> EK -> Dinic

1996 年 9 月 10 日,《旧金山纪事报》的体育版上登载了《巨人队正式告别 NL 西区比赛》一文,宣布了旧金山巨人队输掉比赛的消息。当时,圣地亚哥教士队凭借 80 场胜利暂列西区比赛第一,旧金山巨人队只赢得了 59 场比赛,要想追上圣地亚哥教士队,至少还得再赢 21 场比赛才行。然而,根据赛程安排,巨人队只剩下 20 场比赛没打了,因而彻底与冠军无缘(摘自http://www.matrix67.com/blog/archives/5190)。

JK01WYX的博客 2454

网络流(一) 最大流问题

在一个有向图上选择一个源点,一个汇点,每一条边上都有一个流量上限(以下称为容量),即经过这条边的流量不能超过这个上界,同时,除源点和汇点外,所有点的入流和出流都相等,而源点只有流出的流,汇点只有汇入的流。这样的图叫做网络流。

这里是阿安的博客 5519

初谈网络流(最大流)..Edmonds_Karp..Dinic

网络流的最经典应用就是最大流....给定一个图...给出每条边能流过的最大流量...求源点到汇点的最大流量....    求解网络流的基本思想就是每次寻找增广路(就是源点到汇点的一条可行路)..然后ans+=增广路能流过的流量..更新剩余网络..然后再做增广路...直到做不出增广路..关于网络流入门最难理解的地方就是剩余网络了....为什么在找到一条增广路后...不仅要将每条边的可行流量减去增广

zzyzzy12 3331

数据结构与算法 - 网络流基础:最大流问题的Ford-Fulkerson算法

🚀 总结与展望 Ford-Fulkerson 算法是解决最大流问题的经典方法,通过不断寻找增广路径来逐步增加流量,最终达到网络的最大流。本文详细介绍了网络流的基本概念、Ford-Fulkerson 算法的原理与实现,并通过示例演示了其运行过程。 关键点回顾: 网络流模型:源点、汇点、边容量与流量守恒约束 最大流最小割定理:最大流等于最小割容量 Ford-Fulkerson 算法:基于增广路径的迭代方法 Edmonds-Karp 优化:使用 BFS 提高效率 应用场景: 交通网络优化 电力系统调度 计算机网

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

网络流探索:解决网络最大流问题的算法集锦

网络流探索:解决网络最大流问题的算法集锦

qq_51447436的博客 1万+

初识网络流(Ford-Fulkerson算法,Edmonds-Karp 最短增广路算法,Dinic 快速网络流算法)

今天!蒻终于知道了什么是网络流!! 对于一个源点和一个汇点,之间有许多条有一定容量的边,问单位时间内从源点到汇点最多可以流过多少流量。 就拿这张图来说,就是问从源点sss到汇点ttt单位时间内的最大流量。 那对于最大流问题,有什么解决方法呢? Ford-Fulkerson算法 基本思想就是每次用dfsdfsdfs从源点开始搜索,直到汇点停止,这之间所经过的边中容量最小的一条边就是...

Eternally831143的博客 1485

最大流问题的增广路算法

本文详细讲解了最大流问题的增广路算法,附带代码模板和详细过程帮助理解帮助

yun_xxx的博客 1400
上一篇: 概率dp总结
下一篇: 二分图知识总结
郭晋龙
博客等级 码龄6年 940粉丝 449原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭晋龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值