数据结构七——图

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。

1 基本概念

顶点、边
微信:A和B是好朋友,B也和A是好朋友,A和B之间有条边。
入度:每个顶点链接的边的个数=每个人好朋友的个数。
微博:A关注B,B不用关注A。从A到B有条边,边是有方向的。这样的图是有向图。入度:有多条边指向这个节点。出度:从这个顶点出发,有几条边。
QQ亲密度:两个人经常聊天,那亲密度高。这就是带权重的边。

2 图的存储方式

2.1 邻接矩阵

用二维数组存储图。
优点:表示简单;存取速度快;便于做矩阵运算。
缺点:在无向图中,只需要一半的空间即可,浪费空间。在稀疏图中,节点数量很多,每个节点的边的数量却很少,造成空间浪费。
在这里插入图片描述

2.2 邻接表

邻接表很像一张哈希表。链表的部分可以使用高效的动态数据结构:红黑树、跳表、散列表、有序动态数组(数据有序排列的动态数组)。
在这里插入图片描述

3 微信如何存储关系数据

我们先考虑一下微信用户关系,我们希望有的操作是:
1 判断用户A是否是用户B的好朋友。
2 能够按照首字母排序用户A的好朋友,且分页获取。
3 用户A删除用户B为好友,同时B的好友列表中也没有A。

首先用邻接表存储微信用户关系。因为这是一个稀疏图。微信用户几亿,每个人的好友最多也就500。
  用户A:用户B->用户C->用户X
  用户B:用户A->用户H->用户Z
  …
判断用户A是不是用户B的好朋友,只需要在用户A的好友列表查找一下即可。好友列表可以用跳表存储。因为跳表可以按照首字母排序。排序好的好友列表也可以提高查询速度。第2个要求满足了。

用户A删除好友用户B,需要同时在用户A的好友列表删除B、用户B的好友链表删除A。跳表删除操作时间复杂度O(logn)。

对于数据量小的情况可以存储在内存。当用户量多的时候,一台机器就解决不了。可以使用哈希计算,将用户好友列表分别存储在不同的服务器。也可以使用外部存储(关系型数据库)存储数据。

4 BFS and DFS

广度优先搜索BFS和深度优先搜索DFS是最基本的搜索算法。
BFS是以起始点为圆心,一层一层由近及远的访问节点,形状像波纹。

DFS是以起始点开始,一头道走到目的地,然后再返回上一层选择另外一条路,形状像折线,像迷宫。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[CTF][Web][PHP][JavaScript]弱类型问题

弱类型问题 类型转换是无法避免的问题。例如需要将GET或者是POST的参数转换为int类型,或者是两个变量不匹配的时候,PHP会自动地进行变量转换。但是PHP是一个弱类型的语言,导致在进行类型转换的时候会存在很多意想不到的问题。 如果在用于密…

大数据学习第1天

大数据学习第一天 Linux系统文件目录初记 /bin:存放ls、rm、mv等常用可执行文件(命令)的地方。 /sbin:存放系统管理常用的程序,如fdisk、mount等命令,与/bin不同的是该目录下存放的程序是root等系统管理员使用的程序。 /boot:用…

第四十六期:最近程序员频繁被抓,如何避免面向监狱编程?!

最近,有很多关于程序员被抓甚至被判刑的新闻在朋友圈疯传:"某程序员因为接了个外包,帮别人写了个软件,结果这个软件被用于赌博导致被抓。某公司利用爬虫抓取用户信息,最后被发现,导致该公司的程序员被…

算法五——字符串匹配(上)

文章内容、图片均来自极客时间。 如何借助哈希算法实现高效字符串匹配 1 概念和用途 字符串匹配:查找一个字符串A在字符串B中是否出现,这个过程就是字符串匹配。A称为模式串,B称为主串。主串的长度记为n,模式串长度记为m。n>…

[hackinglab][CTF][综合关][2020] hackinglab 综合关 writeup

[hackinglab][CTF][解密关][2020] hackinglab 上传关 writeup 综合关 1 渗透测试第一期 概要:在于绑定admin用户,进行修改密码!(手机号码仔细!!!) 知识点:在进行绑定的…

selenium3+python-多窗口、句柄(handle)

