众智科学:计算聚集系数和邻里重叠度

这篇具有很好参考价值的文章主要介绍了众智科学:计算聚集系数和邻里重叠度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验内容:

输入:任意的有向图

输出:

1)每个节点的聚集系数

2)每个节点对的邻里重叠度

相关定义介绍:

聚集系数:节点A的聚集系数 = A的任意两个朋友之间也是朋友的概率(即邻居间朋友对的个数除以总对数)

邻里重叠度:与A、B均为邻居的节点数/ 与节点A、B中至少一个为邻居的节点数

实验思路说明:

在有向图中,可能出现自循环和双向边的情况,在计算聚集系数或邻里重叠度的时候,忽略自循环并将双向边视做一条边,因此在代码实现时会根据意义做相应处理。

1.首先创建一个graph类作为有向图的父类:

聚集系数,众智科学,c++,图论,算法

numberOfVertices():返回顶点总个数

numberOfEdges():返回邻边总条数

existsEdges(int,int):判断某条边是否存在

insertEdge(int,int,int):插入边

easeEdge(int,int):删除某条边

degree(int):计算某点的度数

inDegree(int):计算某点的入度

outDegree(int):计算某点的出度

directed():判断该图是否为有向图

Weighted():判断是否为加权图

2.创建以graph类为基类派生有向图子类adjacencyWDigraph:

因为是有向图,所以某些方法做特殊处理

public属性:

    int n;//节点数

    int e;//边数

    T noEdge;//表示不存在的边

    T** a;//邻接矩阵

public方法:

adjacencyWDigraph(int nV = 0, T theNoEdge = 0) :初始化方法,将邻接矩阵二维数组中的每一条边都置为noEdge。

int numberOfVertices() :返回顶点个数

int numberOfEdges():返回边的条数

bool directed() :判断是否有向,返回true

bool weighted():判断是否加权

bool existsEdge(int i, int j):判断(i,j)边是否存在,若查询的边不在邻接矩阵范围之内或者不存在则返回false,否则返回true。

void insertEdge(int v1, int v2, int weight):插入边,输入要插入边的起点、终点、权重,当顶点不在邻接矩阵范围之内则判定为非法插入。否则判断边(v1,v2)是否存在,不存在则有向图边数加1,并令a[v1][v2] = weight。

void easeEdge(int i, int j):删除边(i,j),如果该边存在则令a[i][j] = noEdge并让边数减一。

int outDegree(int theV):计算theV点的出度,使用局部变量sum记录邻接矩阵theV行不为noEdge的数目。

 int inDegree(int theV):计算theV点的入度,使用局部变量sum记录邻接矩阵theV列不为noEdge的数目。

int getFriendsIsFriends(int iE):返回节点iE任意两个朋友之间也是朋友的数目。在有向图中因为可能存在双向边或自循环,因此在计算iE点的邻边数目(即入度加上出度)时,若存在自循环要减去2以及iE点上双向边的条数;若不存在自循环,则只需要减去双向边条数即可。

大体思路是用friends数据记录iE点的所有朋友(即相邻点),后逐个判断friends数组中某一顶点与其他friends中其他顶点是否为朋友,使用变量friendsIsFriends记录数目并返回。

3.在执行主函数中:

首先创建有向图对象graph并输入邻接矩阵。用string aggCoeff[100]数组来记录每一个顶点的聚集系数。依次对每个顶点进行如下步骤,计算该点的总度数(忽略自循环以及把双向边看作一条边),该点总度数即为该点的朋友总数。

计算聚集系数:

计算聚集系数的分母,即为朋友两两之间能形成连边的总数(可用等差公式)。

聚集系数,众智科学,c++,图论,算法

 分子可用有向类中的getFriendsIsFriends函数得到。

计算聚集系数并把结果记录到aggCoeff数组中的对应顶点编号上。

聚集系数,众智科学,c++,图论,算法

计算邻里重叠度

使用degreeEdges数组记录每对顶点之间的邻里重叠度。对每对顶点m、j依次进行以下操作。用getAEdges数组记录与m点邻接的其他顶点,用getBEdges记录与点j邻接的顶点。legA、legB分别记录m、j点的邻边总数(注意自循环和双向边,处理方式同上)

聚集系数,众智科学,c++,图论,算法

邻里重叠度的分母即为这对顶点的去重复总邻居顶点数,使用自定义getDeno()函数计算:

如果getAEdges与getBEdges有重复顶点,记录重复顶点数为k。总邻居顶点数为总度数减去重复数。

