python实现卡普均值最小回路算法

如果给定一个含有环的有向图,要在这个图中找出所有的环并计算这些环的路径长度,然后除以环的边数,所得到的结果也就是环的平均值,这里也就是如何计算这个环的最小均值问题。

首先可以确定的是,如果图中均值最小的环的值是0,那么图中就不包含负环,由于是负环,那么所有边加总就是负数,显然将所有边加总后除以边的数量依然是负数,这就与均值最小的环值为0所相矛盾,给定一个图,要寻找最短均值回路,如下图所示:

添加图片注释,不超过 140 字(可选)

从图中可以计算出由虚线构成的环的均值是最小的,

添加图片注释,不超过 140 字(可选)

其均值是:

添加图片注释,不超过 140 字(可选)

而使用python实现的代码如下:

import numpy as np
vertex_list = [0, 1, 2, 3, 4, 5, 6, 7, 8] #记录图中所有节点 
edge_vertex = {} #记录相连节点
edge_vertex[0] = [7]
edge_vertex[1] = [0, 2]
edge_vertex[2] = [3,8]
edge_vertex[3] = [5]
edge_vertex[4] = [3]
edge_vertex[5] = [4, 2]
edge_vertex[6] = [5, 7]
edge_vertex[7] = [1]
edge_vertex[8] = [6, 7]
edges = np.zeros((len(vertex_list), len(vertex_list))).astype(int) #记录边的长度
for i in range(len(vertex_list)):for j in range(len(vertex_list)):edges[i][j] = sys.maxsize
edges[0][1] = 4  
edges[1][7] = 11
edges[7][0] = 8
edges[2][1] = 8
edges[2][5] = 4
edges[3][2] = 7
edges[3][4] = 9
edges[4][5] = 10
edges[5][3] = 14
edges[5][6] = 2
edges[6][8] = 6
edges[8][2] = 2
edges[7][6] = 1
edges[7][8] = 7
path_table = np.zeros((len(vertex_list) + 1, len(vertex_list))).astype(int) #第i行第j列表示从起始点0经过i条边后到达节点j的最短路径长度
for i in range(len(vertex_list) + 1):for j in range(len(vertex_list)):path_table[i][j] = sys.maxsize
path_table[0][0] = 0 #起始点通过0条边抵达自己
#%%
def  compute_path_table(k, v):if k < 0 or k > len(vertex_list):return sys.maxsizeif v < 0 or v >= len(vertex_list):return sys.maxsizeif k == 0:return path_table[k][v]if path_table[k][v] != sys.maxsize:return path_table[k][v]for u in edge_vertex[v]:  #根据公式(9)进行计算s_to_u = compute_path_table(k - 1, u)if s_to_u != sys.maxsize  and s_to_u + edges[u][v] < path_table[k][v]:print("u: {0}, k: {1}, s_to_u: {2}, s_to_v: {3}".format(u, k, s_to_u, s_to_u + edges[u][v]))path_table[k][v] = s_to_u + edges[u][v]return path_table[k][v]
for k in range(len(vertex_list) + 1):for v in vertex_list:compute_path_table(k, v)

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

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

相关文章

会禁止直播带货吗?

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 种种迹象表明&#xff1a;直播带货已经到了被抑制的阶段&#xff0c;提高线上购物成本&#xff0c;促进消费回归线下实体&#xff0c;好像是主流声音了。 (1)“稳定和扩大传统消费”早就写在了中央经济工作会议和政…

《汇编语言》- 读书笔记 - 第17章-外传之 DOSBox-X 调用 int 13 读写磁盘

《汇编语言》- 读书笔记 - 第17章-外传之 DOSBox-X 调用 int 13 读写磁盘 总结dosbox-x.conf 不完美读取成功写入成功参考资料 总结 DOSBox 中访问 int 13h 始终没反应。网上查了下有人说是没支持&#xff0c;建议使用 DOSBox-X 经过无数遍尝试后&#xff1a; 环境状态Win11…

网络计算机

TCP/IP四层模型 应用层&#xff1a;位于传输层之上&#xff0c;主要提供两个设备上的应用程序之间信息交换的服务&#xff0c;它定义了信息交换的格式&#xff0c;消息会交给下一层传输层来传递。我们把应用层交互的数据单元称为报文。应用层工作在操作系统的用户态&#xff0…

腾讯云轻量服务器地域选择方法整理,选择不能修改!

腾讯云轻量应用服务器地域如何选择&#xff1f;地域就近选择&#xff0c;北方选北京地域、南方选广州地域&#xff0c;华东地区选上海地域。广州上海北京地域有什么区别&#xff1f;哪个好&#xff1f;区别就是城市地理位置不同&#xff0c;其他的差不多&#xff0c;不区分好坏…

C++初阶:内存管理

