众智科学:计算聚集系数和邻里重叠度
实验内容:
输入:任意的有向图
输出:
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网络的基本问题 先放几个社会中的网络结构 金融机构之间的借贷网 ...
- 山东大学众智科学与网络化产业复习笔记
山东大学众智科学复习笔记 写在前面:鹿男神yyds,讲课诙谐有趣,条理清晰,给分可冲,总而言之,众智可冲,题主94,12/160,本文是复习时的总结,希望学弟学妹95+ 第一章 图论基础 图 = 事物 ...
- 山东大学软件学院众智科学与网络化产业(网络、群体与市场)复习笔记
文章目录 教材版本 第1章:概述 第2章:图论 第3章:强联系和弱联系 第4章:网络及其存在的环境 4.1 同质性 4.2 同质现象背后的机制:选择与社会影响 4.5 隔离的一种空间模型 第5章:正关 ...
- 山东大学软件学院2022年春众智科学与网络化产业期末考试
山东大学软件学院2022年春众智科学与网络化产业期末考试 时间:2022年6月28日 14:30-16:30 本次考试共十道大题 ! 本题考查博弈,材料来源:百度百科-协调博弈.题目要求(1)画出博弈 ...
- 山东大学软件学院众智科学与网络化产业期末考试回忆版
文章目录 一.考试时间 二.考试范围 三.考试题目 四.总结 一.考试时间 2021年6月24日 下午2:00-4:00 本次考试为软件学院2019级大二下的众志考试 二.考试范围 除了表决这一章不考 ...
- 众智科学:友谊悖论验证
实验内容: 输入:任意图的邻接矩阵(考察随机图和社会网络两种图,模拟生成)u 输出:符合友谊悖论的节点占比 相关定义:友谊悖论:是一种社会现象, 指大多数人认为, 自己的朋友比自己拥有更多的朋友 实验 ...
- 山东大学2018-2019众智科学与网络化产业期末试题
1.说明强三元闭包和捷径,证明捷径一定是弱关系 2.说明阿罗不可能定理 3.pagerank计算(和去年题目一样,迭代两次) 4.市场清仓求最大和 和去年题目一样 5.gsp vcg计算(和去年一样) ...
- 山东大学软件学院2022年众智科学期末简单回忆版题目
1.求收益矩阵,混合策略纳什均衡求解 2.GSP,VCG计算价格 3.群体序列形成的中位项算法描述 4.弱平衡定理的证明 5.计算有同比缩减与统一补偿规则的PageRank,以及描述随机游走:Page ...
- 众智科学真题回忆及自己想说的话
2021.12.29 本次考试难度剧增,与往届简直不是一个水平的考试┭┮﹏┭┮ 考试前鹿老师就说过本次不再用PPT上和课本上的原题来考试了(可见前几年的学生有多么幸福),结果这次考试有几个题几乎全军覆 ...
最新文章
- WIN7+wampserver2.4+zend stadio10.6.1配置Xdebug
- 避免在 ASP.NET Core 3.0 中为启动类注入服务
- C#工业物联网和集成系统解决方案的技术路线
- 导入数据库怎么导入_导入必要的库
- 利用python编写祝福_手把手|教你用Python换个姿势,送狗年祝福语
- element ui下拉框实现
- wifi频率和zigbee干扰_怎样设置Zigbee和wifi信道避免干扰?
- java 判断正态分布_如何判断一个样本是否来自正态分布的总体?
- 汇编程序的有符号数与无符号数的加减乘除(8086)
- robots文件简介
- java如何导出excel_JAVA如何导出EXCEL表格
- linux网络标志有个问号,只有Linux中的问号
- 2021年茶艺师(初级)考试及茶艺师(初级)考试总结
- Nginx源码安装及调优配置(二)
- 捕鱼达人(unity实现)
- 速腾雷达录包方法(32线)
- html5的download下载标签
- BUCK电源芯片中自举电容的说明
- servlet生命周期:
- Vue 世界地图 七大洲mark标记效果