怎么在云主机上做网站/广州seo顾问服务
复杂网络的任意子节点的网络最短距离
题目要求介绍
本文算法测试用的数据集为空手道俱乐部,其中空手道俱乐部的数据集可通过这个链接进行下载•http://vlado.fmf.uni-lj.si/pub/networks/data/Ucinet/UciData.htm#zachary
摘要
本文旨在解决复杂网络中任意子节点之间的网络最短距离问题。首先介绍了复杂网络的概念和特点,包括小世界特性、无标度特性等。然后以空手道俱乐部网络为例,展示了如何将邻接矩阵转换为邻接表,并绘制网络图。接着设计了模块化的程序框架,采用状态压缩动态规划 + Dijkstra算法来计算任意m个节点之间的最短距离。最后给出了m=2,3,4,5,>5时的计算结果,并以直方图形式可视化。结果表明,在空手道俱乐部网络中,大多数节点之间的最短距离分布在一个中等范围内,说明大多数成员之间的社交关系维持在一个不亲不疏的状态。总体来说,本文提出了一种有效的方法来分析复杂网络中节点之间的最短距离分布,为研究复杂网络的拓扑结构提供了参考。
背景介绍
复杂网络(Complex Networks)是一种描述系统中元素间复杂连接关系的网络结构,其特点在于节点数量庞大、连接关系复杂。复杂网络的研究涉及多个学科领域,包括物理、数学、统计、计算机科学、社会学、生态学等。
复杂网络可概括为以下的部分:
- 网络结构与演化机制:复杂网络的结构具有小世界特性和无标度特性,其演化机制包括随机连接、偏好连接、自组织临界等。
- 网络拓扑性质与统计特性:复杂网络具有高聚类系数、短平均路径长度等拓扑性质,节点度分布呈现幂律分布等统计特性。
- 网络动力学行为:复杂网络中的节点和连接关系会影响网络的动力学行为,如传染病传播、信息传播、社会动态等。
- 网络中心性与节点重要性:复杂网络中的节点重要性可以用网络中心性指标来描述,如度中心性、介数中心性等。
在本例中,我们着重于利用程序设计的图搜索算法,来实现对空手道俱乐部的34个人构成的复杂人际关系网络进行处理,通过用计算机进行模拟,在此基础上,可以分析出空手道俱乐部的人际关系
实验数据
初步给定的空手道俱乐部数据集中,是一个邻接矩阵的形式
有权网络
无权网络
可以看到,数据集中有非常多的0(黄色部分),这说明这个邻接矩阵是一个稀疏矩阵,因此,如果要提高程序运行的性能,需要把这个矩阵转换成邻接表进行处理
首先将txt文件中的数字转换成python程序的二维list
然后将处理好的二维list,转换成邻接表并写入到csv文件中
最终得到目标的数据集(部分),这个数据集就是后面程序直接进行处理的数据集
最后将这个csv文件的数据,变成一个网络图片,就能得到空手道俱乐部的人际网络
程序流程及系统设计
程序模块化构建
class Solution(object):#初始化参数def __init__(self,m=0,NumberOfNode=34,NumberOfEdge=156) -> None:pass#邻接矩阵转换def AdjMatrix_to_AdjList(matrix,Csv_filename):pass#图搜索算法def dijkstra(self, s) -> None:pass#核心算法def solution(self):pass#保存结果def save(self):pass#画出网状图def draw_network(self):pass#画出直方图def draw_bar(self):pass
#测试部分
if __name__=='__main__':pass
程序设计的具体细节
参数初始化
堆优化的dijstra算法
核心函数
函数的核心思想是状态压缩动态规划,通过枚举所有可能的m个节点的组合,计算每个组合的最短路径长度。Dijkstra算法用于辅助计算连接每个状态的最小距离。
初始化
- 使用numpy库生成一个包含所有节点的数组vertex。
- 使用combinations函数枚举所有可能的m个节点的组合。
- 初始化状态压缩DP数组self.dp,用于记录从每个节点出发,连接m个节点的最小距离。
状态压缩动态规划
- 对每个节点组合,初始化DP数组,将所有状态设为无穷大。
- 对于每个节点,将其连接到自身的状态设为0。
- 使用状态压缩动态规划,更新DP数组,计算从每个节点出发,连接m个节点的最小距离。
Dijkstra算法
- 对于每个状态,使用Dijkstra算法计算连接该状态下的m个节点的最小距离,并更新DP数组。
- Dijkstra算法通过优先队列实现,每次选择距离最小的节点进行扩展。
结果统计
- 统计所有节点组合的最短路径长度,并保存到results列表中。
- 对每个节点组合,找到最小路径长度和耗时。
输出结果
- results 列表包含了所有节点组合的最短路径长度
计算流程图
程序计算结果
X轴表示任意m的节点的最短路径的长度,Y轴表示任意m的节点的最短路径的长度出现的频数
4.1 m取值为2时,程序运行结果
有权网络
无权网络
4.2 m取值为3时,程序运行结果
有权网络
无权网络:
4.3 m取值为4时,程序运行结果
有权网络:
无权网络:
4.4 m取值为5时,程序运行结果
有权网络:
无权网络:
4.5 m >=5时,程序运行结果
有权网络:
无权网络
实验结论与分析
无权网络的权重分布只有0和1,很难看出分布规律。
有权网络的数据呈现出接近正态分布的形态,峰值集中在中间部分,然后向两侧逐渐减少,将最短路径长度映射到空手道俱乐部成员的人际网络关系中,我们可以得出结论:在空手道俱乐部中,社交关系非常亲密与非常疏远的成员是占少数的,大多数成员的社交关系都是维持在一个不亲不疏的状态中
附录
太长了不想看?👿,那就算了,下面是全部的代码,自己参悟吧😊😊
import numpy
import heapq
from collections import *
import csv
from itertools import combinations
import time
import matplotlib.pyplot as plt
import networkx as nx
class Solution(object):def __init__(self,m=0,NumberOfNode=34,NumberOfEdge=156) -> None:self.NumberOfNode = NumberOfNode self.NumberOfEdge = NumberOfEdge self.m = m self.MaxNumberOfNode = self.NumberOfNode + 1 self.MaxNumberOfEdge = (self.NumberOfEdge + 1) * 2 self.dp = numpy.zeros((self.MaxNumberOfNode, 2**10+1), dtype=int) self.infinity = 2 ** 24 self.p = numpy.zeros(self.MaxNumberOfNode, dtype=int) self.AdjacencyList = {} self.PriorityQueue = [] self.results=[]for i in range(1, self.MaxNumberOfNode):self.AdjacencyList[i] = {}Data = namedtuple('Data', 'source, target, weight')for edge in map(Data._make, csv.reader(open("无权网络.csv", encoding='utf-8'))):self.AdjacencyList[int(edge.source)][int(edge.target)] = int(edge.weight)self.AdjacencyList[int(edge.target)][int(edge.source)] = int(edge.weight)def txt_to_list(file_path):with open(file_path, 'r',encoding='utf-8') as file:lines=file.readlines()result=[list(map(int, line.split())) for line in lines]return resultdef AdjMatrix_to_AdjList(matrix,Csv_filename="空手道俱乐部.csv"):with open(Csv_filename, 'w', newline='',encoding='utf-8') as file:writer=csv.writer(file)writer.writerow(['source','target','weight'])for u in range(len(matrix)):for v in range(len(matrix)):if matrix[u][v]!=0:writer.writerow([u+1,v+1,matrix[u][v]])print(f"邻接矩阵已保存为CSV文件:{Csv_filename}")def dijkstra(self, s) -> None:vis = dict((key, False) for key in self.AdjacencyList) while len(self.PriorityQueue) > 0:u, _ = heapq.heappop(self.PriorityQueue) if vis[u] == True:continuevis[u] = Truefor v in self.AdjacencyList[u]:new_dis = self.dp[u][s] + self.AdjacencyList[u][v]if self.dp[v][s] > new_dis:self.dp[v][s] = new_disheapq.heappush(self.PriorityQueue, [v, new_dis])def solution(self):vertex = numpy.arange(1, self.MaxNumberOfNode, 1)for tp in combinations(vertex, self.m):for i in range(1, self.m + 1):self.p[i] = tp[i - 1]for i in range(0, self.MaxNumberOfNode):for j in range(0, 2**10+1):self.dp[i][j] = self.infinityfor i in range(1, self.m + 1):self.dp[self.p[i]][1 << (i - 1)] = 0start = time.time()for s in range(1, 1 << self.m):for i in range(1, self.NumberOfNode + 1):subs = s & (s - 1)while subs != 0:self.dp[i][s] = min(self.dp[i][s], self.dp[i][subs] + self.dp[i][s ^ subs])subs = s & (subs - 1)if self.dp[i][s] != self.infinity:heapq.heappush(self.PriorityQueue, [i, self.dp[i][s]])self.dijkstra(s)end = time.time()result = self.infinityfor i in range(1, self.m + 1):result = min(result, self.dp[self.p[i]][(1 << self.m) - 1])temp = ''for i in range(1, self.m + 1):if self.p[i]!=0:temp += str(self.p[i])+' , 'temp=temp[:-2]self.results.append((temp, result, end - start))def save(self):csvfilepath = 'csv结果/任意节点'+str(self.m)+'.csv'headers = ['节点组合', '最短路径距离', '耗时']with open(csvfilepath, 'w', newline='', encoding='utf-8') as file:writer = csv.writer(file)writer.writerow(headers)writer.writerows(self.results)def draw_network(self):list1=[]with open("有权网络.csv",'r',encoding='utf-8') as file:reader=csv.reader(file)list1=[list(map(int,row)) for row in reader]graph=nx.Graph()for i in range(len(list1)):graph.add_edge(list1[i][0],list1[i][1],weight=list1[i][2])pos = nx.spring_layout(graph)nx.draw_networkx_nodes(graph, pos)nx.draw_networkx_labels(graph, pos)nx.draw_networkx_edges(graph, pos, edge_color="black", width=1)edge_labels = nx.get_edge_attributes(graph, "weight")nx.draw_networkx_edge_labels(graph, pos, edge_labels=edge_labels)nx.draw(graph, with_labels=True)plt.savefig('图片结果/'+'空手道俱乐部.png',dpi=720)plt.show()def draw_bar(self):file_path = '有权网络csv结果/任意节点'+str(self.m)+'.csv'shortest_path=[]shortest_path_count={}with open(file_path,'r',encoding='utf-8') as file:reader=csv.reader(file)shortest_path=[row[1] for row in reader]shortest_path=list(map(int,shortest_path[1:]))for length in shortest_path:shortest_path_count[length]=shortest_path_count.get(length,0)+1plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False plt.figure(figsize=(10, 6)) plt.title('有权网络任意节点的最短路径长度') plt.xlabel('最短路径长度') plt.ylabel('频数') plt.grid(axis='y', linestyle='--', alpha=0.7) plt.tight_layout() plt.bar(list(shortest_path_count.keys()), list(shortest_path_count.values()), alpha=0.7, color='blue')bar_file_path = '有权网络图片结果/任意节点'+str(self.m)+'直方图.png'plt.savefig(bar_file_path,dpi=1080)
if __name__=='__main__':for i in range(2,7):s=Solution(m=i) s.draw_bar()
相关文章:

