优先连接算法介绍
优先连接算法是复杂网络中的一种经典算法。所谓优先连接,就是新的顶点在加入网络的过程中,以正比于网络中顶点的度的概率去连接顶点。在复杂网络演化中运用优先连接,得到的网络的度分布具有幂律分布的特性。
算法1:以正比于顶点度的概率连接顶点
以正比于顶点度的概率连接顶点的算法是最普通的算法。由于顶点的度肯定是整数,所以有一种简单的方法可以在O(1)的时间内完成一次优先连接选择。
设有一组顶点,序号为1,2,3,….,n,顶点的度存储在数组degrees里,顶点k的度就是degrees[k].
算法描述:
- 生成一个数组choose_array,初始化不含任何元素。
- 遍历数组degrees,对每个遍历到的顶点索引值k,它度数是degrees[k],那么就在choose_array中加入degrees[k]个k。
- 生成一个在0-len(choose_array)-1之间的随机整数random_number,choose_array[random_number]就是所选择的顶点。
算法的原理就是顶点索引在choose_array中出现的次数等于顶点的度。这样,顶点度多大,在choose_array中出现次数越多,被选中概率越大。
from random import randint
def construct_choose_array(degrees):
choose_array = []
length = len(degrees)
for index in range(1, length):
degree = degrees[index]
if degree != 0:
repeat_index_array = [index] * degree
choose_array += repeat_index_array
return choose_array
def prefer_attach_proportional_to_degree(choose_array):
length = len(choose_array)
random_number = randint(0, length - 1)
return choose_array[random_number]
当某个顶点的度增加时,只需要在choose_array数组最后增加这个顶点的索引值即可。顶点在choose_array数组中出现的位置与被选择的概率无关。
算法2:以正比于顶点吸引力的概率连接顶点
算法