有趣的图(一)(55)

小朋友们好,大朋友们好!

我是猫妹,一名爱上Python编程的小学生。

和猫妹学Python,一起趣味学编程。

今日主题

咱们今天的内容比较抽象,也比较有趣。

这里的图是指计算机中的图,确切地说,是一种数据结构。

在解决实际问题时,经常会用到。

我们举个生活中的例子:

一个人要把大陆31个省会城市自驾游一遍,最短路径是多少公里?

一个人能在一个省份只经过一次的情况下把大陆31个省会城市自驾游一遍吗?

今天的主题有:

图的定义

图的分类

图的接口

图的Python表示

图的定义

图G由两个集合组成,顶点集合和边集合。

一个由顶点(vertex)构成的有穷非空集合和一个由边(edge)构成的有穷允空集合。

比如上图:

顶点集合有:1,2,3,4,5,6,7

边集合有:有10条,带权值

比如上图:

顶点结合有:0,1,2,3,4,5

边集合有:共9条,不带权值

图的分类

图根据边是否有方向,分为有向图和无向图。

(a)为有向图,(b)为无向图

图根据边是否有权值,分为边无权值的图,边有权值的图。

如下图:

节点的度

无向图中结点的度:顶点引出的边数和。

有向图中结点的度:分为入度和出度。入度为指向该顶点的边数和,出度为该顶点向外指向的边数和。

图的接口

addVertex(v)添加顶点

deleteVertex(v)删除顶点

vertexes(v)获取所有顶点

addEdge(v1,v2)添加一条边

deleteEdge(v1,v2)删除一条边

edges()获取所有边

adjacent(v)获取v的所有邻接顶点

isEmpty()判断图是否为空

Python中的图

可以使用Python自带的列表、集合、字典来表示图,也可以使用第三方库networkx。

可以使用邻接矩阵、邻接列表、邻接集合、邻接加权字典来表示图。%3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22b%22%20style%3D%22ellipse%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3Baspect%3Dfixed%3BfillColor%3D%2360a917%3BfontColor%3D%23ffffff%3BstrokeColor%3D%232D7600%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22350%22%20y%3D%22130%22%20width%3D%2220%22%20height%3D%2220%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E

邻接矩阵

设无向图G=(V,E),其中顶点集V=v1,v2,…,vn,边集 E=e1,e2,…,eε。用aij表示顶点vi与顶点vj之间的边数,可能取值为0,1,2,…,称所得矩阵A=A(G)=(aij)n×n为图G的邻接矩阵。

邻接矩阵可以描述有向图和无向图。

邻接矩阵的存储特点:

(a)无向图的邻接矩阵是一个对称矩阵,有向图不一定是。

(b)邻接矩阵所需的存储空间值域只与顶点数有关系。

(c)用邻接矩阵存储图,容易判断两个点之间是否有边。

(d)如果一个有向图的邻接矩阵为三角矩阵(主对角线为0),则它的拓扑排序一定存在。

(e)小技巧:

无向图:邻接矩阵的第i行或者第i列的非零元素的个数正好是第i个顶点Vi的度;

有向图:邻接矩阵的第i行的非零元素个数正好是第i个顶点Vi的出度,第i列非零元素的个数正好是第i个顶点Vi的入度。

(f)邻接矩阵也可以表示有权值的图,此时单元格内容是边的权值。

上图Python代码参考:

邻接矩阵的缺点:

  1. 当结点很多,边很少时,很多个0,浪费空间。

  2. 寻找每个结点的邻接顶点时,需要遍历列表,稍有不便。

邻接集合

只存储有边的数据,不存储无边的数据。

比如上图中,和a相邻的边,只存储ad和ae,只需要存储和a相邻的结点是d和e就可以了。

邻接列表

和邻接集合类似,只是将集合变为列表。

邻接加权字典

可以使用邻接加权字典表示有权值的图。

好了,我们今天的学习就先到这里。

你学会了吗?

好了,我们今天就学到这里吧!

如果遇到什么问题,咱们多多交流,共同解决。

我是猫妹,咱们下次见!

03-28
### MCP API 的文档与使用教程 MCP 是一种用于增强大型语言模型 (LLM) 功能的技术框架,它通过提示(Prompts)、资源(Resources)以及工具(Tools)这三种核心原语来扩展 LLM 能力[^2]。Apifox 平台也认识到 MCP 技术在 API 开发领域的重要作用,并将其应用于实际场景中[^1]。 为了实现将 `/Users/syw/project/wechatAr` 文件夹下的所有文件上传至远程服务器 `47.93.xx.xx` 用户名 `root` 下的 `/opt/ll` 目录的操作,可以基于 MCP 工具功能构建一个自定义的服务逻辑。以下是具体实现方法: #### 实现方案 利用 SCP 命令完成文件传输任务,并结合 MCP 的 Tool 功能封装此操作以便于后续调用。当关键词为“上传微信目录”时,触发该工具执行相应动作。 ```python import subprocess def upload_wechat_directory(): source_dir = "/Users/syw/project/wechatAr/*" target_server = "root@47.93.xx.xx:/opt/ll/" try: result = subprocess.run(["scp", "-r", source_dir, target_server], check=True) return {"status": "success", "message": f"All files from {source_dir} have been uploaded to {target_server}"} except Exception as e: return {"status": "error", "message": str(e)} # 将上述函数注册为 MCP 中的一个 tool tools = { "upload_wechat_directory_tool": upload_wechat_directory, } # 定义 prompt 和 resource 配置部分省略... ``` 以上代码片段展示了如何创建一个名为 `upload_wechat_directory_tool` 的工具并将其集成到 MCP 系统里去[^3]。每当接收到匹配条件的消息比如含有特定关键字的时候就会激活对应的行为即启动SCP进程从而达成目标需求。 #### 进一步学习资料推荐 对于希望深入研究或者实践更多关于 MCP 应用案例的人士来说,《MCP 教程进阶篇》提供了丰富的实例分析和技术细节值得参考阅读;另外《MCP 极简入门:超快速上手运行简单的 MCP 服务和 MCP 客户端》同样是非常好的起点材料之一可以帮助初学者迅速掌握基础概念及其运作机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值