实验内容:

输入:任意的有向图

输出:

1)每个节点的聚集系数

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

相关定义介绍:

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

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

实验思路说明:

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

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

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]数组来记录每一个顶点的聚集系数。依次对每个顶点进行如下步骤,计算该点的总度数(忽略自循环以及把双向边看作一条边),该点总度数即为该点的朋友总数。

计算聚集系数:

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

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

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

计算邻里重叠度

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

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

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

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

记录并输出邻里重叠度结果:

程序执行结果:

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

以上是鄙人对实验内容的一些粗陋想法,若有不当之处欢迎指正。

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

  1. 山东大学众智科学实验一二

    1.概述 本门课的核心是网络的概念--网络是事物之间相互关联的一种模式.比如我们身在其中的社会网络,体现朋友之间的社交联系.等等. 1.1网络的基本问题 先放几个社会中的网络结构 金融机构之间的借贷网 ...

  2. 山东大学众智科学与网络化产业复习笔记

    山东大学众智科学复习笔记 写在前面:鹿男神yyds,讲课诙谐有趣,条理清晰,给分可冲,总而言之,众智可冲,题主94,12/160,本文是复习时的总结,希望学弟学妹95+ 第一章 图论基础 图 = 事物 ...

  3. 山东大学软件学院众智科学与网络化产业(网络、群体与市场)复习笔记

    文章目录 教材版本 第1章:概述 第2章:图论 第3章:强联系和弱联系 第4章:网络及其存在的环境 4.1 同质性 4.2 同质现象背后的机制:选择与社会影响 4.5 隔离的一种空间模型 第5章:正关 ...

  4. 山东大学软件学院2022年春众智科学与网络化产业期末考试

    山东大学软件学院2022年春众智科学与网络化产业期末考试 时间:2022年6月28日 14:30-16:30 本次考试共十道大题 ! 本题考查博弈,材料来源:百度百科-协调博弈.题目要求(1)画出博弈 ...

  5. 山东大学软件学院众智科学与网络化产业期末考试回忆版

    文章目录 一.考试时间 二.考试范围 三.考试题目 四.总结 一.考试时间 2021年6月24日 下午2:00-4:00 本次考试为软件学院2019级大二下的众志考试 二.考试范围 除了表决这一章不考 ...

  6. 众智科学:友谊悖论验证

    实验内容: 输入:任意图的邻接矩阵(考察随机图和社会网络两种图,模拟生成)u 输出:符合友谊悖论的节点占比 相关定义:友谊悖论:是一种社会现象, 指大多数人认为, 自己的朋友比自己拥有更多的朋友 实验 ...

  7. 山东大学2018-2019众智科学与网络化产业期末试题

    1.说明强三元闭包和捷径,证明捷径一定是弱关系 2.说明阿罗不可能定理 3.pagerank计算(和去年题目一样,迭代两次) 4.市场清仓求最大和 和去年题目一样 5.gsp vcg计算(和去年一样) ...

  8. 山东大学软件学院2022年众智科学期末简单回忆版题目

    1.求收益矩阵,混合策略纳什均衡求解 2.GSP,VCG计算价格 3.群体序列形成的中位项算法描述 4.弱平衡定理的证明 5.计算有同比缩减与统一补偿规则的PageRank,以及描述随机游走:Page ...

  9. 众智科学真题回忆及自己想说的话

    2021.12.29 本次考试难度剧增,与往届简直不是一个水平的考试┭┮﹏┭┮ 考试前鹿老师就说过本次不再用PPT上和课本上的原题来考试了(可见前几年的学生有多么幸福),结果这次考试有几个题几乎全军覆 ...

最新文章

  1. WIN7+wampserver2.4+zend stadio10.6.1配置Xdebug
  2. 避免在 ASP.NET Core 3.0 中为启动类注入服务
  3. C#工业物联网和集成系统解决方案的技术路线
  4. 导入数据库怎么导入_导入必要的库
  5. 利用python编写祝福_手把手|教你用Python换个姿势,送狗年祝福语
  6. element ui下拉框实现
  7. wifi频率和zigbee干扰_怎样设置Zigbee和wifi信道避免干扰?
  8. java 判断正态分布_如何判断一个样本是否来自正态分布的总体?
  9. 汇编程序的有符号数与无符号数的加减乘除(8086)
  10. robots文件简介
  11. java如何导出excel_JAVA如何导出EXCEL表格
  12. linux网络标志有个问号,只有Linux中的问号
  13. 2021年茶艺师(初级)考试及茶艺师(初级)考试总结
  14. Nginx源码安装及调优配置(二)
  15. 捕鱼达人(unity实现)
  16. 速腾雷达录包方法(32线)
  17. html5的download下载标签
  18. BUCK电源芯片中自举电容的说明
  19. servlet生命周期:
  20. Vue 世界地图 七大洲mark标记效果

热门文章

  1. 我利用业余时间通过写作挣了3个顶配Mac Pro
  2. 2022年新一批获得能力评估CS认证证书的企业名单
  3. About Oracle 分区(Partitions)
  4. 【MySql笔记】1.0
  5. win10 安装和使用winscp
  6. 2021年安全员-A证考试技巧及安全员-A证操作证考试
  7. 1. Swift 中的 let 和 var
  8. 前端优化 ---- 从编码、缓存、打包与兼容性几个方面讨论
  9. 关于Unity RaycastHit2D 的使用心得
  10. Deep Dream 模型