线段树矩形面积并,面积交,周长并

线段树常用案例2——矩形面积并 本篇博客在上一篇博客基础上讲解,链接:线段树 引例 来看一道题目:Atlantis 这道题的题意是给定若干个平行于坐标轴的矩形,求出这若干个矩形的面积之和,如果有重合的部分,只算一次。 首先考虑暴力的算法,即遍历每个矩形,用一个vis数组记录每个点的访问状态,最后可以统计出总的面积,这种方法在数据小且边长为整数的时候适用。 这类问题应该引入扫描线来做,下面来讲讲扫描线的概念。 扫描线在并行面积并中的应用 首先得定义扫描线 ,扫描线就是一条设想的线,它可以是从水平方向上下扫描,也可以从竖直方向左 阅读详情

矩形面积交

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
const int maxn = 2000+10;
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1
struct Rec{
    double x1, x2, h;
    int d;
    bool operator < (const Rec& rhs) const{
        return h < rhs.h;
    }
}rec[maxn<<2];

struct SegTree{
    double sum1, sum2;
    int cnt;
}tree[maxn<<2];
double cor[maxn<<2];

// l == r代表没有子节点了
void pushup(int l,int r,int rt) {
    //如果被覆盖两次, 那么久等于整段长度
    if(tree[rt].cnt >= 2) {
        tree[rt].sum1 = tree[rt].sum2 = cor[r+1]-cor[l];
    }
    // 如果只被覆盖一次, 那么等于子线段覆盖之和相加,就成了两次
    else if(tree[rt].cnt == 1) {
        if(l == r)
            tree[rt].sum2 = 0;
        else 
            tree[rt].sum2 = tree[rt<<1].sum1+tree[rt<<1|1].sum1;
        tree[rt].sum1 = cor[r+1]-cor[l];
    }
    //一次都没有覆盖, 那就只能找子线段覆盖两次的。
    else {
        if(l == r) 
            tree[rt].sum1 = tree[rt].sum2 = 0;
        else  {
            tree[rt].sum1 = tree[rt<<1].sum1+tree[rt<<1|1].sum1;
            tree[rt].sum2 = tree[rt<<1].sum2+tree[rt<<1|1].sum2;
        }
    }
}
void update(int L,int R,int v,int l,int r,int rt) {
    if(L > r || R < l) return;
    if(L <= l && r <= R) {
        tree[rt].cnt += v;
        pushup(l,r,rt);
        return;
    }
    int mid = (l+r)>>1;
    update(L,R,v,lson);
    update(L,R,v,rson);
    pushup(l,r,rt);
}

int main() {
    int T;
    scanf("%d", &T);
    while(T--) {
        int n;
        memset(tree, 0, sizeof tree);
        scanf("%d", &n);
        for(int i = 1; i <= n; ++i) {
            double x1,x2,y1,y2;
            scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
            rec[i] = Rec{x1,x2,y1,1};
            rec[i+n] = Rec{x1,x2,y2,-1};
            cor[i] = x1; cor[i+n] = x2;
        }
        n <<= 1;
        sort(rec+1,rec+1+n);
        sort(cor+1,cor+1+n);
        int m = unique(cor+1,cor+1+n)-cor-1;
        double ans = 0;
        for(int i = 1; i < n; ++i) {
            int lb = lower_bound(cor+1,cor+1+m,rec[i].x1)-cor;
            int rb = lower_bound(cor+1,cor+1+m,rec[i].x2)-cor;
            if(lb < rb) update(lb,rb-1,rec[i].d,1,m,1);
            
            ans += tree[1].sum2*(rec[i+1].h-rec[i].h);
            //            cout << rec[i].x1 <<" " << rec[i].x2 << " # ";
            //            cout <<cor[lb] <<" " << cor[rb] << " ";
            //            cout << tree[1].sum2 << " " << ans << endl;
        }
        //  ans += 1e-8;
        //      ans += 0.005;
        printf("%.2lf\n", ans);
    }
    return 0;
}




矩形面积并