复杂网络的任意子节点的网络最短距离
复杂网络的任意子节点的网络最短距离 题目要求介绍 本文算法测试用的数据集为空手道俱乐部,其中空手道俱乐部的数据集可通过这个链接进行下载•http://vlado.fmf.uni-lj.si/pub/networks/data/Ucinet/UciData.htm#zachary 摘要 本文旨在解决复杂网络中任意子节点…...

(Qt) 文件读写基础
文章目录 🗂️前言📄ref📄访问标记🗃️enum 标记 🗂️Code📄demo📄分点讲解🗃️继承体系🗃️打开/关闭🗃️写🗃️读 🗂️END…...

全产业布局对穿戴甲品牌连锁店的意义
对于美甲行业来说,穿戴甲虽然不是什么新生事物,但也就是近两年才流行开来。面对井喷的市场需求,相应的从业者,不管是品牌连锁店,还是做批发、外贸,美甲周边、亦或是OEM的,大家都忙得不亦乐乎&am…...

git的一些使用技巧(git fetch 和 git pull的区别,git merge 和 git rebase的区别)
最近闲来无聊,虽然会使用git操作,但是 git fetch 和 git pull 的区别,git merge 和 git rebase的区别只是一知半解,稍微研究一下; git fetch 和 git pull 的区别 git fetch git fetch 是将远程仓库中的改动拉到本地…...

