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

如何在Python中使用邻接表表示并存储超大规模图

夜辰酱_5885

夜辰酱_5885

发布时间:2026-10-26 06:54:39

|

124人浏览过

|

来源于php中文网

原创

邻接表应优先用 dict(如 defaultdict(list))而非 list 存储节点,因其支持任意可哈希键(字符串、UUID等),查找 O(1),避免强制映射导致的内存翻倍与失效风险。

如何在python中使用邻接表表示并存储超大规模图

邻接表该用 dict 还是 list 存储节点?

超大规模图(比如亿级边、千万级节点)下,dict 是更实际的选择。用 list 要求节点 ID 必须是连续非负整数且从 0 开始,现实中几乎不可控——ID 可能是字符串、UUID、稀疏长整型(如 Twitter 用户 ID)。用 dict 支持任意可哈希键,查找节点 O(1),插入也无压力。

常见错误:强行把字符串 ID 映射成连续索引再用 list,结果多一层哈希映射 + 索引转换,内存翻倍、GC 压力大、还容易因 ID 更新失效出错。

  • 用 graph = defaultdict(list) 或 graph = {} + setdefault
  • 如果需频繁查某条边是否存在,改用 defaultdict(set),但注意 set 不保序、不支持重复边
  • 避免用 list + index() 查邻居——那是 O(n),邻接表优势全丢

如何高效添加亿级边而不爆内存?

一次性读完所有边再构建图,很容易触发内存峰值——特别是 CSV/JSON 流式数据。正确做法是边读边建,控制中间结构最小化。

典型坑:用 pandas.read_csv 加载整个边表,再 iterrows() 插入,DataFrame 本身就会吃掉几倍于原始文本的内存。

立即学习“Python免费学习笔记(深入)”;

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载
  • 用原生 csv.reader 或 open().readline() 流式解析,每行只生成两个节点 ID 和(可选)权重
  • 插入时直接调用 graph[u].append(v),别先存到临时列表再 extend
  • 若边含权重,存为 tuple(如 (v, w))或 namedtuple,别用 dict——每个字典对象有 ~240 字节固定开销
  • 考虑用 array.array('I') 或 numpy.ndarray 存纯整数邻居(仅当 ID 确实是小整数且数量稳定)

需要支持反向边或度数查询时怎么设计?

很多算法(如 PageRank、BFS 反向传播、入度统计)要快速获取「谁指向我」或「我的入度/出度」。邻接表天然只存出边,硬查所有节点的邻居列表是 O(|V|+|E|),不可接受。

不要临时重建反向图——那等于存两份边,内存直接 ×2。应按需叠加轻量结构。

  • 出度:直接 len(graph[u]),O(1)
  • 入度:维护单独的 in_degree = defaultdict(int),加边 u → v 时同步 in_degree[v] += 1
  • 反向邻接表:用 rev_graph = defaultdict(list),加边时同时做 rev_graph[v].append(u);若只偶尔查,可封装成懒加载属性,避免初始化全量
  • 慎用 Counter 替代 defaultdict(int)——它底层是 dict,但接口更重,且不支持就地更新语法

磁盘溢出或图太大放不下内存怎么办?

当图规模超过物理内存(比如 50GB 边数据配 64GB RAM),Python 的纯内存邻接表必然失败。这时必须放弃「全图驻留」假设,转向外部存储或近似结构。

别指望 shelve 或 sqlite 当邻接表用——单次查邻居会变成磁盘随机 IO,比内存慢 10⁵ 倍,算法直接卡死。

  • 优先用内存映射(mmap)+ 自定义二进制格式:把节点偏移、邻居起止位置预存,用指针跳转,IO 局部性好
  • 对静态图,用 networkx.read_edgelist(format='adjlist') 配合 create_using=nx.DiGraph,它内部做了缓冲,但仍是全内存
  • 真正超大规模场景(如工业级图学习),直接切到 PyTorch Geometric 的 NeighborSampler 或 DGL 的图分区——它们把图切块、异步加载、GPU 友好
  • 如果只是需要采样子图,用 random.sample(graph[u], k=100) 比遍历全部邻居现实得多

邻接表不是银弹;当节点 ID 不规整、边流式到达、内存见顶时,结构选择本质是做 trade-off:你要快查,还是要省内存,还是得支持动态更新——三者很难同时满足。

热门AI工具

更多
SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

DeepSeek

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

UP简历
UP简历 Hot

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

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

豆包大模型

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

切问学术

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

WorkBuddy

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

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1811

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4784

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1769

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

28537

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3427

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3427

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1223

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

616

2023.08.10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

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

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