当前位置: 首页 > article >正文

离散数学实战:用Python解决图论问题(附完整代码示例)

离散数学实战用Python解决图论问题附完整代码示例当你在社交软件上查看可能认识的人推荐或是用导航软件规划最短路线时背后都在运行图论算法。作为离散数学中最具工程价值的领域图论将现实世界的复杂关系抽象为顶点和边的组合。本文不会重复课本上的数学符号推导而是带你用Python的NetworkX库解决5个实际场景中的图论问题包括社交网络中的影响力节点识别物流配送最优路径规划课程安排中的拓扑排序通信网络可靠性检测交通流量最大传输计算1. 环境配置与图论基础在开始之前确保你的Python环境已安装以下库pip install networkx matplotlib pandas图论中最基础的是邻接表表示法。让我们用Python构造一个简单的社交关系图import networkx as nx # 创建有向图实例 social_graph nx.DiGraph() # 添加节点用户 users [Alice, Bob, Charlie, Diana] social_graph.add_nodes_from(users) # 添加边关注关系 relationships [(Alice, Bob), (Bob, Charlie), (Alice, Diana), (Diana, Bob)] social_graph.add_edges_from(relationships) # 可视化 nx.draw(social_graph, with_labelsTrue, node_colorlightblue)这段代码会生成一个包含4个用户及其关注关系的可视化图。在NetworkX中nx.Graph()创建无向图nx.DiGraph()创建有向图add_node()添加单个节点add_nodes_from()批量添加节点add_edge()和add_edges_from()添加边提示在Jupyter Notebook中运行时需要额外安装ipympl并执行%matplotlib widget获得交互式图表2. 社交网络影响力分析识别社交网络中的关键影响者是图论的经典应用。我们使用两种常用指标2.1 度中心性Degree Centrality计算节点直接连接数量的标准化值degree_centrality nx.degree_centrality(social_graph) print(度中心性结果:) for node, score in sorted(degree_centrality.items(), keylambda x: x[1], reverseTrue): print(f{node}: {score:.3f})输出示例Alice: 0.667 Bob: 0.333 Diana: 0.333 Charlie: 0.0002.2 PageRank算法Google创始人提出的影响力评估算法pagerank nx.pagerank(social_graph, alpha0.85) print(\nPageRank结果:) for node, score in sorted(pagerank.items(), keylambda x: x[1], reverseTrue): print(f{node}: {score:.3f})对比两种算法的结果差异节点度中心性PageRankAlice0.6670.368Bob0.3330.342Diana0.3330.241Charlie0.0000.049可以看到虽然Alice的直接连接最多但Bob由于处在信息传递的关键位置其实际影响力PageRank与Alice接近。3. 最短路径规划实战假设我们要为外卖平台设计路径规划系统给定以下配送点及其道路连接delivery_graph nx.Graph() locations [餐厅, A小区, B写字楼, C学校, D商场] routes [(餐厅, A小区, {weight: 8}), (餐厅, B写字楼, {weight: 5}), (A小区, D商场, {weight: 6}), (B写字楼, C学校, {weight: 3}), (C学校, D商场, {weight: 4})] delivery_graph.add_edges_from(routes)3.1 Dijkstra算法实现def show_shortest_path(graph, start, end): path nx.shortest_path(graph, start, end, weightweight) distance nx.shortest_path_length(graph, start, end, weightweight) print(f{start} → {end} 的最短路径: { → .join(path)}) print(f总距离: {distance}公里) show_shortest_path(delivery_graph, 餐厅, D商场)输出结果餐厅 → D商场 的最短路径: 餐厅 → B写字楼 → C学校 → D商场 总距离: 12公里3.2 多点配送路线优化对于需要访问多个地点的场景可以使用近似算法from itertools import permutations def optimal_delivery_route(graph, start, points): min_distance float(inf) best_route None for sequence in permutations(points): current_distance 0 current_path [start] prev start for point in sequence: current_distance nx.shortest_path_length(graph, prev, point, weightweight) current_path.append(point) prev point if current_distance min_distance: min_distance current_distance best_route current_path return best_route, min_distance route, dist optimal_delivery_route(delivery_graph, 餐厅, [A小区, C学校]) print(f最优路线: { → .join(route)}) print(f总距离: {dist}公里)注意当配送点超过10个时应考虑使用遗传算法等启发式方法因为穷举所有排列的计算量会急剧增大4. 课程安排与拓扑排序大学课程之间存在先后修关系可以用有向无环图(DAG)表示courses nx.DiGraph() course_deps [(数学基础, 数据结构), (数据结构, 算法分析), (程序设计, 数据结构), (算法分析, 机器学习), (离散数学, 算法分析)] courses.add_edges_from(course_deps)4.1 拓扑排序实现try: schedule list(nx.topological_sort(courses)) print(合理的课程安排顺序:) for i, course in enumerate(schedule, 1): print(f{i}. {course}) except nx.NetworkXUnfeasible: print(课程安排存在循环依赖无法排序)输出示例1. 离散数学 2. 程序设计 3. 数学基础 4. 数据结构 5. 算法分析 6. 机器学习4.2 关键路径分析计算课程安排的最早完成时间def calculate_course_timeline(graph): timeline {} for node in nx.topological_sort(graph): max_prev_time max([timeline.get(prev, 0) for prev in graph.predecessors(node)], default0) timeline[node] max_prev_time 1 # 假设每门课程需要1个学期 return timeline print(\n各课程的最早开始学期:) for course, term in calculate_course_timeline(courses).items(): print(f{course}: 第{term}学期)5. 网络连通性检测对于通信网络设计我们需要确保系统在部分节点失效时仍能保持连通network nx.Graph() network.add_edges_from([(A, B), (B, C), (C, D), (D, E), (E, F), (A, F)])5.1 关键节点识别articulation_points list(nx.articulation_points(network)) print(f关键节点移除会导致网络断开: {, .join(articulation_points)})5.2 网络鲁棒性评估def evaluate_robustness(graph): metrics { 节点数量: graph.number_of_nodes(), 边数量: graph.number_of_edges(), 平均聚类系数: nx.average_clustering(graph), 全局效率: nx.global_efficiency(graph), 连通性: 是 if nx.is_connected(graph) else 否 } return metrics print(\n网络质量评估:) for k, v in evaluate_robustness(network).items(): print(f{k}: {v})6. 最大流问题实战模拟城市交通网络中的车流优化flow_network nx.DiGraph() flow_network.add_edges_from([ (源点, A, {capacity: 10}), (源点, B, {capacity: 5}), (A, C, {capacity: 8}), (B, C, {capacity: 3}), (C, 汇点, {capacity: 12}) ])6.1 Ford-Fulkerson算法应用flow_value, flow_dict nx.maximum_flow(flow_network, 源点, 汇点) print(f\n网络最大流量: {flow_value}) print(\n各路段流量分配:) for u, flows in flow_dict.items(): for v, flow in flows.items(): if flow 0: print(f{u} → {v}: {flow}/{flow_network[u][v][capacity]})6.2 最小割集分析cut_value, partition nx.minimum_cut(flow_network, 源点, 汇点) print(f\n最小割集容量: {cut_value}) print(f割集划分: {partition})在实际项目中我发现当网络规模较大时预先使用nx.generators模块创建随机图进行算法压力测试很有必要。例如用nx.connected_watts_strogatz_graph(100, 4, 0.3)生成具有小世界特性的测试网络。