展厅中控系统有哪些优势呢
格芬科技的展厅中控系统具有多方面的优势,主要体现在以下几个方面: 一、高度集成与灵活控制 全终端网络可编程:格芬科技的展厅中控系统采用全终端网络可编程技术,能够实现对展厅内各种设备的集中控制和管理,包括电脑…...

FPGA开发在verilog中关于阻塞和非阻塞赋值的区别
一、概念 阻塞赋值:阻塞赋值的赋值号用“”表示,对应的是串行执行。 对应的电路结构往往与触发沿没有关系,只与输入电平的变化有关系。阻塞赋值的操作可以认为是只有一个步骤的操作,即计算赋值号右边的语句并更新赋值号左边的语句…...

动态特征转换的艺术:在Mojo模型中实现自定义变换的策略
动态特征转换的艺术:在Mojo模型中实现自定义变换的策略 在机器学习中,特征转换是数据预处理的关键步骤,它直接影响模型的性能和结果的准确性。Mojo模型,作为一种高效的模型部署形式,允许在不同环境中运行模型并进行预…...

如何让Python爬虫在遇到异常时继续运行
概述 在数据收集和数据挖掘中,爬虫技术是一项关键技能。然而,爬虫在运行过程中不可避免地会遇到各种异常情况,如网络超时、目标网站变化、数据格式不一致等。如果不加以处理,这些异常可能会导致爬虫程序中断,影响数据…...

