讲师中心 微信公众号
AI工具推荐 视频效率加速

数据结构中怎么用图的邻接表存储社交关系网络图

轻静吖_7734

轻静吖_7734

发布时间:2026-08-12 18:21:50

|

904人浏览过

|

来源于php中文网

原创

邻接表通过顶点数组与邻接链表组合存储社交网络:每个用户为顶点,关系为边,仅存真实连接,空间复杂度O(n+e),远优于邻接矩阵的O(n²);支持无向、有向、带权关系建模,并可扩展逆邻接表优化入度查询。

数据结构中怎么用图的邻接表存储社交关系网络图

用邻接表存储社交关系网络图,核心是把每个用户当作一个顶点,把“关注”或“互为好友”这种关系当作边,再为每个用户单独维护一份精简的连接列表——只存真实存在的关系,不浪费空间。

邻接表怎么组织社交数据

它由两部分组成:一个顶点数组(存所有用户),和一组链表(每个用户对应一条链表,里面是ta直接关联的人)。比如用户“Alice”在数组第0位,她的链表里只存“Bob”“Charlie”的编号或引用,而不是把全网几千万人都列出来。

  • 无向关系(如微信好友):A关注B,B也自动关注A → 边双向添加,即把B加进A的链表,同时把A加进B的链表
  • 有向关系(如微博关注):A关注B,但B不一定关注A → 只把B加进A的链表,不反向操作
  • 带权关系(如QQ亲密度):链表节点额外存一个weight字段,比如亲密度数值或互动频次

实际编码时的关键结构

以Python为例,最简洁实用的方式是用字典套列表:

graph = {
    "Alice": ["Bob", "Charlie"],
    "Bob": ["Alice", "David"],
    "Charlie": ["Alice", "David"],
    "David": ["Bob", "Charlie"]
}

这本质上就是邻接表的高层表达。若用C语言,则需定义顶点结构体和边节点链表,用指针串联;用Java可用HashMap>;关键不是语法,而是逻辑——每个键对应一个用户,值是ta直接关联的用户集合。

OpenJDK 24
OpenJDK 24

OpenJDK 24 Windows x64 官方参考实现(24+36),适合 Windows 环境进行 Java 开发、编译、运行和版本兼容性验证。

下载

为什么社交网络特别适合邻接表

现实中的社交图极度稀疏:一个普通用户可能有几百好友,但平台总用户数达上亿。邻接表空间复杂度是O(n + e),其中n是用户数、e是关系数;而邻接矩阵要O(n²),光存一个1亿用户的矩阵就需要10¹⁶字节,完全不可行。

  • 查某人所有好友:直接读取对应链表,时间复杂度O(k),k是好友数
  • 判断A是否关注B:需遍历A的链表,最坏O(k),但实际平均很快
  • 增删好友:只需在对应链表头或尾插入/删除节点,操作轻量

扩展考虑:入度与出度分离

对微博这类单向关注场景,如果既要查“谁关注了我”(入度),又要查“我关注了谁”(出度),单纯一张邻接表不够高效。这时可维护两张表:

  • out_list:标准邻接表,记录“我关注谁”
  • in_list:逆邻接表,记录“谁关注我”,构建时每加一条A→B边,就在B的in_list中加入A

虽然多占一倍空间,但换来O(1)级粉丝查询能力,在高并发主页访问场景下非常值得。

热门AI工具

更多
UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

相关专题

更多
treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2501

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

356

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

397

2026.01.06

C++ 数据结构与算法实现教程合集
C++ 数据结构与算法实现教程合集

以 C++ 为实现语言,系统讲解核心数据结构与算法,涵盖链表(单链表/双链表/环检测)、栈与队列(单调栈/优先队列)、二叉树(遍历/BST/AVL/红黑树)、哈希表(开地址法/链地址法)、图(邻接表/BFS/DFS/Dijkstra/拓扑排序)、常见排序算法(快排/归并/堆排/计数排序)的实现与复杂度分析,同时分享 LeetCode 刷题技巧、竞赛编程常用模板(二分/前缀和/滑动窗口/动态规划),帮助开发者夯实算法基础。

452

2026.05.09

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

0

2026.10.16

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

0

2026.10.16

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

0

2026.10.16

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

0

2026.10.16

Revel框架MVC路由与控制器
Revel框架MVC路由与控制器

本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

0

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn