C语言解释一下BA无标度网络
2020-02-16 18:05
323 查看
我们见识一下胜者通吃的过程中的 胜者 是如何吞噬剩余的世界的,如果能重现这个过程,我们也就能解释为什么这么大个世界被那么几个很少的国家主宰着,同时我们也能理解为什么同为胜者的几个国家必须结盟的原因。
成王败寇,并非字面上那么简单,秦王扫六合看起来是必然的,因为秦军的打击力量突破了阈值,它连通了整张网络的大部分节点,从而让幂律开始起作用!
同时,病毒的传播并非徒有信心和空有口号就可以抑制,当我们在抨击这张网络为病毒传播提供了温床的同时,其实我们已经享受了这张网络为我们提供的益处好多年了。当我们的Y吹在鼓吹自己宇宙第一超越硅谷的时候,我们应该明白,背后是这张连通的网络在起作用,然而,这张网络是中性的,谁都可以利用。
昨晚看了CCTV-6的老版《马永贞》,最后马老板被砍死影片结束的镜头,让我思考了整个晚上。
BA无标度网络的概念,摘自Wiki:
https://zh.wikipedia.org/wiki/%E6%97%A0%E5%B0%BA%E5%BA%A6%E7%BD%91%E7%BB%9C
问题是,我们如何用最简单的方式重现这个网络构建的过程。
今天我值班,看样子大家都在抗击疫情也没啥事,不跟安德森先生玩的间隙,随手撸了一手C代码(python内部的实现太复杂了,我不懂编程,看不懂),可能并不严谨甚至并不正确,但意思就是那个意思:
- “凡有的,还要加倍给他叫他多余;没有的,连他所有的也要夺过来” - 《新约·马太福音》
代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_SIZE 200 struct map_node; struct map_node { unsigned int id; struct map_node *links[MAX_SIZE]; unsigned int curr_links; }; static unsigned int curr_map_nodes = 1; static struct map_node map_nodes[MAX_SIZE]; static int init = 5; static void add_one(struct map_node *map_node) { int pos = 0; int i = 0; unsigned int percent = 0; srand((unsigned)time(NULL)); percent = rand()%curr_map_nodes; for (i = 0; i < curr_map_nodes; i ++) { if (percent >= pos && percent < pos + map_nodes[i].curr_links) { map_nodes[i].links[map_nodes[i].curr_links] = map_node; map_nodes[i].curr_links ++; map_node->curr_links = 1; map_node->links[0] = &map_nodes[i]; curr_map_nodes ++; #if 0 printf("percent:%d pos:%d total:%d\n", percent, pos, curr_map_nodes); #endif break; } pos += map_nodes[i].curr_links; } } int main(int argc, char **argv) { int i, j; for (i = 0; i < MAX_SIZE; i ++) { memset(&map_nodes[i], 0, sizeof(struct map_node)); map_nodes[i].id = i + 1; } for (i = 0; i < init; i ++) { map_nodes[i].links[0] = &map_nodes[(i + 1)%init]; map_nodes[i].curr_links = 1; curr_map_nodes ++; } for (i = init - 1; i < MAX_SIZE; i ++) { add_one(&map_nodes[i]); } for (i = 0; i < MAX_SIZE; i ++) { printf("##### ID:%d links:%d edges: ", map_nodes[i].id, map_nodes[i].curr_links); for (j = 0; j < map_nodes[i].curr_links; j ++) { printf("%d ", map_nodes[i].links[j]->id); } printf("\n"); } }
概率归一化这部分我感觉是有问题的,随机数概率计算那部分并不严谨,但定性表达是足够了。
浙江温州皮鞋湿,下雨进水不会胖!
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- C++ 过去的这一年
- c/c++编程函数不要有多个return
- DEV-C++支持C99标准设置方法
- C走迷宫源文件,建议使用Dev-C++编译
- 手工脱壳之 UPX 【随机基址】【模拟UPX部分算法】【手工C++重建重定位表】
- c++ 结构体与类
- c++(8)-c++调用c
- c++(9)-new与namespace
- c++(14)-继承
- C++顺序存储的线性表的代码
- C语言解决关于兔子的古典问题的代码
- C++ 学习笔记(一) cout 与printf 的不同之处
- C++ 学习笔记(二) const的加强
- C语言值传递与址传递
- C++课程笔记 Lesson 01
- 五道金融计算题在C语言上的实现
- iOS导入c++语言的静态库之后编译不过,先要检查是否导入了libstdc++
- c++ 编译出现error : identifier '_DebugHeapTag'
- C/C++内存四区
- c语言数字图像处理(二):图片放大与缩小-双线性内插法