大家有没有想过一个有点绕的问题:是自己的朋友多,还是自己朋友的朋友多?仔细一想,大部分人朋友里都有一两个甚至几个朋友超多的人,会不会因为这几个人拔高自己朋友的朋友数的平均值?(好绕啊),但是转念一想朋友里也总有几个不太合群只和自己好的人,那么,到底是我们的朋友多,还是我们朋友的朋友数的平均值多???
假设在一个区域内,有 NNN 个人, 第 iii 个人有 kik_iki 个朋友,想象一下这个 kik_iki 就是这个人和其他人的纽带数量,也就是朋友数量。
比如这张图来说,k1=0,k2=2,k3=3,k4=2,k5=3k_1 = 0, k_2 = 2, k_3 = 3,k_4 = 2, k_5 = 3k1=0,k2=2,k3=3,k4=2,k5=3,非常好理解,同时我们可以把两个人有没有关系用邻接矩阵表示,Aij=1A_{ij}=1Aij=1 表示两个人是朋友,Aij=0A_{ij} = 0Aij=0 表示俩人不熟,那么上面那张图就可以用一个这样的矩阵表示:
A=[0000000101010110010101110] A = \left[\begin{array}{cc} 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 1 & 0 & 1\\ 0 & 1 & 0 & 1 & 1\\ 0 & 0 & 1 & 0 & 1\\ 0 & 1 & 1 & 1 & 0 \end{array}\right] A=0000000101010110010101110
那我问你,假设我是第 iii 个人,那么我的朋友平均有多少朋友??
Qi=1ki∑jAijkj Q_i = \frac{1}{k_i}\sum_j A_{ij} k_j Qi=ki1j∑Aijkj
小手一挥一个公式跃然纸上,非常合理,我有 kik_iki 个朋友,我就要统计这 kik_iki 个人并求平均值,所以要除以 kik_iki , 同时和我没关系的 jjj ,其 Aij=0A_{ij}=0Aij=0, 只有有关系的才有 Aij=1A_{ij}=1Aij=1,所以我把有关系的人的 kjk_jkj 加起来,除以 kik_iki,不就是我的朋友的平均朋友数嘛。
我们知道,对于任意一个人,拥有的朋友个数的期望都是 E[k]E[k]E[k], 也常写做 $\left \langle k \right \rangle $, 那么这个 QQQ 它的期望是多少呢(就把所有 QiQ_iQi 取平均值)?
E(Q)=1N∑i1ki∑jAijkj=1N∑i1ki∑jE[Aij]kj \begin{aligned} E(Q) &= \frac{1}{N}\sum_i \frac{1}{k_i}\sum_j A_{ij} k_j\\ & = \frac{1}{N}\sum_i \frac{1}{k_i}\sum_j E[A_{ij}] k_j \end{aligned} E(Q)=N1i∑ki1j∑Aijkj=N1i∑ki1j∑E[Aij]kj
这就转化为了一个严肃的问题, E[Aij]E[A_{ij}]E[Aij] 怎么估计?
想象一下除了 iii 的手外,有超多只手,多到 kik_iki 可以忽略不计,那么超多手是多少呢,大概有 ⟨k⟩N\left \langle k \right \rangle N⟨k⟩N 那么多(总人数乘以手数量的期望),我其中某一只手拉住 jjj 的任意一只手的概率就是 kj/(⟨k⟩N)k_j/(\left \langle k \right \rangle N)kj/(⟨k⟩N),而我每一只手都有可能拉住 jjj, 那么我们俩牵手成功的概率就是:
E[Aij]=kikj⟨k⟩N E[A_{ij}] = \frac{k_ik_j}{\left \langle k \right \rangle N} E[Aij]=⟨k⟩Nkikj
带回到原来的式子:
E(Q)=1N∑i1ki∑jkikj⟨k⟩Nkj=1N⟨k⟩∑ikiki1N∑jkj2=1N⟨k⟩∑i⟨k2⟩=⟨k2⟩⟨k⟩ \begin{aligned} E(Q) &= \frac{1}{N}\sum_i \frac{1}{k_i}\sum_j \frac{k_ik_j}{\left \langle k \right \rangle N}k_j\\ &=\frac{1}{N\left \langle k \right \rangle}\sum_i \frac{k_i}{k_i}\frac{1}{N}\sum_j k_j^2\\ & = \frac{1}{N\left \langle k \right \rangle}\sum_i \left \langle k^2 \right \rangle\\ & = \frac{\left \langle k^2 \right \rangle}{\left \langle k \right \rangle} \end{aligned} E(Q)=N1i∑ki1j∑⟨k⟩Nkikjkj=N⟨k⟩1i∑kikiN1j∑kj2=N⟨k⟩1i∑⟨k2⟩=⟨k⟩⟨k2⟩
这个结果就相当有意思,我们只需要比较 E[k2]/E[k]E[k^2]/E[k]E[k2]/E[k] 和 E[k]E[k]E[k] 谁大就行了,也就是看 E[k2]E[k^2]E[k2] 和 E[k]2E[k]^2E[k]2 谁大, 非常优雅。
完全随机网络 (Erdős-Rényi model)
不同的网络其 ⟨k2⟩\left \langle k^2 \right \rangle⟨k2⟩ 和 ⟨k⟩\left \langle k \right \rangle⟨k⟩ 各不相同,我们先假设一个完全随机的网络,就是任意两个人有概率 ppp 成为好朋友(好耶),那么一个人有 kkk 个朋友的概率就是:
P(k)=(N−1k)pk(1−p)N−1−k P(k)=\binom{N-1}{k} p^k(1-p)^{N-1-k} P(k)=(kN−1)pk(1−p)N−1−k
当这个网络人非常非常多的时候我们有 N→∞N\to\inftyN→∞, 假设 λ=pN\lambda = pNλ=pN:
P(k)=(Nk)pk(1−p)N−k=N(N−1)⋯(N−k)k!pk(1−p)N−k≈Nkk!pk(1−λN)N=(pN)kk!(1−λN)N=λke−λk! \begin{aligned} P(k)&=\binom{N}{k} p^k(1-p)^{N-k}\\ & = \frac{N(N-1)\cdots(N-k)}{k!}p^k(1-p)^{N-k}\\ & \approx \frac{N^k}{k!}p^k(1-\frac{\lambda}{N})^{N}\\ & = \frac{(pN)^k}{k!}(1-\frac{\lambda}{N})^{N}\\ & = \frac{\lambda^k e^{-\lambda}}{k!} \end{aligned} P(k)=(kN)pk(1−p)N−k=k!N(N−1)⋯(N−k)pk(1−p)N−k≈k!Nkpk(1−Nλ)N=k!(pN)k(1−Nλ)N=k!λke−λ
这不就是一个泊松分布嘛!!
E[k]=λ=pN E[k] = \lambda = pN E[k]=λ=pN
(要是不放心直接用可以证明一下)
E[k]=∑k=1∞kP(k)=∑k=1∞kλke−λk!=λe−λ∑k=1∞λk−1(k−1)!=λe−λeλ=λ \begin{aligned} E[k] &= \sum_{k=1}^{\infty} kP(k) =\sum_{k=1}^{\infty} k\frac{\lambda^k e^{-\lambda}}{k!} \\ &=\lambda e^{-\lambda}\sum_{k=1}^{\infty}\frac{\lambda^{k-1}}{(k-1)!} = \lambda e^{-\lambda}e^{\lambda} = \lambda \end{aligned} E[k]=k=1∑∞kP(k)=k=1∑∞kk!λke−λ=λe−λk=1∑∞(k−1)!λk−1=λe−λeλ=λ
类似的流程可以发现
E[k2]=λ2+λ=(pN)2+pN E[k^2] = \lambda^2 + \lambda = (pN)^2 + pN E[k2]=λ2+λ=(pN)2+pN
所以对于完全随机网络:
⟨k2⟩⟨k⟩=λ2+λλ=λ+1>λ \frac{\left \langle k^2 \right \rangle}{\left \langle k \right \rangle} = \frac{\lambda^2 + \lambda}{\lambda}=\lambda+1>\lambda ⟨k⟩⟨k2⟩=λλ2+λ=λ+1>λ
所以对于完全随机网络,期望上,朋友的朋友平均数比自己的朋友数要多,而且多的数量的期望为1, 非常的 amazing。
Barab´asi-Albert mode
但是网络怎么可能都是完全随机的捏,我们再来看看其他网络:
开始上难度了
假设我们一开始有一个小网络,有 N0N_0N0 个人,随着时间流逝不断有新人加入直到整个网络达到 NNN 个人,每个新人加入的时候会和其中 mmm 个人交朋友(m≤N0m \leq N_0m≤N0),且网络中的人被选中的几率和他本身朋友数量有关,朋友越多被选中概率越高,那么假设新来的人为 iii,他和网络中原本就在的人 jjj 交朋友的概率为:
P(i↔j)=kj∑lklP(i \leftrightarrow j)=\frac{k_j}{\sum_l k_l}P(i↔j)=∑lklkj
就是 jjj 的朋友数除以总得朋友数 (jjj 的度除以总度数)
该模型就有点类似于一些社交软件,刚注册给你推荐10个人关注那种,且越是大博主被推荐概率越高。
那么有 kkk 个朋友的人被推荐的概率也非常好算,就是把所有k个朋友的人的度加在一起,除以这个网络的总度数:由于 N0N_0N0 非常小,而每多一个人都会给网络带来 2m2m2m 的度,所以有下面的公式:
kpk∑kkpk=kpk2m\frac{k p_k}{\sum_k k p_k}=\frac{k p_k}{2 m}∑kkpkkpk=2mkpk
同时我们每个新人加入需要选 mmm 个人交朋友,就是选 mmm 次,就是再乘以 mmm:
mkpk2m=12kpk m \frac{k p_k}{2 m}=\frac{1}{2} k p_k m2mkpk=21kpk
所以每加入一个新人,从期望来看,会有大约 12kpk\frac{1}{2} k p_k21kpk 个度数为 kkk 的人被选中,度数增加1变成 k+1k+1k+1。
(n+1)pk,n+1−npk,n={12(k−1)pk−1,n−12kpk,n for k>m,1−12mpm,n for k=m.(n+1) p_{k, n+1}-n p_{k, n}= \begin{cases}\frac{1}{2}(k-1) p_{k-1, n}-\frac{1}{2} k p_{k, n} & \text { for } k>m, \\ 1-\frac{1}{2} m p_{m, n} & \text { for } k=m .\end{cases}(n+1)pk,n+1−npk,n={21(k−1)pk−1,n−21kpk,n1−21mpm,n for k>m, for k=m.
所以我们每加入一个新人,度为 kkk 的人数变化(就是(n+1)pk,n+1−npk,n(n+1) p_{k, n+1}-n p_{k, n}(n+1)pk,n+1−npk,n),是由一部分原本度数为 kkk 的人度数变成 k+1k+1k+1(就是这一项−12kpk,n-\frac{1}{2} k p_{k, n}−21kpk,n)导致的减少,和一部分原本度数为 k−1k-1k−1的人度数变成 kkk (就是这一项12(k−1)pk−1,n\frac{1}{2}(k-1) p_{k-1, n}21(k−1)pk−1,n)导致的增加,共同作用导致的结果
当然我们认为原来的网络每个人的度数都至少是 mmm,所以不存在度为 m−1m-1m−1 的人,所以12(m−1)pm−1,n=0\frac{1}{2}(m-1) p_{m-1, n}=021(m−1)pm−1,n=0,而新加入的那个人正好度数为 mmm 所以度数为 mmm 的人增加了1,所以 k=mk=mk=m 的时候公式变为 1−12mpm,n1-\frac{1}{2} m p_{m, n}1−21mpm,n。
当整个网络达到稳定状态的时候,度的分布不随新的人加入而变化,我们有:pk,n+1=pk,n=pkp_{k, n+1}=p_{k, n}=p_kpk,n+1=pk,n=pk
pk={12(k−1)pk−1−12kpk for k>m1−12mpm for k=m p_k= \begin{cases}\frac{1}{2}(k-1) p_{k-1}-\frac{1}{2} k p_k & \text { for } k>m \\ 1-\frac{1}{2} m p_m & \text { for } k=m\end{cases} pk={21(k−1)pk−1−21kpk1−21mpm for k>m for k=m
我们发现当 k=mk=mk=m 时:
pm=1−12mpm⟹pm=2m+2 p_m = 1-\frac{1}{2} m p_m \Longrightarrow p_m = \frac{2}{m+2} pm=1−21mpm⟹pm=m+22
我们发现当 k>mk>mk>m 时:
pk=12(k−1)pk−1−12kpk⟹2pk=(k−1)pk−1−kpk⟹pk=k−1k+2pk−1 \begin{aligned} p_k &= \frac{1}{2}(k-1) p_{k-1}-\frac{1}{2} k p_k\\ &\Longrightarrow 2p_k = (k-1) p_{k-1}- k p_k\\ &\Longrightarrow p_k = \frac{k-1}{k+2}p_{k-1} \end{aligned} pk=21(k−1)pk−1−21kpk⟹2pk=(k−1)pk−1−kpk⟹pk=k+2k−1pk−1
这不就是简简单单一个递推公式嘛,我们有:
pk=(k−1)(k−2)…m(k+2)(k+1)…(m+3)pm=2m(m+1)(k+2)(k+1)k p_k=\frac{(k-1)(k-2) \ldots m}{(k+2)(k+1) \ldots(m+3)} p_m=\frac{2 m(m+1)}{(k+2)(k+1) k} pk=(k+2)(k+1)…(m+3)(k−1)(k−2)…mpm=(k+2)(k+1)k2m(m+1)
这个公式太麻烦了,但我们能轻易看出来 pk∼k−3p_k \sim k^{-3}pk∼k−3,不妨令:
pk=Ak−3 p_k = A k^{-3} pk=Ak−3
我们所有概率加起来得是1所以当N→∞N\to\inftyN→∞有:
1=A∫mNk−3dk=A[−12k−2]mN≈A2m2⇒A=2m2 1 = A\int_m^{N}k^{-3}dk = A\left[-\frac{1}{2} k^{-2}\right]_m^{N} \approx \frac{A}{2m^2}\Rightarrow A = 2m^2 1=A∫mNk−3dk=A[−21k−2]mN≈2m2A⇒A=2m2
所以有:
pk=2m2k−3 p_k = 2m^2 k^{-3} pk=2m2k−3
可以看到和原本公式
pk=2m(m+1)(k+2)(k+1)k p_k =\frac{2 m(m+1)}{(k+2)(k+1) k} pk=(k+2)(k+1)k2m(m+1)
还是很像的,那么我们计算一下 E[k2],E[k]E[k^2],E[k]E[k2],E[k]:
E[k]=∫mNkpkdx=2m2∫mNk−2dx=2m2[−k−1]mN≈2m \begin{aligned} E[k] &= \int_m^{N}kp_kdx=2m^2\int_m^{N}k^{-2}dx\\ &=2m^2\left[- k^{-1}\right]_m^{N}\approx 2m \end{aligned} E[k]=∫mNkpkdx=2m2∫mNk−2dx=2m2[−k−1]mN≈2m
E[k2]=∫mNk2pkdx=2m2∫mNk−1dx=2m2[lnk]mN=2m2lnNm \begin{aligned} E[k^2] &= \int_m^{N}k^2p_kdx=2m^2\int_m^{N}k^{-1}dx\\ &=2m^2\left[\ln k\right]_m^{N}= 2m^2\ln \frac{N}{m}\end{aligned} E[k2]=∫mNk2pkdx=2m2∫mNk−1dx=2m2[lnk]mN=2m2lnmN
所以有:
⟨k2⟩⟨k⟩=2m2lnNm2m=mlnNm≫2m \frac{\left \langle k^2 \right \rangle}{\left \langle k \right \rangle} =\frac{2m^2\ln \frac{N}{m}}{2m} = m\ln \frac{N}{m} \gg 2m ⟨k⟩⟨k2⟩=2m2m2lnmN=mlnmN≫2m
所以说当社区足够大,一个人朋友的朋友数的平均数基本上会远远大于朋友数。
现实网络
我们新加入一个社区加10个人后面只会加新人的设定还是不太真实,实际上大部分网络都可以用下面公式表示:
pk=Ak−γfor 2<γ<3 p_k = A k^{-\gamma}\quad \text{for } 2<\gamma<3 pk=Ak−γfor 2<γ<3
我们再来看看另一个极端 pk=Ak−2p_k = A k^{-2}pk=Ak−2。依旧有:
1=A∫mNk−2dk=A[−k−1]mN≈Am⇒A=m 1 = A\int_m^{N}k^{-2}dk = A\left[- k^{-1}\right]_m^{N} \approx \frac{A}{m}\Rightarrow A = m 1=A∫mNk−2dk=A[−k−1]mN≈mA⇒A=m
pk=mk−2p_k = m k^{-2}pk=mk−2
因此:
E[k]=∫mNkpkdx=m∫mNk−1dx=m[lnk]mN=mlnNm \begin{aligned} E[k] &= \int_m^{N}kp_kdx=m\int_m^{N}k^{-1}dx\\ &=m\left[\ln k\right]_m^{N}=m\ln\frac{N}{m} \end{aligned} E[k]=∫mNkpkdx=m∫mNk−1dx=m[lnk]mN=mlnmN
E[k2]=∫mNk2pkdx=m∫mN1dx=m[k]mN=m(N−m) \begin{aligned} E[k^2] &= \int_m^{N}k^2p_kdx=m\int_m^{N}1dx\\ &=m\left[k\right]_m^{N}=m(N-m) \end{aligned} E[k2]=∫mNk2pkdx=m∫mN1dx=m[k]mN=m(N−m)
所以有:
⟨k2⟩⟨k⟩=N−mlnN−lnm>m(lnN−lnm),for N→∞ \frac{\left \langle k^2 \right \rangle}{\left \langle k \right \rangle} =\frac{N-m}{\ln N-\ln m}>m({\ln N-\ln m}),\quad \text{for } N\to \infty ⟨k⟩⟨k2⟩=lnN−lnmN−m>m(lnN−lnm),for N→∞
依旧是社区足够大的时候,一个人朋友的朋友数的平均数基本上会大于朋友数。
我们可以看出大部分情况下,朋友的朋友数的平均数都是大于自己的朋友数的,一个非常有意思的问题和结论,顺便带到了一点随即网络和无尺度网络的知识,不知道大家喜欢看这种不,本文参考如下内容:
- P. Erd˝os and A. R´enyi, “On random graphs I,” Publ. Math. Debrecen, vol. 6, pp. 290–297, 1959.
- E. N. Gilbert, “Random graphs,” The Annals of Mathematical Statistics, vol. 30, no. 4, pp. 1141–1144, 1959.
- A. L. Barab´asi and R. Albert, “Emergence of scaling in random networks,” Science, vol. 286, pp. 509–512, 1999.
- D. J. D. S. Price, “Networks of scientific papers,” Science, pp. 510–515, 1965.
- M. E. J. Newman, “The structure and function of complex networks,” SIAM Review, vol. 45, pp. 167–256, 2003.
- M. E. Newman, “Power laws, pareto distributions and Zipf’s law,” Contemporary physics, vol. 46, no. 5, pp. 323–351, 2005.