C语言解释一下BA无标度网络

我们见识一下胜者通吃的过程中的 胜者 是如何吞噬剩余的世界的,如果能重现这个过程,我们也就能解释为什么这么大个世界被那么几个很少的国家主宰着,同时我们也能理解为什么同为胜者的几个国家必须结盟的原因。

成王败寇,并非字面上那么简单,秦王扫六合看起来是必然的,因为秦军的打击力量突破了阈值,它连通了整张网络的大部分节点,从而让幂律开始起作用!

同时,病毒的传播并非徒有信心和空有口号就可以抑制,当我们在抨击这张网络为病毒传播提供了温床的同时,其实我们已经享受了这张网络为我们提供的益处好多年了。当我们的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");
    }
}

概率归一化这部分我感觉是有问题的,随机数概率计算那部分并不严谨,但定性表达是足够了。


浙江温州皮鞋湿,下雨进水不会胖!

原文链接: https://blog.csdn.net/dog250/article/details/104114019

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C语言解释一下BA无标度网络

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/406123

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月26日 上午9:37
下一篇 2023年4月26日 上午9:38

相关推荐