聚集系数,众智科学,c++,图论,算法

 邻里重叠度的分母为同时是A,也同时是B的邻居的节点个数,使用getCoin()函数来获取分子,即getAEdges与getBEdges中的重复顶点数。

聚集系数,众智科学,c++,图论,算法

 记录并输出邻里重叠度结果:聚集系数,众智科学,c++,图论,算法

程序执行结果:

聚集系数,众智科学,c++,图论,算法

根据上图进行矩阵输入,输出结果如下:

聚集系数,众智科学,c++,图论,算法

以上是鄙人对实验内容的一些粗陋想法,若有不当之处欢迎指正。文章来源地址https://www.toymoban.com/news/detail-586472.html

到了这里,关于众智科学:计算聚集系数和邻里重叠度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图论中的聚类系数(Clustering coefficient)简单介绍

    在GraphSage论文的理论分析部分,涉及到一个概念叫做“ Clustering coefficient” ,直译过来就是 聚类系数 ,解释为“节点的一跳邻域内封闭的三角形的比例”,本文对其做一个简单的介绍。本文参考了 Wiki百科-Clustering coefficient。 更:关于GraphSage论文详解,请参见博文《GraphSag

    2023年04月09日
    浏览(41)
  • 众智引领未来:2023中国高校计算机大赛——大数据挑战赛冠军揭晓

    8月27日,由清华大学和大数据系统软件国家工程研究中心联合举办,云智慧协办的“2023中国高校计算机大赛——大数据挑战赛”(以下简称“大赛”)以“线下答辩+全球直播”的形式完美落幕。本次大赛从企业真实场景和实际数据出发,通过基于多源数据的IT系统故障发现赛

    2024年02月10日
    浏览(60)
  • 【计算机算法】【图论】【最优匹配与点云对准问题】最(极)大团算法

    团与最大团的定义 图顶点集的子集满足任意两个顶点相邻,称该子集是该图的一个团。图的所有团中顶点最多的,即最大的一个或多个,称为图的最大团或极大团。 图的最大团的实际应用问题 CVPR2023最佳论文之一用最大团算法实现鲁棒的点云对准,有效解决外点问题。顾名

    2024年03月15日
    浏览(39)
  • CSP认证-现值计算、训练计划、JPEG 解码、聚集方差

    65分解法如下:

    2024年02月12日
    浏览(54)
  • 【线性卷积的DFT算法--重叠相加法和重叠保留法】

    在复习数字信号处理课程中,有关线性卷积的DFT算法的重叠相加法和重叠保留法根据教材不甚理解,网络上未找到便于手算的例题讲解过程,故在学习之后两种方法分别用两个例题详细过程用于理解,写下此文章用于其他人查找和自己学习。 1、将长序列 x [ n ] x[n] x [ n ] 拆分

    2024年02月10日
    浏览(43)
  • 【算法日志】贪心算法刷题:重叠区问题(day31)

    目录 前言 无重叠区间(筛选区间) 划分字母区间(切割区间)  合并区间 今日的重点是掌握重叠区问题。

    2024年02月12日
    浏览(48)
  • 【解惑】时间规划,Linq的Aggregate函数在计算会议重叠时间中的应用

    在繁忙的周五,小悦坐在会议室里,面前摆满了各种文件和会议安排表。她今天的工作任务是为公司安排下周的50个小会议,这让她感到有些头疼。但是,她深吸了一口气,决定耐心地一个一个去处理。 首先,小悦仔细地收集了每个会议的相关信息,包括会议的主题、目的、

    2024年02月08日
    浏览(34)
  • Web 基尼系数的计算

    2024年01月23日
    浏览(46)
  • python计算相关系数R

    方法一: 方法二 参考:https://mp.weixin.qq.com/s/nABJf4WBR4Y4oEZiYKPK4Q

    2024年02月13日
    浏览(38)
  • [QT编程系列-32]:科学计算 - QT支持的科学计算库

    目录 第1章 QT中如何支持科学计算? 1.1 QT没有专门的科学计算库 1.2 QT没有专门的数学运算库 1.3 QT没有数字信号DSP处理库 1.4 QT没有类numpy库 1.5 QT支持的数学运算 第2章 QT数学库详解 2.1 QtMath 2.2 QVector 2.3 QMatrix 在Qt中,虽然 没有专门的科学计算库 ,但你可以使用一些第三方

    2024年02月16日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包