#include <bits/stdc++.h>
using namespace std;
const int maxn = 400+10;
const double EPS = 1e-8;
#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1
//线段树的每个结点存储的都是一个线段,每个叶子结点实际存储的是该点到下一个点之间的距离
//所以update的时候需要将r-1
//pushup的时候需要X[r+1]-X[l];
//lazy:代表当前结点的线段被覆盖多少次
//sum:代表当前结点为根的子树中被覆盖的区间一共有多长
struct Rec{
    double x1, x2,y;
    int d;
    Rec(){}
    Rec(double x1, double x2, double y, int d):x1(x1),x2(x2),y(y),d(d){}
    bool operator < (const Rec& rhs) const {
        return y < rhs.y;
    }
}r[maxn];
double X[maxn], sum[maxn*4];
int lazy[maxn*4];
int n;
void pushup(int l,int r,int rt) {
    if(lazy[rt]) {
        sum[rt] = X[r+1]-X[l];
    }
    else if(l == r) sum[rt] = 0;
    else sum[rt] = sum[rt<<1]+sum[rt<<1|1];
}

void update(int L, int R, int v, int l, int r, int rt) {
    if(L <= l && r <= R) {
        lazy[rt] += v;
        pushup(l, r, rt);
        return;
    }
    int m = l + r >> 1;
    if(L <= m) update(L, R, v, lson);
    if(R > m) update(L, R, v, rson);
    pushup(l, r, rt);
}
int getid(double x,int mm) {
    return lower_bound(X+1,X+mm+1,x)-X;
}
void solve() {
    double x1,y1,x2,y2;
    while(scanf("%d", &n) && n){	
        memset(sum, 0, sizeof sum);
        memset(lazy, 0, sizeof lazy); 
        for(int i = 1; i <= n; ++i) {
            scanf("%lf%lf%lf%lf", &x1,&y1,&x2,&y2);
            r[i] = Rec(x1,x2,y1,1);
            r[i+n] = Rec(x1,x2,y2,-1);
            X[i] = x1; X[i+n] = x2;
        }
        n <<= 1;
        sort(r+1,r+n+1);
        sort(X+1,X+n+1);
       int  m = int(unique(X+1,X+n+1)-X-1);
        double ans = 0;
        for(int i = 1; i < n; ++i) {
            int lb = getid(r[i].x1,m);
            int rb = getid(r[i].x2,m);
          //  cout << lb <<" " << rb << endl;
            if(lb < rb) 
            update(lb,rb-1,r[i].d,1,m,1);
          //  cout << sum[1] << endl;
            ans += sum[1]*(r[i+1].y-r[i].y);
          //  cout << ans << endl;
        }
        printf("%.2lf\n",ans);
    }
}
int main() {
    solve();
    return 0;
}

矩形周长并

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int maxn = 20000+10;

struct Rec {
    int x1,x2,h,d;
    bool operator < (const Rec& rhs) const {
        return h == rhs.h ? d > rhs.d : h < rhs.h;
    }
}rec[maxn<<2];

struct SegTree {
    int len; // 覆盖长度
    int num; // 竖边个数
    bool lv; // 左端点是否被覆盖
    bool rv;
    int cover;
}Seg[maxn<<2];

void pushup(int l,int r,int rt) {
    if(Seg[rt].cover) {
        Seg[rt].num = 2;
        Seg[rt].len = r-l+1;
        Seg[rt].lv=Seg[rt].rv=1;
    }
    else if(l == r) {
        Seg[rt].len = Seg[rt].num = Seg[rt].lv = Seg[rt].rv = 0;
    }
    else {
        
        Seg[rt].lv = Seg[rt<<1].lv;
        Seg[rt].rv = Seg[rt<<1|1].rv;
        Seg[rt].len = Seg[rt<<1].len + Seg[rt<<1|1].len;
        Seg[rt].num = Seg[rt<<1].num + Seg[rt<<1|1].num;
        if(Seg[rt<<1|1].lv&&Seg[rt<<1].rv) Seg[rt].num -= 2;
    }
}
void update(int L,int R,int v,int l,int r,int rt) {
    
    if(L <= l && r <= R) {
        Seg[rt].cover += v;
        pushup(l,r,rt);
        return;
    }
    int mid = (l+r)>>1;
    if(L <= mid)update(L,R,v,lson);
    if(R > mid)update(L,R,v,rson);
    pushup(l,r,rt);
}