相关文章:

离散数学实战:用Python解决图论问题(附完整代码示例)

离散数学实战:用Python解决图论问题(附完整代码示例) 当你在社交软件上查看"可能认识的人"推荐,或是用导航软件规划最短路线时,背后都在运行图论算法。作为离散数学中最具工程价值的领域,图论将现…...

PyTorch实战:从零构建ResNet50模型(CIFAR10训练+测试+ONNX转换)

1. ResNet50模型基础认知 第一次接触ResNet50时,我被它的"残差连接"设计惊艳到了。传统神经网络随着层数增加会出现梯度消失问题,而ResNet通过跨层直连通道,让信息能够无损传递到更深层。这就好比在高速公路上设置应急车道&#xf…...

从浮点到定点:手把手教你用MATLAB自定义函数实现加减乘除(避坑溢出与精度损失)

从浮点到定点:手把手教你用MATLAB自定义函数实现加减乘除(避坑溢出与精度损失) 当算法需要从实验室环境迁移到嵌入式设备时,浮点运算的硬件开销常常成为瓶颈。这时定点数运算就像一把手术刀——精准控制每个比特的用途&#xff0c…...

AlertDialog高斯模糊进阶指南:Android12新特性与兼容方案对比

AlertDialog高斯模糊进阶指南:Android12新特性与兼容方案对比 在移动应用设计中,视觉层次的营造往往决定了用户体验的优劣。当用户与AlertDialog交互时,背景的高斯模糊效果能够有效聚焦注意力,同时保持界面连贯性。Android 12引入…...

告别序列‘拉直’的暴力美学:手把手复现MaIR,体验保持图像局部与连续性的Mamba新玩法

告别序列“拉直”的暴力美学:手把手复现MaIR,体验保持图像局部与连续性的Mamba新玩法 在计算机视觉领域,图像修复任务(如去噪、超分、去模糊)一直是研究热点。传统方法往往将2D图像“拉直”为1D序列进行处理&#xff0…...