手把手带你搭建Snort入侵检测系统
在当今数字化社会,网络安全问题日益突出。为了有效防范网络攻击,部署入侵检测系统(IDS)是必要的防护措施。Snort作为一款功能强大的开源IDS工具,被广泛应用于各种网络环境中。本文将手把手教您如何从零开始实现Snort入…...

小程序内嵌uniapp页面跳转回小程序指定页面方式
使用微信小程序提供的Api:wx.miniProgram.navigateTo 在小程序中嵌套uniapp的H5页面,并使用wx.miniProgram.navigateTo进行页面跳转,需要确保满足以下条件: 你的小程序必须是通过uniapp构建的,并且支持小程序嵌套。 你…...

基于 Three.js 的 3D 模型加载优化
作者:来自 vivo 互联网前端团队- Su Ning 作为一个3D的项目,从用户打开页面到最终模型的渲染需要经过多个流程,加载的时间也会比普通的H5项目要更长一些,从而造成大量的用户流失。为了提升首屏加载的转化率,需要尽可能…...

Jlink下载与适配keil ccs theia教程 用jlink代替ti自己的下载仿真器
用jlink代替ti自己的下载仿真器,然后你去买立创的m0g3507才19.9包赚160 安装 J-Link 软件包 J-Link 软件包 v7.88i 或更高版本支持 MSPM0。 从 Segger 网站下载安装程序 按照安装程序说明操作 安装程序将自动请求更新 IAR 或 Keil(如果已安装&#x…...

C# 进制之间的转换(二进制,八进制,十进制,十六进制)
常用的方法是:Convert.ToString(byte value, int toBase), 并且有多个重载方法, value的类型可以为short,int 等,但必须是整数且不能为负数, 一般默认为十进制 toBase: 返回值的基数,必须是 2、…...

Linux 基础开发工具 : Vim编辑器
Vim 是 Linux 和其他类 Unix 系统上广泛使用的文本编辑器之一。它基于更早的 vi 编辑器,但添加了许多增强功能和扩展。Vim 是“Vi IMproved”的缩写,意为“改进的 Vi”,我们常使用Vim编辑器编写c/c代码。 ps:该篇介绍均为最基础介…...

Delphi 11.2 配置Android SDK 环境
打开 Delphi 11 点击 Tools–Options… 然后点击 Deployment–SDK Manager–Add… 这里如果配置64位就选 Android 64-bit,如果配置32位就选 Android 32-bit 点击 Select an SDK version–Add New… 有警告图标的就是有问题的项,需要手动更新一下…...

Spring Boot 学习(10)——固基(Idea 配置 git 访问 gitee)
几转眼就过了两个月,其实也没有闲着,学也学了,只是繁杂事多,学的不如以前多,也没有做过笔记了。 以前做开发因条件受限,没有什么 git ,也没有 gitee。现在出来混要跟上形势才行,学习…...

11 个接口性能优化技巧(上)【送源码】
接口性能优化对于从事后端开发的同学来说,肯定再熟悉不过了,因为它是一个跟开发语言无关的公共问题。 该问题说简单也简单,说复杂也复杂。 有时候,只需加个索引就能解决问题。 有时候,需要做代码重构。 有时候&…...

AIoTedge 智能边缘物联网平台
AIoTedge智能边缘物联网平台是一个创新的边云协同架构,它为智能设备和系统提供了强大的数据处理和智能决策能力。这个平台的核心优势在于其边云协同架构设计,它优化了数据处理速度,提高了系统的可靠性和灵活性,适用于多种场景&…...

深入理解CSS基础【代码审计实战指南】
文章目录 为什么需要cssCSS语法CSS的组成css注释: 快速入门示例:常用样式字体颜色和边框颜色介绍颜色示例:边框边框的宽度与高度 字体样式背景样式文本居中 字体颜色和边框颜色介绍颜色示例:边框边框的宽度与高度 字体样式背景样式…...

html改写vue日志
本人最近学了vue,想着练手的方法就是改写之前在公司开发的小系统前端,将前端的AJAXJSThymeleaf改为axiosvue。 改写html 将<html>中的<head>和<body>结构移除,将css部分移入<style>, 重新定义了全局的&…...

Transformer-Bert---散装知识点---mlm,nsp
本文记录的是笔者在了解了transformer结构后嗑bert中记录的一些散装知识点,有时间就会整理收录,希望最后能把transformer一个系列都完整的更新进去。 1.自监督学习 bert与原始的transformer不同,bert是使用大量无标签的数据进行预训…...
基于术语词典干预的机器翻译挑战赛笔记 Task3 #Datawhale AI 夏令营
书接上回,上回在这捏: 基于术语词典干预的机器翻译挑战赛笔记Task2 #Datawhale AI 夏令营-CSDN博客文章浏览阅读223次,点赞10次,收藏5次。基于术语词典干预的机器翻译挑战赛笔记Task2https://blog.csdn.net/qq_23311271/article/…...

定制QCustomPlot 带有ListView的QCustomPlot 全网唯一份
定制QCustomPlot 带有ListView的QCustomPlot 文章目录 定制QCustomPlot 带有ListView的QCustomPlot摘要需求描述实现关键字: Qt、 QCustomPlot、 魔改、 定制、 控件 摘要 先上效果,是你想要的,再看下面的分解,顺便点赞搜藏一下;不是直接右上角。 QCustomPlot是一款…...

Fast Planner规划算法(一)—— Fast Planner前端
本系列文章用于回顾学习记录Fast-Planner规划算法的相关内容,【本系列博客写于2023年9月,共包含四篇文章,现在进行补发第一篇,其余几篇文章将在近期补发】 一、Fast Planner前端 Fast Planner的轨迹规划部分一共分为三个模块&…...

问题记录-SpringBoot 2.7.2 整合 Swagger 报错
详细报错如下 报错背景,我将springboot从2.3.3升级到了2.7.2,报了下面的错误: org.springframework.context.ApplicationContextException: Failed to start bean documentationPluginsBootstrapper; nested exception is java.lang.NullPo…...

【视觉SLAM】 十四讲ch5习题
1.*寻找一个相机(你手机或笔记本的摄像头即可),标定它的内参。你可能会用到标定板,或者自己打印一张标定用的棋盘格。 参考我之前写过的这篇博客:【OpenCV】 相机标定 calibrateCamera Code来源是《学习OpenCV3》18.…...

Webpack基础学习-Day01
Webpack基础学习-Day01 1.1 webpack 是什么 webpack 是一种前端资源构建工具,一个静态模块打包器(module bundler)。 在 webpack 看来, 前端的所有资源文件(js/json/css/img/less/…)都会作为模块处理。 它将根据模块的依赖关系进行静态分析,打包生成…...

如何防止热插拔烧坏单片机
大家都知道一般USB接口属于热插拔,实际任意带电进行连接的操作都可以属于热插拔。我们前面讲过芯片烧坏的原理,那么热插拔就是导致芯片烧坏的一个主要原因之一。 在电子产品的整个装配过程、以及产品使用过程经常会面临接口热插拔或者类似热插拔的过程。…...

JQuery+HTML+JavaScript:实现地图位置选取和地址模糊查询
本文详细讲解了如何使用 JQueryHTMLJavaScript 实现移动端页面中的地图位置选取功能。本文逐步展示了如何构建基本的地图页面,如何通过点击地图获取经纬度和地理信息,以及如何实现模糊查询地址并在地图上标注。最后,提供了完整的代码示例&…...

ArcGIS Pro SDK (九)几何 13 多部件
ArcGIS Pro SDK (九)几何 13 多部件 文章目录 ArcGIS Pro SDK (九)几何 13 多部件1 获取多部分要素的各个部分2 获取多边形的最外层环 环境:Visual Studio 2022 .NET6 ArcGIS Pro SDK 3.0 1 获取多部分要素的各个部分…...