int main() {
    int n;
    //freopen("in.txt","r",stdin);
    while(~scanf("%d", &n)) {
        memset(Seg, 0, sizeof Seg);
        int lb = 10000, rb = -10000;
        for(int i = 1; i <= n; ++i) {
            int x1,x2,y1,y2;
            scanf("%d%d%d%d", &x1,&y1,&x2,&y2);
            rec[i] = Rec{x1,x2,y1,1};
            rec[i+n] = Rec{x1,x2,y2,-1};
            lb = min(x1,lb);
            rb = max(x2,rb);
        }
        n <<= 1;
        sort(rec+1,rec+1+n);
        
        int ans = 0, pre = 0;
        for(int i = 1; i <= n; ++i) {
            int l = rec[i].x1, r = rec[i].x2;
            //  cout << l <<" " << r <<" ";
            if(l < r) update(l,r-1,rec[i].d,lb,rb-1,1);
            ans += Seg[1].num*(rec[i+1].h-rec[i].h);
            //cout << Seg[1].num << " " << Seg[1].len << " " ;
            ans += abs(Seg[1].len-pre);
            pre = Seg[1].len;
            //cout << ans << endl;
        }
        printf("%d\n", ans);
    }
    return 0;
}



扫描线小结 扫描线 文章目录扫描线1.算法分析1.1 基本概念1.2 扫描线求矩形的面积并1.3 扫描线求三角形的面积并1.4 扫描线求矩形面积的交1.5 扫描线求矩形周长的并2.模板2.1 求矩形的面积并2.2 求三角形的面积并2.3 求矩形的面积交2.4 求矩形的周长并3.例题3.1 求三角形的面积并 1.算法分析 1.1 基本概念 对于很多问题来说,直接计算全局的答案十分困难,但是如果将整个问题(例如图形)分割为许多较小的区间,单独求解是较为简单的,扫描线算法就可以解决此类问题。 复杂度: O(n2log(n)) 阅读详情

相关推荐

线段树应用——扫描线

扫描线(难的批爆)

Lucas_FC_的博客 2782

Problem B 1263 矩形面积的并

2021年下学期《C语言程序设计》作业8-函数2 矩形面积的并指的是,将两个矩形的面积求并集。 也就是说,如果两个矩形不相交,那么它们的并就是面积之和。 否则为面积和减去公共面积。 要小心X1,X2,X3,X4之间的关系。 #include<stdio.h> //坑 #include<math.h> //坑 #include<algorithm> #include<cstring> using namespace std; int cm..

SQ_ZengYX的博客 1174

线段树矩形面积并讲解

ACM中对于矩形面积并用线段树+离散化+ 扫描线一类问题求解

【线段树】矩形面积并

题目描述 给出n个矩形的左下角和右上角的坐标,求矩形面积的并。 矩形面积并指的是被矩形覆盖到的面积和,重叠部分仅算一次。 输入 多组输入,每组首先一个整数 n,代表矩形的数量; 接下来每行四个整数 x1,x2,y1,y2,表示左上角坐标(x1,y1)与右下角(x2,y2) 输出 每行一个整数,表示矩形的面积并。 数据范围 1 ≤\leq≤ n ≤\leq≤ 1e5 1 ≤\leq≤...

Pig_cfbsl的博客 2185

剖析线段树与矩形切割

解决动态统计问题的两把利刃——剖析线段树与矩形切割

Android PackageManagerService 总结(一)应用市场下载安装apk流程

前言: 本篇文章是对系统包安装流程的总结,基于Android12 上 com.android.packageinstaller 源码的分析,第三方应用商城(华为商城,小米商城,应用宝,豌豆荚,酷安等)下载安装应 用,在普通安装和静默安装app两种方式下,对代码流程的梳理和讲解。 触发安装: 当你在商城界面中点击安装按钮,应用会自动下载,下载完成后就会调起系统安装应用的界面,此种触发方式一般是通过Intent 隐式调用的,我们先阅读如下代码: ......

u012514113的专栏 1万+

矩形面积并、矩形面积交、矩形周长并(线段树、扫描线总结)

HDU 1542 [POJ 1151] Atlantis (矩形面积并) 题意: 求N<=100个矩形的面积并求N<=100个矩形的面积并分析: 离散化: 这些技巧都是老生常谈的了, 不然浮点数怎么建树, 离散化xx坐标就可以了 扫描线: 首先把矩形按yy轴分成两条边, 上边和下边, 对xx轴建树, 扫描线可以看成一根平行于xx轴的直线. 从y=0y=0开始往上扫, 下边表示要计

TaoSama's Microcosm 1万+

FFT中的精度博弈:定点数缩放、块浮点与溢出处理在Vivado IP核中的实践权衡

本文探讨了在Vivado FFT IP核中实现高精度快速傅里叶变换的关键技术,包括定点数缩放策略、块浮点模式及溢出处理机制。通过分析不同精度控制方案的资源开销与性能权衡,为工程师在医疗成像、雷达信号处理等高动态范围应用中优化FFT实现提供实践指导。

