Rust 机器学习图形库 petgraph

news2024/11/27 16:10:08

一、介绍

Petgraph 是一个开源的图数据结构库,提供了非常丰富的图形类型和算法,并且支持将图形以 Graphviz 格式输出,还允许你为图的节点和边赋予任意类型的数据,从而能够灵活地处理和表示复杂的数据关系。

Petgraph 支持边的方向性,即用户可以创建有向图和无向图,以满足不同场景下的需求。可以说 Petgraph 为开发者提供了强大的工具,以便在软件工程、数据分析和科学计算等领域中有效地处理和分析图结构数据。

二、核心部分

数据结构:Petgraph 库提供了四种不同风格的图实现,每种都针对不同的应用需求进行了特别优化。这些图实现在功能和性能之间提供了多样化的选择,使得开发者可以根据自己的具体需求,如数据处理的复杂性或对性能的要求,来选择最合适的图结构。

图遍历算法:库中内置了深度优先遍历(DFS)和广度优先遍历(BFS)等基本图遍历算法。这些算法是图分析的基础,能够帮助开发者探索和理解图中的结构和关系,对于图的搜索和问题解决非常关键。

丰富的图算法:不仅提供了基础的图遍历功能,还有一系列常用的图算法,如寻找最短路径的寻路算法等。这些算法能够应用于多种场景,例如网络分析、交通网络规划和社交网络分析等,极大地扩展了图数据结构的应用范围。

三、安装

安装非常简单,运行这个命令即可:

cargo add petgraph

四、示例

1.例子1
我们试图创建了一个空的无向图 graph,然后添加了三个节点,并保存了它们的索引。接着添加了两条边,连接了这些节点。最后使用 node_indices() 和 edge_indices() 方法遍历图中的节点和边,并打印它们的信息。

use petgraph::graph::{Graph};

fn main() {
    // 创建一个无向图
    let mut graph = Graph::<&str, &str>::new();

    // 添加节点并保存节点索引
    let a = graph.add_node("Node A");
    let b = graph.add_node("Node B");
    let c = graph.add_node("Node C");

    // 添加边
    graph.add_edge(a, b, "Edge AB");
    graph.add_edge(b, c, "Edge BC");

    // 遍历并打印图的节点和边
    for node in graph.node_indices() {
        println!("Node {}: {}", node.index(), graph[node]);
    }

    for edge in graph.edge_indices() {
        let (source, target) = graph.edge_endpoints(edge).unwrap();
        println!(
            "Edge from {} to {}: {}",
            source.index(),
            target.index(),
            graph[edge]
        );
    }
}

在这里插入图片描述
这样就一个简单的 petgraph 库用法示例了,可以根据自己的需求来创建、修改和操作图,以满足不同的应用场景。
2.例子2
这个使用 Dijkstra 算法计算从图中的每个节点到其他节点的最短路径时,输出的结果包括了从每个节点到其他节点的最短路径和对应的权重。

use petgraph::graph::{Graph, NodeIndex};
use petgraph::algo;

fn main() {
    // 创建一个有向图
    let mut graph = Graph::<(), i32>::new();

    // 添加节点并保存节点索引
    let nodes = graph.extend_with_edges(&[
        (0, 1), (0, 2), (0, 3), (1, 4), (1, 5), (2, 5), (2, 6), (3, 6), (4, 7), (5, 7), (6, 7)
    ]);

    // 对每个节点执行 Dijkstra 算法,并打印结果
    for start in graph.node_indices() {
        println!("Shortest path from node {:?}", start.index());

        // 使用 Dijkstra 算法找到从起始节点到其他节点的最短路径
        let result = algo::dijkstra(&graph, start, None, |e| *e.weight());

        // 打印最短路径
        for (node, weight) in result {
            if weight < std::i32::MAX {
                println!("  -> Node {:?}, Weight: {:?}", node.index(), weight);
            } else {
                println!("  -> Node {:?}, Weight: Infinity", node.index());
            }
        }
    }
}

运行结果:
在这里插入图片描述
可以看到 petgraph 其实几乎满足我们大部分的的应用场景的,感兴趣可以去使用了。

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

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

相关文章

【Linux多线程】生产者消费者模型

【Linux多线程】生产者消费者模型 目录 【Linux多线程】生产者消费者模型生产者消费者模型为何要使用生产者消费者模型生产者消费者的三种关系生产者消费者模型优点基于BlockingQueue的生产者消费者模型C queue模拟阻塞队列的生产消费模型 伪唤醒情况&#xff08;多生产多消费的…

MySQL数据库----------探索高级SQL查询语句 (二)

目录 一、子查询 1.1多表查询 1.2多层嵌套 1.3 insert语句子查询 1.4update语句子查询 1.5delete语句子查询 1.6EXISTS 1.7子查询&#xff0c;别名as 二、mysql视图 2.1mysql视图介绍 2.2mysql作用场景[图]: 2.3视图功能&#xff1a; 2.4视图和表的区别和联系 区别…

Linux 个人笔记之三剑客 grep sed awk

文章目录 零、预一、grep 文本过滤工具基础篇实战篇 二、sed 字符流编辑器基础篇实战篇 三、awk 文本处理工具基础篇实战篇 四、附xargsuniq & sort基础篇实战篇 cut 零、预 bash 的命令行展开 {} $ echo file_{1..4} file_1 file_2 file_3 file_4$ echo file_{a..d} file_…

【攻防世界】unseping (反序列化与Linux bash shell)

