【C# 数据结构】图(Graph)开篇
概览
图(Graph)涉及到的概念
连通图
无向图中,如果任意两个顶点之间都能够连通,则称此无向图为连通图。例如,图 2 中的无向图就是一个连通图,因为此图中任意两顶点之间都是连通的。
连通分量
若无向图不是连通图,但图中存储某个子图符合连通图的性质,则称该子图为连通分量。如图 3 所示,虽然图 3a) 中的无向图不是连通图,但可以将其分解为 3 个"最大子图"(图 3b)),它们都满足连通图的性质,因此都是连通分量。
极大连通子图
前面讲过,由图中部分顶点和边构成的图为该图的一个子图,但这里的子图指的是图中"最大"的连通子图(也称"极大连通子图")。
强连通图
有向图中,若任意两个顶点 Vi 和 Vj,满足从 Vi 到 Vj 以及从 Vj 到 Vi 都连通,也就是都含有至少一条通路,则称此有向图为强连通图。如图 4 所示就是一个强连通图。
强连通分量
与此同时,若有向图本身不是强连通图,但其包含的最大连通子图具有强连通图的性质,则称该子图为强连通分量。
如下图 所示,整个有向图虽不是强连通图,但其含有两个强连通分量。
生成树
对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为生成树。
如下图 所示,图 1a) 是一张连通图,图 1b) 是其对应的 2 种生成树。
连通图中,由于任意两顶点之间可能含有多条通路,遍历连通图的方式有多种,往往一张连通图可能有多种不同的生成树与之对应。
连通图中的生成树必须满足以下 2 个条件:
- 包含连通图中所有的顶点n条边;
- 任意两顶点之间有且仅有一条通路,即n-1条边;
因此,连通图的生成树具有这样的特征,即生成树中边的数量 = 顶点数 - 1
。
生成森林
生成树是对应连通图来说,而生成森林是对应非连通图来说的。
我们知道,非连通图可分解为多个连通分量,而每个连通分量又各自对应多个生成树(至少是 1 棵),因此与整个非连通图相对应的,是由多棵生成树组成的生成森林。
如图 2 所示,这是一张非连通图,可分解为 3 个连通分量
其中各个连通分量对应的生成树如图 3 所示:
注意,图 3 中列出的仅是各个连通分量的其中一种生成树。
因此,多个连通分量对应的多棵生成树就构成了整个非连通图的生成森林。
树
连通没有回路的无向图
森林
连通分量均为树的图
图数据库
未来几年,数据分析产业将迎来巨变,中国企业采用图数据库的比例不断上升,图数据库作为传统关系型数据库优化方向,在有一定数据量积累的行业,TigerGraph可以提供更深入的见解和更好的业务效果。
随着社交、电商、金融、零售、物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数据量呈几何级数增长,亟需一种支持海量复杂数据关系运算的数据库,
图数据库
应运而生。
世界上很多著名的公司都在使用图数据库。比如:
- 社交领域:Facebook, Twitter,Linkedin用它来管理社交关系,实现好友推荐
- 零售领域:eBay,沃尔玛使用它实现商品实时推荐,给买家更好的购物体验
- 金融领域:摩根大通,花旗和瑞银等银行在用图数据库做风控处理
- 汽车制造领域:沃尔沃,戴姆勒和丰田等顶级汽车制造商依靠图数据库推动创新制造解决方案
- 电信领域:Verizon, Orange和AT&T 等电信公司依靠图数据库来管理网络,控制访问并支持客户360
- 酒店领域:万豪和雅高酒店等顶级酒店公司依使用图数据库来管理复杂且快速变化的库存
既然图数据库应用这么广泛,越来越多的企业和开发者开始使用它,那它究竟什么过人之处呢,下面我们来揭开它的神秘面纱。
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。
图数据库GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。例如,在一个典型的社交网络中,常常会存在“谁认识谁,上过什么学校,常住什么地方,喜欢什么餐馆”之类的查询,传统关系型数据库对于超过3张表关联的查询十分低效难以胜任,但图数据库可轻松应对社交网络的各种复杂存储和查询场景。
- MySQL: 存储应用核心数据
- Mongo: 存储一些不合适用关系型数据库存储的数据,比如说图片,文档等
- Redis: 缓存热点数据,比如说用户 cookies,应用中的计数器等
-
图数据库的代表Neo4j
目前市面上有很多图数据库,例如:Neo4J、ArangoDB、OrientDB、FlockDB、GraphDB、InfiniteGraph、Titan、TigerGraph、Cayley等,但目前较为活跃可以称之为代表的当属Neo4j。
neo4j browser
neo4j browser 有点类似于 mysql 里面的 workbench 或者 mongo 里面的 RoboMongo,说白了就是一个数据库的客户端,但是 neo4j browser 做得非常友好,甚至看上去,用起来就像是一个成熟的产品一样。记得很久很久以前我在跟团队分享 neo4j 的时候,团队里面对 neo4j 不熟悉的人还问我这个哪个产品,交互做得很不错。amazing!
图数据库与传统关系型数据库相比的优势
传统的关系型数据库和图数据库无论是在模型,存储以及查询优化上都存在极大的差异。比如社交用户关系中的2度查询请求,传统关系型数据库处理起来至少是秒级别的,3度查询更差甚至无法支持。
对比而言,图数据库能够轻松支持这类场景,性能往往能够轻松的达到传统关系型数据库的十倍乃至几十倍。这种性能的差异并非简单的调优问题,而是更深层次的数据库建模以及内核层面决定的。因此,图数据库在基因层面更适合高度连接数据集的处理。
相关文章:https://www.cnblogs.com/ljhdo/p/5531467.html