melon的博客 1096

矩形面积并(POJ 1151)

problem 给你N个矩形,求这些矩阵的面积并 N≈\approx 1e5 思路 “扫描线思路”+离散化+线段树维护 关于扫描线:可以看下这篇博客 关于离散化 由于坐标范围较大,需要使其更“紧密”,这样才能用线段树处理 离散化的核心思想就是 相对大小不变 且能通过现在的值确定之前的值 所以离散化的方法就是(以y轴坐标为例) 将y轴坐标塞入id

Feynman1999的博客 780

如何设计ADAS系统功能状态机(一)

状态机模块在自动驾驶系统中扮演着关键的角色,它负责管理和控制各个功能的状态转换和行为执行。今天我们来聊聊如何设计自动驾驶系统的状态机。

supass2018的博客 1615

Fastjson2 2.0.26反序列化漏洞深度剖析:从原理到PoC构造

本文深度剖析了Fastjson2在2.0.26及之前版本中存在的反序列化漏洞。该漏洞允许攻击者通过构造包含恶意TemplatesImpl对象的JSONArray,并利用BadAttributeValueExpException触发,在反序列化过程中实现远程代码执行。文章从漏洞原理、PoC构造、利用链分析到防御建议,提供了全面的技术解读,帮助开发者和安全人员理解其危害并采取应对措施。

d3e4f的博客 1050

【C++】矩形面积并、矩形面积交、矩形周长并(离散化、扫描线、线段树总结)

文章目录一.矩形面积并题目:Atlantis方法一:离散化方法二:扫描线方法三:线段树+扫描线二.矩形面积交三.矩形周长并 一.矩形面积并 题目:Atlantis POJ-1151 HDU-1542 LA-2184 ZOJ-1128 链接:https://vjudge.net/problem/HDU-1542 方法一:离散化 #pragma GCC optimize(3,"Ofast","...

Ljnoit 1678

YooAsset 2.2.12四层加密架构:跨平台资源安全实战指南

AssetBundle加密是Unity热更新安全的核心环节,其本质是通过算法、密钥管理与生命周期协同实现资源全链路防护。传统方案常陷于‘打包后加密’的误区,导致内存开销大、跨平台兼容差、逆向防护弱。YooAsset 2.2.12提出打包层、传输层、加载层、运行层四层防护架构,将加密前置到资源序列化前,并依托BundleHeader实现动态算法协商与密钥分发,显著提升iOS/Android/WebGL三端一致性。该方案兼顾AES-128等通用算法与SM4等国密支持,同时通过IMemoryDecryptor实现

weixin_32428571的博客 415

hdu 1542 矩形面积并 &&hdu 1255 矩形面积交 && hdu 1828 矩阵周长并 线段树+扫描线入门

hdu 1542 题意: 求二维平面上, N   思路: 扫描线的几个经典应用之一. 扫描线顾名思义就是用一条平行于x轴的线,或者y轴的线,依次扫描.一般线段条数较少,但是值的范围很大,所以需要离散化. 如果采用平行y轴的线,一般需要离散化y坐标,如果采用平行x轴的线,一般需要离散化x坐标. 首先把矩形按y轴分成两条边, 上边和下边, 对x轴建树, 扫描线可以

Marcus-Bao的个人主页 1017

2026.2.3:OpenClaw国内安装教程,国内网络使用,服务器部署,对接飞书

本文介绍了如何创建飞书应用并接入OpenClaw机器人的完整流程。主要内容包括:1)在飞书开放平台创建企业自建应用,添加机器人能力并开通相关权限;2)在Windows11系统上安装OpenClaw,完成配置文件的修改(需将bind改为"lan");3)配置MiniMax国内接口地址,重启gateway服务。整个过程涵盖了应用创建、权限设置、软件安装、服务配置等关键步骤,为开发者提供了详细的飞书机器人接入指南。

拥抱具身智能,昇腾Ascend C 3991

5、自动化代码结构与运维系统的优化

本文探讨了自动化代码结构与运维系统的优化方法,涵盖审批流程的模块化设计、日志记录与工单系统的集成、通知方式的选择、错误处理的策略以及持续改进的实践。同时,深入分析了运维盲目性问题,通过故障案例揭示了关键指标缺失和日志未充分利用的弊端,提出了开发与运维角色转变的必要性。文章还介绍了如何生成有用的系统指标、建立良好的日志习惯以及实施日志聚合,以提升系统的可观测性和可靠性。最终通过总结和流程图展示了优化措施的核心要点,为构建高效、可靠的运维体系提供了指导。