目录 1. C/C中各种资源的内存分布1.1 C/C程序内存区域划分1.2 各资源的内存分布情况&#xff08;练习&#xff09; 2. C中的动态内存管理方式2.1 new/delete开辟内置类型空间2.2 new/delete开辟销毁自定义类型空间 3. operator new 与 operator delete函数4. new与delete的实现…

表结构 / 字段操作

一.增 alter table emp add wickname varchar(20); 二.改 1.仅仅改变数据类型&#xff08;字段类型&#xff09; alter table emp modify wickname varchar(30); 2.字段名 和 字段类型 都改变 alter table emp change wickname username varchar(20); 三.删 alter table emp …

ZigBee技术与实训教程(无线传感网技术第五天持续更新)

ZigBee具有广阔的应用前景。 家庭和楼宇网络。工业控制。公共场所。农业控制。医疗。商业。 1.ZigBee的协议框架 Zigbee栈是在IEEE 802.15.4标准基础上建立的&#xff0c;定义了MAC层和PHY&#xff08;数据链路层&#xff09;。ZigBee设备还包括IEEE 802.15.4(该标准定义了r…

0104行列式的性质-行列式-线性代数

记 D ∣ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋯ ⋯ ⋯ a n 1 a n 2 ⋯ a n n ∣ D\begin{vmatrix}a_{11}&a_{12}&\cdots &a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\cdots&\cdots&&\cdots\\a_{n1}&a_{n2}&\cdots&a_{nn}\en…

Spring神器:SpEl表达式

SpEl使用 Spring Expression Language (SpEL) 是Spring框架提供的一种强大的表达式语言&#xff0c;它允许开发人员在运行时动态地计算表达式&#xff0c;并访问和操作对象图。SpEL是一种基于表达式的语言&#xff0c;它支持各种操作符、函数和变量&#xff0c;可以用来执行各…

WebGL之灯光使用解析

在使用灯光之前&#xff0c;首先我们需要了解&#xff0c;与定义更广泛的 OpenGL 不同&#xff0c;WebGL 并没有继承 OpenGL 中灯光的支持。所以你只能由自己完全得控制灯光。幸运得是&#xff0c;这也并不是很难&#xff0c;本文接下来就会介绍完成灯光的基础。 在 3D 空间中…

使用链表的优先级队列

优先级队列是一种特殊类型的队列&#xff0c;其中每个元素都是与优先级相关联&#xff0c;并根据其优先级提供服务。如果元素有相同的优先级&#xff0c;那么根据它们在队列中的排列顺序。 元素本身的值可以用于分配优先级。例如&#xff1a;最高值的元素被视为最高的优先级元素…

多线程锁.

公平锁与非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁,这里类似排队买票,先来的人先买后来的人在队尾排着,这是公平的Lock lock new Reentrantlock(true);/true表示公平锁,先来先得非公平锁指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请…

类和对象 (中)

文章目录 类的六个默认成员函数构造函数析构函数特性使用 总结构造函数和析构函数拷贝构造函数特性拷贝构造总结 赋值运算符的重载运算符重载赋值运算符重载总结拷贝构造函数和赋值运算符重载 关于operator<<重载日期类实现const 修饰的成员函数取地址重载以及const取地址…

css实现高度是宽度一半的效果

1、方法一&#xff1a;使用变量:root、var()、clac()实现&#xff1a; 1.1 效果如下&#xff1a; 2.2 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title>&l…

伸手党必备之Python正则表达式常用函数

今天介绍一下Python中常用的正则表达式处理函数。Python的正则表达式主要有两种方法完成模式匹配&#xff1a;『搜索』和『匹配』 re.match re.match 尝试从字符串的开始全部或者部分匹配某个模式&#xff0c;如&#xff1a;下面的例子匹配第一个单词。 import re text &…

springboot269反欺诈平台的建设

反欺诈平台设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装反欺诈平台软件来发挥其高效地信息处…

Vue-Vben-Admin:中大型项目后台解决方案及如何实现页面反向传值

Vue-Vben-Admin&#xff1a;中大型项目后台解决方案及如何实现页面反向传值 摘要&#xff1a; Vue-Vben-Admin是一个基于Vue3.0、Vite、Ant-Design-Vue和TypeScript的开源项目&#xff0c;旨在为开发中大型项目提供一站式的解决方案。它涵盖了组件封装、实用工具、钩子函数、动…

学习c语言:单链表的应用

一、单链表经典算法 1.1 单链表相关经典算法OJ题1&#xff1a;移除链表元素 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.…

linux 新增用户 adduser

这里写自定义目录标题 linux 新增用户 Reference: https://dontla.blog.csdn.net/article/details/128723451

WPF监控平台(科技大屏)[一]

跟着B站的视频敲了一个略微复杂的WPF界面,链接如下.在这里我详细的写一份博客进行设计总结. 系统介绍和配置及主窗口设计_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Wy421Y7QD?p1&vd_source4796b18a2e4c1ec8a310391a5644b6da 成果展示 实现过程 总体来说,我的…