vLLM-v0.17.1应用场景:智能硬件语音助手离线LLM推理部署

vLLM-v0.17.1应用场景:智能硬件语音助手离线LLM推理部署 1. 技术背景与需求分析 智能硬件语音助手正在经历从云端依赖向本地化处理的转变。传统方案面临三大痛点: 网络延迟问题:云端API调用导致响应速度受限隐私安全顾虑:用户对…...

避开这3个坑!MIPI走线设计如何减少对GSM信号的干扰(含阻抗匹配计算)

避开这3个坑!MIPI走线设计如何减少对GSM信号的干扰(含阻抗匹配计算) 在消费电子硬件设计中,MIPI接口与射频信号的共存问题一直是工程师面临的棘手挑战。特别是当设备需要同时支持高清显示和GSM通信功能时,MIPI信号对GS…...

从SolidWorks到Gazebo:手把手教你用SW2URDF插件为ROS2 Humble机械臂建模(含ROS2适配避坑指南)

从SolidWorks到Gazebo:ROS2 Humble机械臂建模全流程实战 1. 工业设计与机器人仿真的桥梁搭建 当机械工程师第一次接触机器人仿真时,往往会面临一个关键挑战:如何将精心设计的SolidWorks模型转化为可在Gazebo中运行的仿真模型?这个…...

OpenH264:开源H.264编解码库的技术实现与工程实践

OpenH264:开源H.264编解码库的技术实现与工程实践 【免费下载链接】openh264 Open Source H.264 Codec 项目地址: https://gitcode.com/gh_mirrors/op/openh264 OpenH264作为Cisco维护的开源H.264编解码库,在实时视频通信、流媒体传输和嵌入式设…...

bert-base-chinese新手教程:从零开始学习中文预训练模型部署与使用

bert-base-chinese新手教程:从零开始学习中文预训练模型部署与使用 1. 认识bert-base-chinese模型 1.1 什么是BERT模型 BERT(Bidirectional Encoder Representations from Transformers)是Google在2018年发布的预训练语言模型。它通过大规…...

基于智能体(Agent)的自动化图像工作流:Wan2.2-I2V-A14B与任务编排

基于智能体(Agent)的自动化图像工作流:Wan2.2-I2V-A14B与任务编排 1. 引言:当图像生成遇上智能体 想象一下这样的场景:你需要为电商平台制作一组节日主题的广告图,包含特定风格的背景、商品展示和人物互动…...

Qwen3-Reranker-0.6B效果展示:中英术语对照表构建中的跨语言排序

Qwen3-Reranker-0.6B效果展示:中英术语对照表构建中的跨语言排序 1. 跨语言术语排序的技术挑战 在全球化信息时代,构建准确的中英术语对照表已成为跨语言交流、技术文档翻译和国际合作的重要基础。传统方法往往面临几个核心痛点: 语义鸿沟…...

Qwen3.5-4B-Claude-Opus实战案例:用推理链输出提升技术沟通准确性

Qwen3.5-4B-Claude-Opus实战案例:用推理链输出提升技术沟通准确性 1. 模型介绍与核心能力 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个基于Qwen3.5-4B的推理蒸馏模型,专门针对结构化分析、分步骤回答以及代码与逻辑类问题的处理能力进…...

单片机通用按键处理模块设计与实现

