首页 文章 精选 留言 我的

精选列表

搜索[博客搭建],共10000篇文章
优秀的个人博客,低调大师

娱乐城搭建必备服务器SSC、棋牌、网站搭建

很多客户服务器不稳定,卡掉线,被攻击怎么办? 这犯罪团伙还真是能够领会精神,与时俱进,在这么短的时间就学会了互联网+犯罪,以DDOS、CC等网络攻击为要挟实施敲诈勒索。 所谓的DDOS攻击,就是绑架n台僵尸电脑(俗称肉鸡,肉鸡也就是受黑客远程控制的电脑或机器,黑客可以随意操纵它并利用它做任何事情)同时访问网站,从而使网站不能日常运营。这就好像在一条高速公路上,犯罪嫌疑人故意组织大量车辆上高速,使得大量的车辆堵在高速公路上,造成人为阻塞,这样的后果是想上高速的上不来,其破坏的目的也就达到了。 看过这个新闻,让我想起《天下无贼》里的一句台词:二十一世纪什么最贵?人才!可这人才要是用错了地方,岂不成了人渣?做人还是本分点好,出来混早晚要还的,千万别存侥幸心理,不信抬头看,苍天饶过谁?! 专注 网站、棋,牌、菠菜、游戏。聊天室等服务器租用和托管以

优秀的个人博客,低调大师

精选博客系列|加速基于同态加密的隐私保护机器学习

随着机器学习在当今的企业和软件平台中的广泛使用,跨人工智能 (AI) 平台的隐私保护技术的解决方案也显得非常重要。虽然这个想法在今天看起来很明显,但人工智能研究社区历来更专注于打破数据孤岛的界限,并将数据从一个孤岛匹配到另一个孤岛,以此发掘以前未被发现的数据价值。 随着人工智能领域的成熟,很显然,如果不保护私人数据,我们很可能会将我们的数据源暴露在潜在的漏洞中,而引发难以预料的后果。今天,人工智能行业已经通过与密码学家密切的合作来应对和解决人工智能技术的这一关键难题。有一种使隐私数据不公开的解决方法,即在加密的情况下进行数据计算,它被称为同态加密。 什么是同态加密? 同态加密(HE)属于一类用于隐私保护计算的高级加密技术。它允许对加密数据进行计算,而无需解密,只允许授权方解密计算结果。这种独特的加密技术允许数据在静态、传输和计算过程中保持加密状态。自 1970 年代后期以来,人们一直在寻求对加密数据进行任意计算的办法,直到 2009 年,Craig Gentry首次描述了全同态加密(FHE)的构建方案。这一突破最终使加密执行任意计算成为可能。 同态加密(HE)可分为三大类: 1.完全同态加密(FHE) 由Craig Gentry于2009年首次描述,FHE是一种加密类型,支持同一方案中的加法和乘法,并允许对加密数据执行任意深度的通用计算,而无需解密它。FHE 方案的流行示例包括具有自举功能变体的BGV[2]/ BFV[3],[4]/ CKKS[5], FHEW [6]和 TFHE[7]。FHE计划正在积极研究和开发,并正在进行标准化过程。 2.完全分级同态加密(FLHE) 也称为分级同态加密(LHE),它类似于FHE,但更具限制性,因为它允许有限的(或预定的)计算深度。流行的例子包括没有自举的BGV,BFV和CKKS。这些方案变体也在进行标准化审核。 3.部分同态加密(PHE) 这种形式的加密已经存在多年,它允许对加密数据进行加法或乘法(但不能两者兼而有之),而无需对其进行解密。PHE的流行例子是RSA[8]、Paillier密码系统[9]和 ElGamal 加密[10]方案。这三种方案是标准化的,在当今的生产环境中很常用。 从部分同态解决方案开始 FHE被认为是密码学的圣杯。数据在其整个生命周期,包括在静态、传输中以及计算时都保持加密状态。在 2009 年出现时,其计算开销被认为太慢,无法用于任何实际用途。从通用的角度,FHE在标准化和性能上仍然有所缺乏,因而许多用户在实现基于HE的实际应用程序时是有所保留的。而过去十年的发展已经开始释放同态加密的在实际应用中的潜力,特别是在那些受监管的行业以及那些保护数据的隐私和机密性至关重要的行业。 时代在发展,“坏人”也更老练了。因此,我们需要更安全的应用程序。现在,通过与英特尔的合作,我们可以使用基于硬件加速的部分同态加密方案来解决性能差距,以更好地满足市场需求。 英特尔工程师开发了“Intel Paillier Cryptosystem Library”(IPCL)[12],这是第一个开源且符合 ISO 标准的Paillier 密码系统软件实现。IPCL 利用高级矢量扩展指令集 512 (AVX512) 和整数融合乘法累加 (IFMA) 功能,可以在第三代英特尔®至强®可扩展处理器上发挥它的优势。 IPCL被视为联邦学习解决方案中,有关隐私保护方面的安全标准化中的重要一步:通过IPCL,联邦学习可以在保证高性能的条件下,使用Paillier加密系统在计算过程满足数据隐私保护法规。现在,英特尔与 VMware 合作,将该核心技术以及打包和管理一起集成并发布,使其成为一个完整、易于部署的解决方案。该合作将帮助 VMware构建更好的基于 HE的产品和方案。 在 KubeFATE 中试验 IPCL VMware CTO办公室部门的前沿技术团队(Advanced Technology Group, ATG)开发了KubeFATE[13],它是一种企业级的、可在 Kubernetes 上为数据中心构建联邦学习的解决方案。作为开源项目Federated AI Technology Enabler (FATE,目前托管在 LF AI & Data 基金会)[14]的一部分,KubeFATE用于管理跨组织的基础设施和服务。 FATE实现了基于同态加密(HE)和多方计算(MPC)的安全计算协议。通过将 IPCL 与 FATE 集成,KubeFATE在最新的英特尔处理器上运行时可以享受性能提升。IPCL 中的关键数学函数利用英特尔 AVX512 实现 SIMD 并行性,利用整数融合乘加 (IFMA) 指令集加快处理速度。有关该加速方案的更多详细信息,请参阅之前的一篇文章[15]。 下图显示了将 IPCL 集成到 FATE 中时更细节的各层组件的关系。此新功能已经在 FATE v1.9 版本中以预览形式发布。在这其中使用了IPCL in Python库(即图中的IPCL Python Wrapper)来方便 IPCL 与基于 Python 的框架的集成。 展望不久的将来 英特尔和VMware曾合作为变电站引入虚拟化技术,并共同在美国电网现代化方面取得了巨大进步[16]。这个现代化过程的下一个需求就是整合下一代加密方案,例如HE和后量子密码学。 电网系统是非常适合这种现代化发展的,除此之外,供水和下水道系统也是(现代化进程的)主要候选者。此类关键基础设施的管理者也在寻找方法来遵守新的安全和隐私法案,如加州消费者隐私法案(CCPA)[17]、欧盟通用数据保护条例 (GDPR)[18]和白宫行政命令14028[19]。 除了公用事业之外,应用了多云技术的企业也在积极寻找采用这些技术的方法,以确保其最关键的业务数据安全。据分析公司普华永道(PwC)称:这些公司正在积极寻找机会利用人工智能解决方案来分析敏感数据集,以做出更快的业务决策并获得新的见解[20]。Gartner 将隐私增强计算列为 2022 年第三大最重要的战略趋势[21]: “隐私增强计算可以保护在不受信任的环境中处理个人数据——由于不断变化的隐私和数据保护法律以及消费者日益增长的担忧,这一点变得越来越重要。隐私增强计算利用各种隐私保护技术,允许从数据中提取价值,同时仍满足合规性要求。” 我们正处于不断探索同态加密(包括部分同态加密和完全同态加密)在解决实际问题的用法旅程的初期。接下来,我们将围绕同态加密构建解决方案,并利用英特尔的其他开源库(如 HEXL 和英特尔同态加密工具包)进行加速。 内容来源|公众号:VMware 中国研发中心

