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

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

实验内容:

输入:任意的有向图

输出:

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日
    浏览(20)
  • 众智引领未来:2023中国高校计算机大赛——大数据挑战赛冠军揭晓

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

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

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

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

    65分解法如下:

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

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

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

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

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

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

    2024年02月08日
    浏览(26)
  • python计算相关系数R

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

    2024年02月13日
    浏览(26)
  • [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日
    浏览(36)
  • js计算皮尔逊相关系数

    代码如下; 调用:  效果:

    2024年01月25日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包