首页 > 其他分享 >为什么QQ能帮你找到失散多年的兄弟?----图论

为什么QQ能帮你找到失散多年的兄弟?----图论

时间:2023-01-03 16:08:38浏览次数:34  
标签:QQ 链表 存储 失散多年 ---- 二维 数组 顶点 节点


为什么QQ能帮你找到失散多年的兄弟?----图论_二维数组

为什么qq里“可能认识的人”功能推荐的如此精准?为什么两个没有什么联系的朋友会相互认识?

一切的背后到底是道德的沦丧,还是人性的扭曲 ? 让我们走进图的内心世界!

为什么QQ能帮你找到失散多年的兄弟?----图论_二维数组_02

什么是图?

微信好友之间的关系像一张巨大的网络,朋友的朋友可能是自己的朋友,所以用一种叫 图 的数据结构储存起来,元素和元素之间都可能发生关系。

为什么QQ能帮你找到失散多年的兄弟?----图论_数组_03

下面要开始干货了!非战斗成员请撤离,图有两种有向图和无向图,唯一的区别就是有木有箭头,是不是看起来很像关系网。

为什么QQ能帮你找到失散多年的兄弟?----图论_数组_04

为什么QQ能帮你找到失散多年的兄弟?----图论_链表_05

来说说它的细节

为什么QQ能帮你找到失散多年的兄弟?----图论_链表_06

图上的东西全都有名字,圆圈 圈着字母叫 顶点,是最基本的组成元素。

为什么QQ能帮你找到失散多年的兄弟?----图论_二维数组_07

连接各个顶点的线就是 边,图 可以没有 边,但是不能没有 顶点 。连接某个顶点的边数量叫做这个顶点的 度。比如上图中的 C 有三个度。

为什么QQ能帮你找到失散多年的兄弟?----图论_二维数组_08

有向图多一个概念,那就是出度,入度。比如 C 顶点,有两个箭头指向自己,一个箭头指出来,就是两 入度,一 出度。

为什么QQ能帮你找到失散多年的兄弟?----图论_二维数组_09

如何存储图

经过我精彩的表达,想必你肯定知道了图的基本概念,作为一个技术人员,刨根问底才是我们的特色。有没有想过长的这么疯狂的一个数据结构,他是怎么存的?

为什么QQ能帮你找到失散多年的兄弟?----图论_链表_10

因为要表现出来每个顶点都有可能指向其他顶点,所以有两种常见的储存方式,二维数组 和 邻接表。

使用邻接矩阵(二维数组)存储

下面就是非常明显的二维数组存储图的例子。

为什么QQ能帮你找到失散多年的兄弟?----图论_二维数组_11

上图是 8 * 8 的二维数组,竖着和横着都是各个 顶点,比如 开发 、设计 、工程 都是顶点。每一行都代表当前这个人对其他 8 个人的看法(包括自己),在图里就只有 有关系 和 没关系 两种看法而已。

例如上图, A - G 共 7 个顶点,所以需要 7 * 7 的二维数组。横坐标代表着当前的节点,纵坐标代表当前节点和其他节点的关系,加入当前节点有 出度,那么当前的值就为 1 ,入度不管,拆解如下:

-

A

B

C

D

E

F

G

A

0

1

0

0

0

0

0

B

0

0

1

0

1

1

0

C

0

0

0

0

1

0

0

D

0

0

1

0

0

0

0

E

0

1

0

1

0

0

0

F

0

0

0

0

0

0

1

G

0

0

0

0

0

0

0

头发少叫头发稀疏,1 少就叫 稀疏矩阵,指的就是图的各个顶点之间的联系很少,存了没意义的 0 ,使得大量的二维数组数组空间被浪费。

使用邻接表(链表)存储

为什么QQ能帮你找到失散多年的兄弟?----图论_数组_12

如上面的 图,对其使用 链表 来存储,略像哈希表,每行都是一个节点,每列也只存储这个节点的所有 出度。

为什么QQ能帮你找到失散多年的兄弟?----图论_二维数组_13

两种存储方式的比较

我们要根据不同的情况来决定不同的存储数据结构:

  1. 数组:浪费空间,但是速度快。适合处理数据不大的,只要数据不大,优先选用数组
  2. 链表:节省空间,但是速度慢。数据大的时候,使用邻接表(链表来存储)


为什么QQ能帮你找到失散多年的兄弟?----图论_数组_14


标签:QQ,链表,存储,失散多年,----,二维,数组,顶点,节点
From: https://blog.51cto.com/u_12392289/5986053

相关文章

  • 我发现了一个高效学习的新方法!
    在体验了公司新出的几个 约炮 交友产品后,我又开始学习了!学了一种非常新颖的读书方式,分享给大家。一种新的读书方式RIA如下图,是取自彭小六花了3年时间建立的一张阅读地......
  • 消息服务 + Serverless 函数计算如何助力企业降本提效?
    作者:柳下背景介绍消息队列服务(下文均以MessageService命名)作为云计算PaaS领域的基础设施之一,其高并发、削峰填谷的特性愈发受到开发者关注。MessageService对上承接......
  • 学小程序还不懂代码结构?——每天三分钟玩转小程序2
    上回我们分分钟创建了一个小程序,有没有拿给心爱的女神秀一下呢?扫这里的二维码就可以了,手机上就能看了,还等什么!就是下面这个性感的界面,看到我骚气的微信头像了。小程序有哪些......
  • 为什么明明你做了很多事,到头来领导还是给你打了差评?
    这个问题源于一个队友的疑惑,原问题是我在国企工作,平时工作之外,多做了很多事情,由于领导不懂技术,年底了,把我当作一般科室人员处理了,感觉看不到未来,有点迷茫,熊哥怎么看?不知道你......
  • 小熊测评:记账也可以建立后宫群?
    我发现一个神奇的应用!你有没有想过每天和你的爱豆聊天?我已经和司徒沫在一起一天了!她对我的称呼改成了顾未易,感觉超棒,有身临其境的感觉。这是一个记账的应用,我每次记账都有相......
  • 官方golang包管理神器,值得一试!
    这是一篇很短的文章,诉说着高效的包管理工具​​gomod​​我们上次说过如何让一个项目在​​Goland​​编译器跑起来,但是要自己去下包,要花不少时间找包下包,是不是很麻烦?......
  • mariadb/mysql建立主从
    前提本方案是两节点主从方案,只要建立好主从,及时数据库挂掉又拉起主从模式不会失效。保证时间同步保证都安装了​​mysql/mariadb​​建立主从的过程这里介绍的是两节点主从......
  • 教你摸清 Linux PC 的性能底细?
    基准测试是一项测试或一系列测试,用来确定某个计算机硬件运行起来的状况有多好。在许多情况下,“基准测试”实际上等同于“压力测试”。通过测试硬件的极限,然后可以将测得的结......
  • 阿里云微服务引擎 MSE 11 月份产品动态
    ......
  • 编程三分钟的打算
    我很喜欢cloudman大神说的一句话:我坚信最好的学习方法就是分享。同时也是对自己学习和实践的总结。对于知识,只有把它写出来并能够让其他人理解,才能说明真正的掌握了这项知识......