pp12345的博客 71

线段树扫描线问题(HDU - 1255 POJ - 1177 HDU 1542等等)

  博主真的很厉害,写得非常好,我学到了很多知识,感激博主,我直接转载了这个博客,以后用来做模板。 博客转自:https://blog.youkuaiyun.com/lwt36/article/details/48908031; HDU 1542 [POJ 1151] Atlantis (矩形面积并) 题意: 求N&lt;=100个矩形的面积并 分析: 离散化: 这些...

qq_38367681的博客 458

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

扫描线与线段树结合题集总结

扫描线与线段树结合题集总结 扫描线其实是一种有效的处理多维问题的工具,可用于降维,二维问题中常用扫描线扫一维,另一维度通过数据结构维护,本题集较为基础,基本都是线段树与扫描线的结合。 扫描线需要注意的是排序的规则,不仅仅是坐标,还得考虑同坐标下的维护次序,重点重边,具体问题具体分析 1.poj1151 题意: 求n个矩形面积并 思路: 线段树维护扫描线最经典的操作,常把矩形入边赋值为正值,出边赋值为负边进行处理,端点分割线段,离散化端点,区间修改即可,维护每条线段是否完全被覆盖,以此来更新。 需要注意的是,

weixin_45539557的博客 639

深度学习工具包 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 的占用。

矩形面积的交集、并集,相交矩形的外部总周长

转自:http://blog.youkuaiyun.com/lwt36/article/details/48908031 来自转发..学到了 ———————————————————————————————— HDU 1542 [POJ 1151] Atlantis (矩形面积并) 分析: 离散化:这些技巧都是老生常谈的了, 不然浮点数怎么建树, 离散化坐标就可以了 扫描线:首先把矩...

夜雨声烦烦不烦 854

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

矩形面积交-线段树

hdu - 1255 世事总是如此地无常,很多事情总在意料之外。 比如,这题。 不知道是如何错的,是因为二分写得不好? 做完矩形周长并之后,就把这个代码加了两个0,就过了。 又是maxn开小了。 下面是正确代码。 建议: 学矩形周长并、面积交,先学矩形面积并。 Pro: 0 Sol: date: */ #include #include #include #i

Julyana_Lin_夜 1596

算法-扫描线(求矩形面积并,周长并)

线段树,扫描线板子,离散

qq_73705275的博客 1077

扫描线(板子整理) 矩形面积并与矩形周长并

前置知识:离散化,线段树基础即可,难度不大,重在思维扫描线,矩形面积并(洛谷)为了归并区间中的关系(每一段都是连起来的,所以要右端点偏移映射,后面在代码中体现)与常规维护懒标记不同,这里是向上维护的,最后返回一个tree.len[1],就是根节点的值,就是答案即每一段区间右边那个位置(在离散化后的数组中)右偏了,直接体现在操作中而不是结构中。

why_not_fly的博客 1224

hdu1828Picture(线段树求矩形周长并)

->题目请戳这里 题目大意:略 题目分析:要求矩形周长并。看到这题觉得和这几天写的矩形面积并差不多,然后就直接敲了个线段树+扫描线,写差不多了才发现和面积并还是有区别的。然后仿照求面积并的方法,在线段树节点里面加各种信息,结果总是不对。重新理一下思路发现,求周长并只需要考虑2种情况:水平的边和竖直的边,水平的边不难求,在每插入一条扫描线的时候结算一下,当前区间被分成了几段,用分成的段数*2*当

ophunter的专栏 1632

线段树+扫描法解决矩形的面积并、周长并问题

矩形的面积并问题:平面上有N个矩形,各边均平行于坐标轴,求它们覆盖的总面积(重复覆盖的只计一次)。 矩形的周长并问题:平面上有N个矩形,各边均平行于坐标轴,求它们覆盖形成的多边形的周长。 【算法】 面积并: 先将所有矩形的上边界和下边界作为水平线段记录下来,并对所有矩形的左右边界对应的横坐标离散化,设离散化后有N个横坐标,则中间有(N-1)段。对这(N-1)段建立线段树(注意,仍然和普

qqspeed 1145
上一篇: Lyft Level 5 Challenge 2018 - Final Round div1 A. The Tower is Going Home(分类讨论)
下一篇: 操作系统之多道批处理,分时,实时系统
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值