单片机通用按键处理模块设计与实现1. 项目概述1.1 模块功能特性本按键处理模块为单片机系统提供了一套完整的按键事件处理解决方案,具有以下核心功能:基础按键检测:支持按下(PRESS)和释放(RELEASE)事件检测高级触发模式:长按触发(…...

构建大规模数据导入系统:技术选型与工程实践

在现代数据密集型应用中,将海量数据高效、可靠地导入目标存储系统是一项基础但极具挑战的任务。表面上看,“写入数据库”只是一个简单的操作;然而,当数据规模达到TB级、业务逻辑涉及合并去重、系统架构包含多个存储引擎时&#xf…...

3分钟掌握Balena Etcher:安全可靠的跨平台镜像烧录工具

3分钟掌握Balena Etcher:安全可靠的跨平台镜像烧录工具 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher Balena Etcher是一款专为简化操作系统镜像部署…...

Kali Linux安装失败?5个常见报错解决方案(虚拟机专用版)

Kali Linux虚拟机安装报错实战指南:5个高频问题深度解析 当你兴致勃勃地在VMware里安装Kali Linux准备大展身手时,突然弹出的报错信息就像一盆冷水浇下来。别急着重装——90%的安装问题都有现成解决方案。本文将聚焦虚拟机环境下最棘手的5类安装报错&…...

Linux服务器GPU环境配置避坑指南:从Nvidia驱动到PyTorch Lightning一站式搞定

Linux服务器GPU环境配置避坑指南:从Nvidia驱动到PyTorch Lightning一站式搞定 当你第一次在Linux服务器上配置GPU环境时,可能会遇到各种令人抓狂的问题:驱动安装失败、CUDA版本不兼容、PyTorch无法识别GPU...这些问题足以让任何一个开发者崩溃…...

Win11Debloat终极指南:5分钟让你的Windows系统焕然一新

Win11Debloat终极指南:5分钟让你的Windows系统焕然一新 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以简化和…...

Shield CLI:MySQL 插件 vs phpMyAdmin:轻量 Web 数据库管理工具对比

phpMyAdmin 是 MySQL Web 管理的事实标准,1998 年发布至今,功能覆盖面极广。但在"查个数据、改个表、看看关系"这类日常场景下,它的部署成本和界面复杂度显得有些过重。Shield CLI MySQL 插件是一个 7MB 的单二进制 Web 客户端&…...

3步颠覆性解决方案:零成本条码生成技术让企业彻底告别付费依赖

3步颠覆性解决方案:零成本条码生成技术让企业彻底告别付费依赖 【免费下载链接】librebarcode Libre Barcode: barcode fonts for various barcode standards. 项目地址: https://gitcode.com/gh_mirrors/li/librebarcode Libre Barcode开源字体库通过字体化…...

深度解析PDFMathTranslate:揭秘AI如何实现毫秒级学术文档翻译与精准排版保留

深度解析PDFMathTranslate:揭秘AI如何实现毫秒级学术文档翻译与精准排版保留 【免费下载链接】PDFMathTranslate PDF scientific paper translation with preserved formats - 基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/Op…...

CasRel模型LaTeX学术论文辅助工具:自动提取相关工作和贡献

CasRel模型LaTeX学术论文辅助工具:自动提取相关工作和贡献 每次打开一篇新的学术论文,尤其是那些动辄几十页的综述或顶会文章,你是不是也有点头大?密密麻麻的文字里,最关键的信息——“别人做了什么”、“他们有什么不…...

EVA-01场景应用:电商商品分析、文档信息提取,真实工作流分享

EVA-01场景应用:电商商品分析、文档信息提取,真实工作流分享 1. 从科幻到现实:EVA-01的商业价值 在电商运营和文档处理的日常工作中,我们常常面临这样的挑战:海量商品图片需要人工标注关键信息,繁杂的合同…...

LFM2.5-1.2B-Thinking-GGUF基础教程:单页Web界面交互逻辑与后处理机制

LFM2.5-1.2B-Thinking-GGUF基础教程:单页Web界面交互逻辑与后处理机制 1. 模型与平台介绍 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,专为低资源环境优化设计。这个镜像采用内置GGUF模型文件和llama.cpp运行时,提供了…...

8255A工作方式0实战:手把手教你用汇编语言驱动八路抢答器LED与数码管

8255A工作方式0实战:从零构建八路抢答器驱动框架 记得第一次在实验室见到8255A芯片时,那块黑色的DIP封装器件看起来平平无奇,直到它让八颗LED随着我的汇编指令跳起"灯光芭蕾"。本文将带你深入这个经典可编程并行接口芯片的实战应用…...

保姆级教程:在Windows 11上为PyTorch配置CUDA 12.x和cuDNN(含环境变量疑难杂症排查)

Windows 11深度学习环境配置全攻略:从CUDA安装到PyTorch GPU加速实战 每次打开PyCharm准备大展身手时,看到那个令人心碎的False——torch.cuda.is_available()的输出结果,是不是感觉整个深度学习梦想都被泼了冷水?别担心&#xf…...

20吨燃气蒸汽锅炉实力厂家/支持上门安装调试

燃气蒸汽锅炉,认准源头实力厂家,不仅能买到品质过硬的设备,更能享受到省心便捷的上门安装调试服务,免去自行安装的繁琐与隐患,让设备快速投入平稳运行。我们作为深耕锅炉制造行业的实力厂家,具备正规生产资…...

K230目标检测实战:手把手教你用Labelme标注数据并一键转成VOC格式(附避坑指南)

K230目标检测实战:高效数据标注与VOC格式转换全攻略 当你第一次接触K230开发板进行目标检测项目时,数据准备往往是最大的拦路虎。特别是从原始图片到符合AI_Cube要求的VOC格式数据集,这个过程充满了各种"坑"。本文将分享一套经过实…...

半导体放电管TSS选型避坑指南:从RS485到CAN接口的实战经验分享

半导体放电管TSS选型避坑指南:从RS485到CAN接口的实战经验分享 在工业通信设备的电路保护设计中,浪涌防护是一个不可忽视的关键环节。作为一名长期奋战在一线的硬件工程师,我深知半导体放电管(TSS)选型过程中的种种陷阱…...