优秀的个人博客,低调大师

noip的一些模板(参考了神牛的博客)

一、图论 1.单源最短路 洛谷P3371 (1)spfa 已加SLF优化 419ms 1#include2#include3#include4#include5usingnamespacestd;6constintN=1e4+5,M=5e5+5,INF=2147483647;7inlineintread(){8charc=getchar();intx=0,f=1;9while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}10while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}11returnx*f;12}13intn,m,s,u,v,w;14structedge{15intv,ne,w;16}e[M<<1];17inth[N],cnt=0;18inlinevoidins(intu,intv,intw){19cnt++;20e[cnt].v=v;e[cnt].w=w;e[cnt].ne=h[u];h[u]=cnt;21}22inlinevoidlop(int&x){if(x==N)x=1;elseif(x==0)x=N-1;}23intd[N],q[N],head,tail,inq[N];24voidspfa(ints){25for(inti=1;i<=n;i++)d[i]=INF;26head=tail=1;27q[tail++]=s;inq[s]=1;d[s]=0;28while(head!=tail){29intu=q[head++];inq[u]=0;lop(head);30for(inti=h[u];i;i=e[i].ne){31intv=e[i].v,w=e[i].w;32if(d[v]>d[u]+w){33d[v]=d[u]+w;34if(!inq[v]){35if(d[v]<d[q[head]])head--,lop(head),q[head]=v;36elseq[tail++]=v,lop(tail);37inq[v]=1;38}39}40}41}42}43intmain(){44n=read();m=read();s=read();45for(inti=1;i<=m;i++){u=read();v=read();w=read();ins(u,v,w);}46spfa(s);47for(inti=1;i<=n;i++)printf("%d",d[i]);48} (2)dijkstra 503ms 1#include2#include3#include4#include5#include6usingnamespacestd;7constintN=1e4+5,M=5e5+5,INF=2147483647;8inlineintread(){9charc=getchar();intx=0,f=1;10while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}11while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}12returnx;13}14intn,m,s,u,v,w;15structedge{16intv,ne,w;17}e[M];18inth[N],cnt=0;19inlinevoidins(intu,intv,intw){20cnt++;21e[cnt].v=v;e[cnt].w=w;e[cnt].ne=h[u];h[u]=cnt;22}23structhn{24intu,d;25hn(inta=0,intb=0):u(a),d(b){}26booloperator<(consthn&r)const{returnd>r.d;}27};28priority_queueq;29intd[N],done[N];30voiddij(ints){31for(inti=1;i<=n;i++)d[i]=INF;32d[s]=0;33q.push(hn(s,0));34while(!q.empty()){35hnx=q.top();q.pop();36intu=x.u;if(done[u])continue;37done[u]=1;38for(inti=h[u];i;i=e[i].ne){39intv=e[i].v,w=e[i].w;40if(d[v]>d[u]+w){41d[v]=d[u]+w;42if(!done[v])q.push(hn(v,d[v]));//xiaoyouhua43}44}45}46}47intmain(){48n=read();m=read();s=read();49for(inti=1;i<=m;i++){u=read();v=read();w=read();ins(u,v,w);}50dij(s);51for(inti=1;i<=n;i++)printf("%d",d[i]);52} (3)dijkstra+配对堆 380ms 吊打用SLF优化的spfa啊啊啊啊啊 1#include2#include3#include4#include5#include6#definepapair7#definempmake_pair8usingnamespacestd;9usingnamespace__gnu_pbds;10typedef__gnu_pbds::priority_queue<pa,greater,thin>heap;11constintN=1e4+5,M=5e5+5,INF=2147483647;12inlineintread(){13charc=getchar();intx=0,f=1;14while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}15while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}16returnx*f;17}18intn,m,s,u,v,w;19structedge{20intv,ne,w;21}e[M];22inth[N],cnt=0;23inlinevoidins(intu,intv,intw){24cnt++;25e[cnt].v=v;e[cnt].w=w;e[cnt].ne=h[u];h[u]=cnt;26}2728heapq;29heap::point_iteratorit[N];30intd[N];31voiddij(ints){32for(inti=1;i<=n;i++)d[i]=INF;33d[s]=0;34it[s]=q.push(mp(0,s));35while(!q.empty()){36intu=q.top().second;q.pop();37for(inti=h[u];i;i=e[i].ne){38intv=e[i].v,w=e[i].w;39if(d[v]>d[u]+w){40d[v]=d[u]+w;41if(it[v]!=0)q.modify(it[v],mp(d[v],v));42elseit[v]=q.push(mp(d[v],v));43}44}45}46}47intmain(){48n=read();m=read();s=read();49for(inti=1;i<=m;i++){u=read();v=read();w=read();ins(u,v,w);}50dij(s);51for(inti=1;i<=n;i++)printf("%d",d[i]);52} 2.判负环 VijosP1053Easy sssp 1#include2#include3#include4#include5usingnamespacestd;6constintN=1e3+5,M=1e5+5,INF=1e9+5;7inlineintread(){8charc=getchar();intx=0,f=1;9while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}10while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}11returnx*f;12}13intn,m,s,u,v,w;14structedge{15intv,ne,w;16}e[M+N];17inth[N],cnt=0;18inlinevoidins(intu,intv,intw){19cnt++;20e[cnt].v=v;e[cnt].w=w;e[cnt].ne=h[u];h[u]=cnt;21}22inlinevoidlop(int&x){x++;if(x==N)x=1;}23intq[N],head=1,tail=1,inq[N];24intd[N],nc[N];25boolspfa(ints){26head=tail=1;27for(inti=1;i<=n;i++)d[i]=INF,inq[i]=nc[i]=0;28q[tail]=s;inq[s]=nc[s]=1;lop(tail);29d[s]=0;30while(head!=tail){31intu=q[head];inq[u]=0;lop(head);32for(inti=h[u];i;i=e[i].ne){33intv=e[i].v,w=e[i].w;34if(d[v]>d[u]+w){35d[v]=d[u]+w;36if(!inq[v]){37inq[v]=1;q[tail]=v;lop(tail);38if(++nc[v]>n)returnfalse;39}40}41}42}43returntrue;44}45intmain(){46n=read();m=read();s=read();47for(inti=1;i<=m;i++){48u=read();v=read();w=read();49if(u==v&&w<0){printf("-1");return0;}50if(u!=v)ins(u,v,w);51}5253intss=n+1;//超级源54for(inti=1;i<=n;i++)ins(ss,i,0);55intflag=spfa(ss);56if(!flag){printf("-1");return0;}57spfa(s);58for(inti=1;i<=n;i++){59if(d[i]>=INF)printf("NoPath\n");60elseprintf("%d\n",d[i]);61}62} 3.最小生成树 洛谷P3366 kruskal 1#include2#include3#include4#include5usingnamespacestd;6constintN=5005,M=2e5+5,INF=1e9+5;7inlineintread(){8charc=getchar();intx=0,f=1;9while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}10while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}11returnx*f;12}13intn,m,u,v,w;14intcnt=0;15structedge{16intu,v,w;17booloperator<(constedge&r)const{returnw<r.w;}18}e[M];19intfa[N];20inlineintfind(intx){returnx==fa[x]?x:fa[x]=find(fa[x]);}21intkruskal(){22intans=0,cnt=0;23for(inti=1;i<=n;i++)fa[i]=i;24sort(e+1,e+1+m);25for(inti=1;i<=m;i++){26intu=e[i].u,v=e[i].v,w=e[i].w;27intf1=find(u),f2=find(v);28if(f1!=f2){29ans+=w;30fa[f1]=f2;31cnt++;32if(cnt==n-1)break;33}34}35returnans;36}37intmain(){38n=read();m=read();39for(inti=1;i<=m;i++){40e[i].u=read();e[i].v=read();e[i].w=read();41}42intans=kruskal();43printf("%d",ans);44} 4.floyd (1)传递闭包 d[i][j]=d[i][j]||(d[i][k]&&d[k][j]) (2)最小环 Vijos P1046观光旅行 1#include2#include3#include4#include5usingnamespacestd;6constintN=105,M=1e4+5,INF=1e8+5;//1E9+1E9+1E9溢出7inlineintread(){8charc=getchar();intx=0,f=1;9while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}10while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}11returnx*f;12}13intn,m,u,v,w,g[N][N];14intd[N][N],ans=INF;15voidfloyd(){16ans=INF;17for(intk=1;k<=n;k++){18for(inti=1;i<=k-1;i++)19for(intj=i+1;j<=k-1;j++)20ans=min(ans,g[i][k]+g[k][j]+d[i][j]);21for(inti=1;i<=n;i++)22for(intj=1;j<=n;j++)23d[i][j]=min(d[i][j],d[i][k]+d[k][j]);24}2526}27intmain(){28while(scanf("%d%d",&n,&m)!=EOF){29for(inti=1;i<=n;i++)for(intj=i+1;j<=n;j++)d[i][j]=d[j][i]=g[i][j]=g[j][i]=INF;30for(inti=1;i<=m;i++){31u=read();v=read();w=read();32d[u][v]=d[v][u]=g[u][v]=g[v][u]=w;33}34floyd();35if(ans==INF)puts("Nosolution.");36elseprintf("%d\n",ans);37}38} 5.割点 洛谷P3388 1#include2#include3#include4#include5usingnamespacestd;6constintN=1e5+5,M=1e5+5,INF=1e9+5;7inlineintread(){8charc=getchar();intx=0,f=1;9while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}10while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}11returnx;12}13intn=0,m,u,v;14structedge{15intv,ne;16}e[M<<1];17inth[N],cnt=0;18inlinevoidins(intu,intv){19cnt++;20e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;21cnt++;22e[cnt].v=u;e[cnt].ne=h[v];h[v]=cnt;23}24intdfn[N],low[N],dfc=0,iscut[N];25voiddfs(intu,intfa){26dfn[u]=low[u]=++dfc;27intchild=0;28for(inti=h[u];i;i=e[i].ne){29intv=e[i].v;30if(!dfn[v]){31child++;32dfs(v,u);33low[u]=min(low[u],low[v]);34if(low[v]>=dfn[u])iscut[u]=1;35}elseif(v!=fa)low[u]=min(low[u],dfn[v]);36}37if(fa==0&&child==1)iscut[u]=0;38}39intmain(){40n=read();m=read();41for(inti=1;i<=m;i++){u=read();v=read();ins(u,v);}42for(inti=1;i<=n;i++)if(!dfn[i])dfs(i,0);4344intans=0;45for(inti=1;i<=n;i++)if(iscut[i])ans++;46printf("%d\n",ans);47for(inti=1;i<=n;i++)if(iscut[i])printf("%d",i);48} 6.tarjan 强连通分量 POJ2186 1#include2#include3#include4#include5#include6usingnamespacestd;7constintN=1e4+5,M=5e4+5;8typedeflonglongll;9inlineintread(){10charc=getchar();intx=0,f=1;11while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}12while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}13returnx*f;14}15intn,m,u,v;16structedge{17intv,ne;18}e[M];19inth[N],cnt=0;20inlinevoidins(intu,intv){21cnt++;22e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;23}24intdfn[N],belong[N],low[N],dfc,scc,st[N],top;25intsize[N];26voiddfs(intu){27dfn[u]=low[u]=++dfc;28st[++top]=u;29for(inti=h[u];i;i=e[i].ne){30intv=e[i].v;31if(!dfn[v]){32dfs(v);33low[u]=min(low[u],low[v]);34}elseif(!belong[v])35low[u]=min(low[u],dfn[v]);36}37if(low[u]==dfn[u]){38scc++;39while(true){40intx=st[top--];41belong[x]=scc;42size[scc]++;43if(x==u)break;44}45}46}47intoutd[N],ind[N],ans;48voidpoint(){49for(intu=1;u<=n;u++)50for(inti=h[u];i;i=e[i].ne){51intv=e[i].v;52if(belong[u]!=belong[v])outd[belong[u]]++,ind[belong[v]]++;53}54}55intmain(){56n=read();m=read();57for(inti=1;i<=m;i++){u=read();v=read();ins(u,v);}58for(inti=1;i<=n;i++)if(!dfn[i])dfs(i);59point(); 60for(inti=1;i<=scc;i++){61if(outd[i]==0){62if(ans){ans=0;break;}63elseans=size[i]; 64}65}66printf("%d",ans);67} 7.二分图染色 1boolcolor(intu,intc){2col[u]=c; 3for(inti=h[u];i;i=e[i].ne){4intv=e[i].v;5if(col[u]==col[v])returnfalse;6if(!col[v]&&!color(v,3-c))returnfalse;7}8returntrue;9} 8.二分图最大匹配 洛谷P3386 1#include2#include3#include4#include5usingnamespacestd;6constintN=1005;7inlineintread(){8charc=getchar();intx=0,f=1;9while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}10while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}11returnx*f;12}13intn,m,s,u,v;14structedge{15intv,ne;16}e[N*N<<1];17inth[N],cnt=0;18inlinevoidins(intu,intv){19cnt++;20e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;21}22intvis[N],le[N];23boolfind(intu){24for(inti=h[u];i;i=e[i].ne){25intv=e[i].v;26if(!vis[v]){27vis[v]=1;28if(!le[v]||find(le[v])){29le[v]=u;30returntrue;31}32}33}34returnfalse;35}36intans=0;37voidhungary(){38for(inti=1;i<=n;i++){39memset(vis,0,sizeof(vis));40if(find(i))ans++; 41}42}43intmain(){44n=read();m=read();intt=read();45for(inti=1;i<=t;i++){u=read();v=read();if(v>m)continue;ins(u,v);}46ans=0;47hungary();48printf("%d\n",ans);49} 9、tarjan缩点 洛谷p3387 1#include2#include3#include4#defineN100055#defineM1000056#defineINF1e97usingnamespacestd;8inttot,nxt[M],point[N],v[M],low[N],Dfn[N],nn,cnt,a[N],c[N],x[M],y[M];9inttot1,nxt1[M],point1[N],v1[M],f[N],out[N],stack[N],num,belong[N],ans;10boolvis[N];11voidaddline(intx,inty){++tot;nxt[tot]=point[x];point[x]=tot;v[tot]=y;}12voidaddline1(intx,inty){++tot1;nxt1[tot1]=point1[x];point1[x]=tot1;v1[tot1]=y;} 13voidtarjan(intx)14{15Dfn[x]=low[x]=++nn;vis[x]=1;stack[++cnt]=x;16for(inti=point[x];i;i=nxt[i]) 17if(!Dfn[v[i]])18{19tarjan(v[i]);20low[x]=min(low[x],low[v[i]]);21}22elseif(vis[v[i]])low[x]=min(low[x],Dfn[v[i]]);2324if(low[x]==Dfn[x])25{26num++;27while(stack[cnt]!=x)28{29c[num]+=a[stack[cnt]];30belong[stack[cnt]]=num;31vis[stack[cnt]]=0;32cnt--;33}34c[num]+=a[stack[cnt]];35belong[stack[cnt]]=num;36vis[stack[cnt]]=0;37cnt--;38}39}40voiddp(intx,intfa)41{42if(vis[x])return;43f[x]=c[x];vis[x]=1;intmaxx=0;44for(inti=point1[x];i;i=nxt1[i])45if(v1[i]!=fa)46{47dp(v1[i],x);48maxx=max(maxx,f[v1[i]]);49}50f[x]+=maxx;51}52intmain()53{54intn,m,i;55scanf("%d%d",&n,&m);56for(i=1;i<=n;i++)scanf("%d",&a[i]);57for(i=1;i<=m;i++)58{59scanf("%d%d",&x[i],&y[i]);60addline(x[i],y[i]);61}62for(i=1;i<=n;i++)63if(!Dfn[i])tarjan(i);64for(i=1;i<=m;i++)65if(belong[x[i]]!=belong[y[i]])66addline1(belong[x[i]],belong[y[i]]);67ans=-INF;68memset(vis,0,sizeof(vis));69for(i=1;i<=num;i++)70if(!vis[i])dp(i,0),ans=max(ans,f[i]);71printf("%d",ans);72} 数据结构 1.st表 1inta[N],f[N][21];23voidinit(intn){4for(inti=1;i<=n;i++)f[i][0]=a[i];56for(intj=1;j<=20;j++)7for(inti=1;i+(1<<j)-1<=n;i++)8f[i][j]=min(f[i][j-1],f[i+(1<<(j-1))][j-1]);9}1011intRMQ(intl,intr){12intk=log(r-l+1)/log(2);//2^k<=l~r13returnmin(f[l][k],f[r-(1<<k)+1][k]);14} 2.trie树 1intch[N*L][27],size=0,val[N*L];2voidinsert(chars[],intn,intid){3intu=0;4for(inti=1;i<=n;i++){5intv=s[i]-'a';6if(!ch[u][v])ch[u][v]=++size;7u=ch[u][v];8}9val[u]=id;//printf("ins%d%d\n",u,id);10} 3.单调栈 求最大全flag子矩阵 1voidsol(intflag){2memset(tot,0,sizeof(tot));3for(inti=1;i<=n;i++){4top=0;5for(intj=1;j<=m;j++){6if(a[i][j]==flag)tot[j]++;7elsetot[j]=0;8datat;9t.h=tot[j];t.l=1;t.pos=j;10while(top&&st[top].h>=t.h){11intl=st[top].l+j-1-st[top].pos,h=st[top].h;12ans1=max(ans1,min(l,h)*min(l,h));13ans2=max(ans2,l*h);14t.l+=st[top].l;15top--;16}17st[++top]=t;18}19while(top){20intl=st[top].l+m-st[top].pos,h=st[top].h;21ans1=max(ans1,min(l,h)*min(l,h));22ans2=max(ans2,l*h);23top--;24}25}26} 4.单调队列 q[]保存的是下标 //删除while(head<=tail&&q[head]<=i-k)head++;//也可能<//插入while(heada[i])tail--;//单增q[++tail]=i; 5.并查集 带权 1for(inti=1;i<=n;i++)fa[i]=i,d[i]=0,s[i]=1;23intfa[N],d[N],s[N];4inlineintfind(intx){5if(x==fa[x])returnx;6introot=find(fa[x]);7d[x]+=d[fa[x]];8returnfa[x]=root;9} 6.树状数组 1模板23intlowbit(intx)4{5returnx&(-x);6}7voidmodify(intx,intadd)//一维8{ 9while(x<=MAXN) 10{ 11a[x]+=add; 12x+=lowbit(x); 13}14}15intget_sum(intx)16{ 17intret=0; 18while(x!=0) 19{ 20ret+=a[x]; 21x-=lowbit(x); 22} 23returnret;24}25voidmodify(intx,inty,intdata)//二维26{27for(inti=x;i<MAXN;i+=lowbit(i))28for(intj=y;j<MAXN;j+=lowbit(j))29a[i][j]+=data;30}31intget_sum(intx,inty)32{33intres=0;34for(inti=x;i>0;i-=lowbit(i))35for(intj=y;j>0;j-=lowbit(j))36res+=a[i][j];37returnres;38} 7.线段树 1//下面是某线段树模板题的代码:2#include3#include4usingnamespacestd;56typedeflonglongLL;7staticconstintmaxm=1e6+10;8LLtree[maxm],lazy[maxm],A[maxm],left[maxm],right[maxm];9intn,m;1011voidbuild(intnum,intl,intr){12left[num]=l;right[num]=r;13intmid=(l+r)>>1;14if(l==r){tree[num]=A[l];return;}15build(num<<1,l,mid);16build(num<<1|1,mid+1,r);17tree[num]=tree[num<<1]+tree[num<<1|1];18}1920voidpushdown(intnum){21if(lazy[num]){22intmid=(left[num]+right[num])>>1;23tree[num<<1]+=(mid-left[num]+1)*lazy[num];24tree[num<<1|1]+=(right[num]-mid)*lazy[num];25lazy[num<<1]+=lazy[num];26lazy[num<<1|1]+=lazy[num];27lazy[num]=0;28}29}3031voidupdate(intnum,intl,intr,LLadd){32if(left[num]>=l&&right[num]<=r){33tree[num]+=(right[num]-left[num]+1)*add;34lazy[num]+=add;35return;36}37if(left[num]>r||right[num]<l)return;38pushdown(num);39update(num<<1,l,r,add);40update(num<<1|1,l,r,add);41tree[num]=tree[num<<1]+tree[num<<1|1];42}4344LLQuery(intnum,intl,intr){45if(left[num]>=l&&right[num]<=r)returntree[num];46if(left[num]>r||right[num]<l)return0;47LLret=0;48pushdown(num);49ret+=Query(num<<1,l,r);50ret+=Query(num<<1|1,l,r);51returnret;52}5354intmain(){55scanf("%d%d",&n,&m);56for(inti=1;i<=n;i++)scanf("%lld",&A[i]);57build(1,1,n);58for(inti=1;i<=m;i++){59intf,x,y;LLadd;60scanf("%d",&f);61switch(f){62case1:scanf("%d%d%lld",&x,&y,&add);update(1,x,y,add);break;63case2:scanf("%d%d",&x,&y);printf("%lld\n",Query(1,x,y));break;64default:printf("Orz%%%");break;65}66}6768return0;69} //以下是维护序列的代码:(支持乘法运算)#includetypedeflonglongLL;staticconstintmaxm=100005; LLA[maxm],pls[maxm<<2],mul[maxm<<2],tr[maxm<<2];intleft[maxm<<2],right[maxm<<2];intn,m; LLMOD;intbuild(intid,intl,intr){ left[id]=l;right[id]=r;mul[id]=1;if(l==r)returntr[id]=A[l]%MOD,0;intmid=(l+r)>>1; build(id<<1,l,mid); build(id<<1|1,mid+1,r); tr[id]=(tr[id<<1]+tr[id<<1|1])%MOD; }voidpushdown(intid){intl=left[id];intr=right[id];intmid=(l+r)>>1; pls[id<<1]=(pls[id<<1]*mul[id]%MOD+pls[id])%MOD; pls[id<<1|1]=(pls[id<<1|1]*mul[id]%MOD+pls[id])%MOD; mul[id<<1]=(mul[id]*mul[id<<1])%MOD; mul[id<<1|1]=(mul[id]*mul[id<<1|1])%MOD; tr[id<<1]=(tr[id<<1]*mul[id]%MOD+pls[id]*(mid-l+1)%MOD)%MOD; tr[id<<1|1]=(tr[id<<1|1]*mul[id]%MOD+pls[id]*(r-mid)%MOD)%MOD; mul[id]=1;pls[id]=0; }voidmodify(intid,intl,intr,intc,intopt){if(left[id]>=l&&right[id]<=r){if(opt==1){ mul[id]=(mul[id]*c)%MOD; pls[id]=(pls[id]*c)%MOD; tr[id]=(tr[id]*c)%MOD; }elseif(opt==2){ pls[id]=(pls[id]+c)%MOD; tr[id]=(tr[id]+(LL)c*(right[id]-left[id]+1)%MOD)%MOD; }return; }if(right[id]r)return; pushdown(id); modify(id<<1,l,r,c,opt); modify(id<<1|1,l,r,c,opt); tr[id]=(tr[id<<1]+tr[id<<1|1])%MOD; } LLQuery(intid,intl,intr){if(left[id]>=l&&right[id]<=r)returntr[id]%MOD;if(left[id]>r||right[id]<l)return0; pushdown(id);return(Query(id<<1,l,r)%MOD+Query(id<<1|1,l,r)%MOD)%MOD; }intmain(){intopt,l,r,c; scanf("%d%lld",&n,&MOD);for(inti=1;i<=n;i++)scanf("%lld",&A[i]); scanf("%d",&m); build(1,1,n); while(m--){ scanf("%d",&opt);if(opt!=3){ scanf("%d%d%d",&l,&r,&c); modify(1,l,r,c,opt); }elsescanf("%d%d",&l,&r),printf("%lld\n",Query(1,l,r)%MOD); }return0; } 8、网络最大流 #includeusingnamespacestd;#defineinf233333333#defineilinlineilintgi() {inta=0;charx=getchar();boolf=0;while((x<'0'||x>'9')&&x!='-')x=getchar();if(x=='-')x=getchar(),f=1;while(x>='0'&&x<='9')a=a*10+x-48,x=getchar();returnf?-a:a; }constintN=100005,M=10005;structedge{intto,net,w; }e[N*2];inth[M],cnt=1,n,m,s,t,ans,flow,dis[M]; queue<int>q; ilvoidadd(intu,intv,intw) { e[++cnt].to=v,e[cnt].w=w,e[cnt].net=h[u],h[u]=cnt; } ilintbfs() { memset(dis,-1,sizeof(dis)); dis[s]=0; q.push(s);while(!q.empty()) {intu=q.front(); q.pop();for(inti=h[u];i;i=e[i].net) {intv=e[i].to;if(dis[v]==-1&&e[i].w>0){dis[v]=dis[u]+1;q.push(v);} } }returndis[t]!=-1; } ilintdfs(intu,intop) {if(u==t)returnop;intflow=0,tmp=0;for(inti=h[u];i;i=e[i].net) {intv=e[i].to;if(dis[v]==dis[u]+1&&e[i].w>0){ tmp=dfs(v,min(op,e[i].w));if(!tmp)continue; op-=tmp;flow+=tmp; e[i].w-=tmp;e[i^1].w+=tmp;if(!op)break;//returntmp;} }returnflow; }intmain() { n=gi(),m=gi(),s=gi(),t=gi();intu,v,w;for(inti=1;i<=m;i++) { u=gi(),v=gi(),w=gi(); add(u,v,w),add(v,u,0); }while(bfs())ans+=dfs(s,inf); printf("%d\n",ans);return0; }

