複雜網路學習筆記 2 無標度網路的建立

2021-07-31 17:18:41 字數 3456 閱讀 2098

scale - free network, 現實世界的網路大部分都不是隨機網路,少數的節點往往擁有大量的連線,而大部分節點卻很少,一般而言他們符合二八定律。將度分布符合冪律分布的複雜網路稱為無標度網路。

如網際網路,大型軟體的結構特性都屬於無標度網路:

只要攻擊那些度數很多的關鍵節點就能引起最大的攻擊效益。

這也正體現了無標度網路對蓄意攻擊的脆弱性(李青老師用了乙個有趣的阿喀琉斯踵的故事),總結如下:

*通用異常類error.h

#ifndef error_h

#define error_h

#includeusing namespace std;

//通用異常類

class error

; //析構函式

void show() const; //顯示異常資訊

};error::error(const char *mes)

void error::show()const

#endif

*無向圖鄰接網的邊節點類arc.h

#ifndef null

#define null (void *)0

#endif

#ifndef arc_h

#define arc_h

//邊節點類

struct arc

;arc::arc(int n, arc* next)

#endif

*無向圖鄰接表的頂點節點類vex.h

#ifndef null

#define null 0

#endif

#ifndef vex_h

#define vex_h

#include "arc.h"

struct vex

;vex::vex()

#endif

這裡補充一下無標度網路的生成過程,直接搬老師ppt好了:

*鄰接網路(無標度模型)類network.h

#ifndef null

#define null (void *)0

#endif

#ifndef network_h

#define network_h

#include "vex.h"

#include "error.h"

#define n 4//最近鄰網路

//鄰接網路(無標度模型)類

struct network

;network::network(int v,int n) //構造有v個頂點,最大為n的空表

void network::clear() //清空邊節點

vextable[i].k = 0;

} nummod = 0;//清空nummod

}void network::delarc(int a, int b) //刪除從a到b的邊

else //如果不是第乙個點

}} //刪除b->a

if (vextable[b].pfirst->inum == a) //如果是第乙個點

else //如果不是第乙個點

} }}

bool network::hasarc(int a, int b) //查詢是否有從a到b的邊

p = p->pnext; //沒檢索到,繼續找

} return k;

}void network::buildarc(int a, int b) //建立從a到b的邊

p = p->pnext; //沒檢索到,繼續找

} if (k == 0) //如果沒有邊,建立之 }

void network::step1() //清空全表,然後形成部分近鄰網路

vextable[i].k = n;//度數肯定為n,這句可有可無,build時已經做好了

} nummod = n*vexnum;//初始化,這句可有可無,build時已經做好了

}void network::step2()

} }vexnum = maxnum;//執行完後vexnum可以充滿整個陣列

}void network::show() //顯示

cout << endl; }}

#endif

*程式入口wbd.cpp

// wbd.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include "network.h" //鄰接網路(無標度模型)類

using namespace std;

#define ok 25

#define maxi 100

int _tmain(int argc, _tchar* argv)

catch (error er)

return 0;

}

執行結果:

先生成空網路,我這裡有效=25,開的陣列=100

再生成最近鄰網路(是其它的什麼網路也可以),我這裡n=4

最後進行偏好增長,這是獲取無標度特性的最關鍵的步驟

可以看到前面的節點因為度的基數大,被選中的概率也會大,後加進來的只有零星的幾個再次被選中(編號24以後的那些不止有一條邊的節點),說明這個建模是成功的。

小世界網路寫完整後執行不出結果,有空繼續debug吧。

複雜網路之無標度網路的界限

物理學,生物學,社會學發展至今 人們同時意識到這樣乙個問題 世界的多彩並不包含在於組成系統的個體之中 而存在於個體之間的關係。例如原子的組織方式就決定了物質的巨集觀性質,有時候我們甚至不需要關心某乙個系統的基本構成磚塊究竟是什麼。這種個體之間的組織關係,可以抽象成乙個圖來表示。而由於真實世界系統的龐...

python繪製BA無標度網路

檔名稱 a.py 作 者 孔雲 問題描述 問題分析 如下 import networkx as ne 匯入建網路模型包,命名ne import matplotlib.pyplot as mp 匯入科學繪圖包,命名mp ba scale free degree network graphy ba ne...

複雜網路學習3

dynamical processes on complex networks 學習 剛剛發現這本書是所看過的複雜網路書籍中最好學的一本,對問題的解釋比較清晰,把一些很複雜的概念用淺顯易懂的數學公式概括出來,而至於具體的推算過程,可以供不同方向的讀者去查閱相關資料。比如說裡面講主方程法,只用乙個很簡...