一、获取当前窗口句柄 1.元素有属性,浏览器的窗口其实也有属性的,只是你看不到,浏览器窗口的属性用句柄(handle)来识别。 2.人为操作的话,可以通过眼睛看,识别不同的窗口点击切换。但是脚本没长…

算法五——字符串匹配(中)

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 1文本编辑器中的查找功能怎么实现 在word中有一个功能:查找某个字符串,将其替换为另一个字符串,就会用到这个功能。 需要新算法的…

第四十七期:漫画:什么是公有云、私有云和混合云?

为了方便大家理解,我们尽量用通俗的语言和举例子的方式讲解,并且文中还配备了漫画供大家参考学习。 作者:漫话编程 为了方便大家理解,我们尽量用通俗的语言和举例子的方式讲解,并且文中还配备了漫画供大家参考学习。 …

[攻防世界][CTF][2020][MISC] 攻防世界 MISC writeup

咕咕咕 新手练习区精选write up https://blog.csdn.net/weixin_43550772/article/details/106028357 https://www.cnblogs.com/sesefadou/p/11788090.html https://blog.csdn.net/qq_42906381/article/details/105335021

第四十八期:你太菜了,竟然不知道Code Review?

我一直认为Code Review(代码审查)是软件开发中的优秀实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题。 作者:宝玉 我一直认为Code Review(代码审查)是软件开发中的优秀实践之一,可以有效提高整体代码质量&…

算法五——字符串匹配(下)KMP

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 KMP,是三个作者(D.E.Knuth,J.H.Morris和V.R.Pratt)的简称。   KMP算法和BM一样,也是一个字符串匹配算法。…

点击回车事件(登录)

//增加点击回车事件$(document).keypress(function(e) {var eCode e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;//eCode等于13代表回车事件if (eCode 13){//ajax提交表单,若成功跳转页面,不成功提示输入的账号密码错误!$.ajax({type : …

修电脑

无法启动 无法找到驱动 需要进BISO BIOS SECURE BOOT disabled 后即可进入 重装系统 1.启动盘制作 https://rufus.ie/ 2. F10(各品牌不同 ) 选择U盘重装即可

第四十九期:大牛总结的MySQL锁优化,写得太好了!

随着 IT 技术的飞速发展,各种技术层出不穷,让人眼花缭乱。尽管技术在不断更新换代,但是有些技术依旧被一代代 IT 人使用至今。 作者:崔皓 随着 IT 技术的飞速发展,各种技术层出不穷,让人眼花缭乱。尽管技…

数据结构八-Trie树

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 1 Trie树的使用场景 搜索引擎中的搜索词建议。当你在搜索引擎中输入词,搜索引擎提示给你一个词的列表,帮助你快速输入想搜索的词。 这个功能…

[安全模型][Cambria Math][A][]敌手A-> 怎么打出来?

字母A 设置字体 “Cambria Math” -> 𝒜

第五十期:详解语音识别技术的发展

在我们的生活中交流起着重要的作用。人类从符号开始,然后发展到用语言交流,再后来出现了计算和通信技术。在某些情况下,机器不仅与人类交流,也与机器之间交流。计算机和通信技术创造了互联网世界,正如我们所知的物联网…

打造移动测试云平台

转载来源:https://blog.csdn.net/toafu/article/details/80598977 背景 移动技术发展到现阶段,原生、混合式技术发展的足够成熟,可以无缝融合。而随着移动技术的发展和革新,移动领域的测试技术和实践也有了一定发展:工…

AC自动机:多模式串匹配实现敏感词过滤

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 1 敏感词过滤场景 在很多支持用户发表内容的网站,都有敏感词过滤替换的功能。例如将一些淫秽、反动内容过滤掉,或者替换为****。在一些社交类…

[毕业论文][格式修改][摘要修改]毕业论文格式内容修改小技巧

背景 毕业季临近,盲审前对毕业论文进行最后一次逐行逐字修改,遇到的一些问题和解决办法 1.自动生成的目录行距可能不一。需要选中后单独再段落种设置行距 2.符号问题 配合查找发现问题 双引号 英文 “English” 中文“” 逗号 英文 English, 中文 &am…