并查集,以及可拆分并查集

普通并查集. 合并 均摊O(α(n)) 查询 均摊O(α(n))

 1 //常用版本
 2
 3 //Union Find
 4 int f[1005000];
 5
 6 void INIT(int size)
 7 { for(int i=0;i<=size;i++) f[i]=i; }
 8
 9 int findf(int x)
10 { return f[x]==x ? x : f[x]=findf(f[x]); };
11
12 int connect(int x)
13 { f[findf(a)]=findf(b); }

可拆分并查集. 最坏情况: 合并 O(n) 查询 O(n) 拆分 O(n)   平均情况: 合并 O(logn) 查询 O(logn) 拆分 O(logn)

 1 //可拆分版本
 2 //Union Find
 3 int f[1005000];
 4
 5 void INIT(int size)
 6 { for(int i=0;i<=size;i++) f[i]=i; }
 7
 8 int findf(int x)
 9 { for(;x!=f[x];x=f[x]); }
10
11 void setroot(int x)
12 { if(f[x]!=x) setroot(f[x]); f[x]=f[f[x]]=x; }
13
14 inline void link(int x,int y)
15 { setroot(x); f[x]=y; }
16
17 inline void cut(int x,int y)
18 { setroot(x); f[y]=y; }

可以看到后边这种比较像LCT...

时间: 2024-10-12 22:49:05

并查集,以及可拆分并查集的相关文章

从单机到集群会话的管理之集群模式二(更大的集群)

<从单机到集群会话的管理之集群模式一>中讲到的全节点复制的网络流量随节点数量增加呈平方趋势增长,也正是因为这个因素导致无法构建较大规模的集群,为了使集群节点能更加大,首要解决的就是数据复制时流量增长的问题,下面将介绍另外一种会话管理方式,每个会话只会有一个备份,它使会话备份的网络流量随节点数量的增加呈线性趋势增长,大大减少了网络流量和逻辑操作,可构建较大的集群. 下面看看这种方式具体的工作机制,集群一般是通过负载均衡对外提供整体服务,所有节点被隐藏在后端组成一个整体.前面各种模式的实现都无需负

mongodb3.6集群搭建:分片+副本集

mongodb是最常用的noSql数据库,在数据库排名中已经上升到了前五.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置服务器等.相关概念mongodb集群架构图: 从图中可以看到有四个组件:mongos.config server.shard.replica set.mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它

linux集群系列(1) --- Linux集群系统基础

一.简介     1.1. Linux集群系统包括集群节点和集群管理器两部分. 集群节点有时简称为节点.服务器或服务器节点,是提供处理资源的系统,它进行集群的实际工作.一般来讲,它必须进行配置才能成为集群的一部分,也必须运行集群的应用软件.应用软件可以是专用于集群的软件,也可以是设计用于分布式系统的标准软件. Linux集群管理器则是将节点捆绑在一起,以构成单一系统外观的逻辑结构,它用于将任务分解到所有的节点.集群因多种不同的原因而有着不同的类型,建立Linux集群的最直接原因是共享CPU资源,

分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用(主从.事务与锁.持久化)> 本文我们继续学习redis的高级特性--集群.本文主要内容包括集群搭建.集群分区原理和集群操作的学习. Redis集群简介 Redis 集群是3.0之后才引入的,在3.0之前,使用哨兵(sentinel)机制(本文将不做介绍,大家可另行查阅)来监控各个节点之间的状态.Redi

高可用集群HA之双机集群

HA:High Availability  高可用性:主要目的就是让运行在服务器上的服务尽可能减少的中断的技术,保证服务运行的连续性:原理如上图所示,本文实现双机集群系统,首先通关管理虚拟机LUCI服务对ClusterVM1.ClusterVM2进行管理,维护等工作,而他们之间沟通的桥梁是RICCI服务,所以ClusterVM1.ClusterVM2均安装RICCI服务.主要工作原理是ClusterVM1.ClusterVM2构成集群的双机,将其中一台作为活动机,也就是运行服务的主机(Clust

利用Docker部署mongodb集群--分片与副本集

环境 Docker version 1.6.2  mongodb 3.0.4 第一步  编写Dockerfile并生成镜像 主意包含两个Dockerfile镜像,一个mongod的,一个mongos(在集群中负责路由) 编写Mongod的Dockerfile: FROM ubuntu:14.04 RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 ENV MONGO_MAJOR 3.0 RUN ech

从单机到集群会话的管理之集群模式一

为什么要使用集群?主要有两方面原因:一是对于一些核心系统要求长期不能中断服务,为了提供高可用性我们需要由多台机器组成的集群:另外一方面,随着访问量越来越大且业务逻辑越来越复杂,单台机器的处理能力已经不足以处理如此多且复杂的逻辑,于是需要增加若干台机器使整个服务处理能力得到提升. 如果说一个web应用不涉及会话的话,那么做集群是相当简单的,因为节点都是无状态的,集群内各个节点无需互相通信,只需要将各个请求均匀分配到集群节点即可.但基本所有web应用都会使用会话机制,所以做web应用集群时整个难点在

函数依赖集闭包、属性集闭包和最小函数依赖集的求法。

函数依赖集的闭包 F:FD的集合称为函数依赖集. F闭包:由F中的所有FD可以推导出所有FD的集合,记为F+. 例1,对于关系模式R(ABC),F={A→B,B→C},求F+. 根据FD的定义,可推出F+={φ→φ,A→φ,A→A,A→B,A→C,A→AB,A→BC,A→ABC,…},共有43个FD.其中,φ表示空属性集. 属性集闭包 属性集闭包定义 :对F,F+中所有X→A的A的集合称为X的闭包,记为X+.可以理解为X+表示所有X可以决定的属性. 属性集闭包的算法: A+:将A置入A+.对每一

集群主要分成三大类 (高可用集群, 负载均衡集群,科学计算集群)

转自:http://blog.csdn.net/nick_php/article/details/52187905 高可用集群( High Availability Cluster) 负载均衡集群(Load Balance Cluster) 科学计算集群(High Performance Computing Cluster) 1.高可用集群(High Availability Cluster) 常见的就是2个节点做成的HA集群,有很多通俗的不科学的名称,比如"双机热备", "