打开题目环境&#xff1a; 1、进行PHP代码审计&#xff0c;通过审计得知需要用到PHP反序列化。找到输出flag的位置为 ping()函数。通过使用 exec() 函数来执行 $ip 并将结果保存在 $result 中&#xff0c;最终输出 $result。 2、接着寻找给 $ip 传参的位置&#xff0c;发现通过…

FastEI论文阅读

前言 研究FastEI有很长时间了&#xff0c;现在来总结一下&#xff0c;梳理一下认知。论文地址&#xff1a;https://www.nature.com/articles/s41467-023-39279-7&#xff0c;Github项目地址&#xff1a;https://github.com/Qiong-Yang/FastEI。 概要 这篇文章做的工作是小分子…

16.面向对象的软件测试技术

主要考点&#xff1a; 1、面向对象相关的基础概念&#xff1b;&#xff08;已经在软件工程的课程中讲过&#xff0c;要熟悉UML图&#xff0c;知道类和类之间的关系&#xff0c;这些知识也可能结合到下午题考察&#xff09; 2、面向对象的软件测试技术&#xff1b;&#xff08;大…

基于单片机汽车超声波防盗系统设计

**单片机设计介绍&#xff0c;基于单片机汽车超声波防盗系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机汽车超声波防盗系统设计概要主要涉及利用超声波传感器和单片机技术来实现汽车的安全防盗功能。以下是对…

辽宁梵宁教育:点亮大学生设计技能之光

辽宁梵宁教育作为专注于设计教育的线上机构&#xff0c;对大学生设计技能的提升和就业前景产生了深远的影响。在当前数字化时代&#xff0c;设计技能已逐渐成为各行各业不可或缺的重要能力&#xff0c;而梵宁教育正是抓住了这一机遇&#xff0c;致力于培养具备创新思维和实践能…

还在问如何入门 Python 爬虫?收藏这篇直接带你上路爬虫!!

“入门”是良好的动机&#xff0c;但是可能作用缓慢。如果你手里或者脑子里有一个项目&#xff0c;那么实践起来你会被目标驱动&#xff0c;而不会像学习模块一样慢慢学习。另外如果说知识体系里的每一个知识点是图里的点&#xff0c;依赖关系是边的话&#xff0c;那么这个图一…

Java毕业设计-基于springboot开发的致远汽车租赁系统平台-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、管理员功能模块3、业务员功能模块3、用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot…

LC 106.从中序与后序遍历序列构造二叉树

106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a; inorder [9,3,15,20,7], post…

STM32G系 编程连接不上目标板,也有可能是软件不兼容。

由于一直用的老版本STM32 ST-LINK Utility 4.20 &#xff0c;找遍了所有问题&#xff0c;SWD就是连不上目标板。 电源脚 VDDA 地线&#xff0c;SWD的四条线&#xff0c;还是不行&#xff0c;浪费了一天&#xff0c;第二天才想起&#xff0c;是不是G系升级了 SWD协议。结果下载…

安全访问多线程环境:掌握 Java 并发集合的使用技巧

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

[优选算法专栏]专题十五:FloodFill算法(二)

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

【Vue3】el-checkbox-group实现权限配置和应用

一. 需求 针对不同等级的用户&#xff0c;配置不同的可见项 配置效果如下 &#xff08;1&#xff09;新增&#xff0c;获取数据列表 &#xff08;2&#xff09;编辑&#xff0c;回显数据列表 应用效果如下 &#xff08;1&#xff09;父级配置 &#xff08;2&#xff09;子级…

leetcode90. 子集 II

去重逻辑&#xff1a; 关键是画出递归树&#xff01;当我们即将进入第二个2的递归的时候&#xff0c;发现isVisit数组是100&#xff0c;也就是说这俩重复的数是False&#xff0c;并且这俩在nums值相同&#xff0c;所以写出去重逻辑&#xff01; class Solution { public:vector…

2024-2028年中国导电滑环市场行情及未来发展前景研究报告

导电滑环应用领域广泛 全球市场将保持增长趋势 导电滑环又称为集流环、集电环、导电环&#xff0c;是一种电气连接器件&#xff0c;用于在旋转部件和静止部件之间传输电能信号。导电滑环避免了传统导线在旋转中存在的磨损和扭伤&#xff0c;可提高机器运转效率和稳定性&#xf…

美易官方:通胀持续降温,美联储可能在6月份降息

近期&#xff0c;LPL首席经济学家在接受采访时表示&#xff0c;通胀持续降温&#xff0c;美联储可能在6月份降息。这一消息引起了市场的广泛关注和讨论。通胀一直是全球经济面临的难题之一&#xff0c;而美联储的货币政策也一直是市场关注的焦点。那么&#xff0c;通胀降温和美…

Discord绑VISA卡教程

Discord 是由美国 Discord Inc. 公司所开发的一款专为社群设计的免费网络实时通话软件与数字发行平台&#xff0c;主要针对游戏玩家、教育人士、朋友及商业人士&#xff0c;用户之间可以在软件的聊天频道通过讯息、图片、视频和音频进行交流 下面进行实际操作 1、登录discord …

【A-013】基于SSH的共享单车管理系统/共享单车出租系统

【A-013】基于SSH的共享单车管理系统/共享单车出租系统 开发环境&#xff1a; Eclipse/MyEclipse、Tomcat8、Jdk1.8 数据库&#xff1a; MySQL 适用于&#xff1a; 课程设计&#xff0c;毕业设计&#xff0c;学习等等 系统介绍&#xff1a; 基于SSH开发的共享单车管理系统/…