优秀的个人博客,低调大师

RAID原理分析总结-运维工作记录-51CTO博客

一.简介 Raid全称" 独立磁盘冗余阵列", 有时也简称磁盘阵列(Disk Array)。 RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。组成磁盘阵列的不同方式成为RAID级别。 Raid的级别: Raid 0,Raid 1,Raid 0+1(也称Raid 10),Raid 2,Raid 3,Raid 5,Raid 6,Raid 7,Raid 53. 原理分析 我们为什么需要磁盘阵列? 目前人们逐渐认识了磁盘阵列技术。磁盘阵列技术可以详细地划分若干个级别0-5RAID技术,并且又发展了所谓的RAID Level 10,30,50的新的级别。RAID是廉价冗余磁盘阵列(Redundant Array of Inexpensive Disk)的简称。用RAID的好处简单的说就是:安全性高,速度快,数据容量超大。 某些级别的RAID技术可以把速度提高到单个硬盘驱动器的400%。磁盘阵列把多个硬盘驱动器连接在一起协同工作,大大提高了速度,同时把硬盘系统的可靠性提高到接近无错的境界。这些"容错"系统速度极快,同时可靠性极高。 本文将讨论这些新技术,以及不同级别RAID的优缺点。 硬盘数据跨盘(Spanning) 数据跨盘技术使多个硬盘像一个硬盘那样工作,这使用户通过组合已有的资源或增加一些资源来廉价地突破现有的硬盘空间限制。 常用的是下面的几种RAID形式 (1)RAID 0 RAID 0又称为Stripe(条带化)或Striping,它代表了所有RAID级别中最高的存储性能。RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。 RAID 0结构图解 如图所示:系统向四个磁盘组成的逻辑硬盘(RADI 0 磁盘组)发出的I/O数据请求被转化为4项操作,其中的每一项操作都对应于一块物理硬盘。我们从图中可以清楚的看到通过建立RAID 0,原先顺序的数据请求被分散到所有的两块硬盘中同时执行。从理论上讲,四块硬盘的并行操作使同一时间内磁盘读写速度提升了4倍。 但由于总线带宽等多种因素的影响,实际的提升速率肯定会低于理论值,但是,大量数据并行传输与串行传输比较,提速效果显著显然毋庸置疑。 RAID 0的缺点是不提供数据冗余,因此一旦用户数据损坏,损坏的数据将无法得到恢复。RAID 0具有的特点,使其特别适用于对性能要求较高,而对数据安全不太在乎的领域,如图形工作站等。对于个人用户,RAID 0也是提高硬盘存储性能的绝佳选择。 (2)RAID 1 RAID 1又称为Mirror或Mirroring(镜像),它的宗旨是最大限度的保证用户数据的可用性和可修复性。RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上。 RAID 1结构图解 如图所示:当读取数据时,系统先从RAID 0的源盘读取数据,如果读取数据成功,则系统不去管备份盘上的数据;如果读取源盘数据失败,则系统自动转而读取备份盘上的数据,不会造成用户工作任务的中断。当然,我们应当及时地更换损坏的硬盘并利用备份数据重新建立Mirror,避免备份盘在发生损坏时,造成不可挽回的数据损失。 由于对存储的数据进行百分之百的备份,在所有RAID级别中,RAID 1提供最高的数据安全保障。同样,由于数据的百分之百备份,备份数据占了总存储空间的一半,因而Mirror(镜像)的磁盘空间利用率低,存储成本高。Mirror虽不能提高存储性能,但由于其具有的高数据安全性,使其尤其适用于存放重要数据,如服务器和数据库存储等领域. (3)RAID 0+1 正如其名字一样RAID 0+1是RAID 0和RAID 1的组合形式,也称为RAID 10。 以四个磁盘组成的RAID 0+1为例,其数据存储方式如图所示:RAID 0+1是存储性能和数据安全兼顾的方案。它在提供与RAID 1一样的数据安全保障的同时,也提供了与RAID 0近似的存储性能。 由于RAID 0+1也通过数据的100%备份功能提供数据安全保障,因此RAID 0+1的磁盘空间利用率与RAID 1相同,存储成本高。 RAID-10结构图解 RAID 0+1的特点使其特别适用于既有大量数据需要存取,同时又对数据安全性要求严格的领域,如银行、金融、商业超市、仓储库房、各种档案管理等。 (4)RAID 3 RAID 3是把数据分成多个"块",按照一定的容错算法,存放在N+1个硬盘上,实际数据占用的有效空间为N个硬盘的空间总和,而第N+1个硬盘上存储的数据是校验容错信息,当这N+1个硬盘中的其中一个硬盘出现故障时,从其它N个硬盘中的数据也可以恢复原始数据,这样,仅使用这N个硬盘也可以带伤继续工作(如采集和回放素材),当更换一个新硬盘后,系统可以重新恢复完整的校验容错信息。由于在一个硬盘阵列中,多于一个硬盘同时出现故障率的几率很小,所以一般情况下,使用RAID3,安全性是可以得到保障的。 RAID 3结构图解 与RAID0相比,RAID3在读写速度方面相对较慢。使用的容错算法和分块大小决定RAID使用的应用场合,在通常情况下,RAID3比较适合大文件类型且安全性要求较高的应用,如视频编辑、硬盘播出机、大型数据库等. (5)RAID 5 RAID 5 是一种存储性能、数据安全和存储成本兼顾的存储解决方案。 以四个硬盘组成的RAID 5为例,其数据存储方式如图4所示:图中,P0为D0,D1和D2的奇偶校验信息,其它以此类推。由图中可以看出,RAID 5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。 RAID 5结构图解 RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比Mirror低而磁盘空间利用率要比Mirror高。RAID 5具有和RAID 0相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较低。 (6)RAID 6 RAID 6等级是在RAID 5基础上,为了进一步加强数据保护而设计的一种RAID方式,实际上是一种扩展RAID 5等级。与RAID 5的不同之处于除了每个硬盘上都有同级数据XOR校验区外,还有一个针对每个数据块的XOR校验区。当然,当前盘数据块的校验数据不可能存在当前盘而是交错存储的,具体形式见图。 这样一来,等于每个数据块有了两个校验保护屏障(一个分层校验,一个是总体校验),因此RAID 6的数据冗余性能相当好。但是,由于增加了一个校验,所以写入的效率较RAID 5还差,而且控制系统的设计也更为复杂,第二块的校验区也减少了有效存储空间。由于RAID 6相对于RAID 5在校验方面的微弱优势和在性能与性价比方面的较大劣势,RAID 6等级基本没有实际应用过,只是对更高级的数据的冗余进行的一种技术与思路上的尝试 RAID-6结构图解 (7)RAID 7 RAID 7等级是至今为止,理论上性能最高的RAID模式,因为它从组建方式上就已经和以往的方式有了重大的不同。基本成形式见图,你会发现在,以往一个硬盘是一个组成阵列的"柱子",而在RAID 7中,多个硬盘组成一个"柱子",它们都有各自的通道,也正因为如此,你可以把这个图分解成一个个硬盘连接在主通道上,只是比以前的等级更为细分了。这样做的好处就是在读/写某一区域的数据时,可以迅速定位,而不会因为以往因单个硬盘的限制同一时间只能访问该数据区的一部分,在RAID 7中,以前的单个硬盘相当于分割成多个独立的硬盘,有自己的读写通道,效率也就不言自明了。 然而,RAID 7的设计与相应的组成规模注定了它是一揽子承包计划。总体上说,RAID 7是一个整体的系统,有自己的操作系统,有自己的处理器,有自己的总线,而不是通过简单的插卡就可以实现的。归纳起来,RAID 7的主要特性如下: 所有的I/O传输都是异步的,因为它有自己独立的控制器和带有Cache的接口,与系统时钟并不同步所有的读与写的操作都将通过一个带有中心Cache的高速系统总线,我们称之为X-Bus专用的校验硬盘可以用于任何通道带有完整功能的即时操作系统内嵌于阵列控制微处理器,这是RAID 7的心脏,它负责各通道的通信以及Cache的管理,这也是它与其他等级最大不同之一 连通性:可增至12个主机接口 扩展性:线性容量可增至48个硬盘 开放式系统,运用标准的SCSI硬盘、标准的PC总线、主板以及SIMM内存 高速的,集成Cache的数据总线(就是上文提到的X-bus) 在Cache内部完成校验生成工作 多重的附加驱动可以随时热机待命,提高冗余率和灵活性易管理性:SNMP(Simple Network Management Protocol,简单网络管理协议) 可以让管理员远程监视并实现系统控制按照RAID 7设计者的说法,这种阵列将比其他RAID等级提高150-600%写入时的I/O性能,虽然这引起了不小的争议。 RAID-7结构图解 (8)RAID 53 与RAID 10一样,RAID 53也是一种组合RAID 等级,但不要拿RAID 10的观点套用,认为它是RAID 5和RAID 3的组合,事实上,RAID 53应该称为RAID 30或RAID 03(也可以说是RAID 0+3),即RAID 3与RAID 0的组合,具体形式见图:与图1相对比,可以发现,RAID 53中将备份等级由RAID 0变为了RAID 3,也就是说把原来的镜像阵列变成了分割式(Segments)存储阵列。但它不是对每个RAID 0硬盘都用一个RAID 3系统进行,而是用RAID 3对所有数据进行冗余存储(或者说是校验),而且读写与ECC效率比RAID 0要高不少。 值得注意的是,RAID 3在RAID 53的数据传输中占有相当重要的位置。在介绍RAID 3时,曾说过它有很高的读写传输率。因此,在进行大数据量吞吐时,由于RAID 3的传输率高的缘故,RAID 53的性能要比RAID 10好(因为冗余备份的时间缩短)。而且,借助于RAID 0,其I/O带宽并没有降低。不过,从它的配置形式上就可以看出来,它的存储空间利用率要比RAID 10低,为40%。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册