004C语言 实现小世界网络

1简介:

小世界网络最早由Watts和Strogtz在1998年提出,小世界网络存在于数学、物理学和社会学中,是一种数学图的模型。在这种图中大部份的结点不与彼此邻接,但大部份结点可以通过任一其它节点经少数几步就可以产生联系。若将一个小世界网络中的点代表一个人,而联机代表人与人之间是相互认识的,则这小世界网络可以反映陌生人通过彼此共同认识的人而起来产生联系关系的小世界现象。(还记得那个著名的六度分隔理论吗?)

在小世界网络之前,人们研究的较多的是较稀疏的邻近耦合网络和随机网络,但是这两种网络都有其局限性(有兴趣可以自己查阅资料),不能准确地刻画现实世界的特性。所以小世界网络应运而生,其核心思想是随机化重连,通过随机概率的变化实现了邻近耦合网络到随机网络的过渡,而这个过渡就是小世界网络。

下面介绍这个随机化重连的规则:

1、从规则图开始:考虑一个含有N个点的最近邻耦合网络,它们围成一个环,其中每个节点都与它左右相邻的各K/2节点相连,K是偶数。
2、随机化重连:以概率p随机地从新连接网络中的每个边,取一个点顺时针重连间隔为0点之间的边,一端固定,另一端重连,顺时针一圈之后再重连间隔为1点之间的边(具体这个规则可以看Collective dynamics of ‘small-world’ networks这篇论文)。其中规定,任意两个不同的节点之间至多只能有一条边,并且每一个节点都不能有边与自身相连。

图示:


以上就是构建小世界网络的WS算法,但是这种规则有一个问题,就是会导致一些节点被孤立(因为可能连接节点的边都被重连了而却没有边连接这个节点),有兴趣的可以了解一下另一种NW算法,其核心思想是随机化加边,当然了,写论文的两位也意识到了这个问题,于是他们提出了一个规则来尽可能避免,那就是N>>K>>ln(N)>>1,(关于这个大家可以好好思考一下)。

如果想对小世界有一个比较准确完整的了解,百度是没用的,应该直接看1998年那篇论文:Collective dynamics of ‘small-world’ networks。需要的可以留言。

2最短路径:

在构建小世界网络时不可避免的要计算点对之间的最短路径,这里介绍Floyd算法,这个算法虽然时间复杂度有些大O(n^3),但是其简洁深刻真是我印象深刻,其真正核心的代码用C语言描述也只有5行!关于Floyd算法可以百度更多信息,这里

  • 15
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值