Math 在随机图中:一个节点与列表x中定义的特殊节点上的任何节点链接的概率是多少?

Math 在随机图中:一个节点与列表x中定义的特殊节点上的任何节点链接的概率是多少?,math,graph-theory,probability-theory,sna,network-analysis,Math,Graph Theory,Probability Theory,Sna,Network Analysis,我在一个观测到的网络上进行计算时遇到了这个问题 让我们想象一个随机图G(N,p),其中N是节点数,p是在任何节点ni和nj之间形成边的概率。这个图形是无向的 然后,让我们将x个节点的数量(例如5个)标记为特殊节点。那么,一个节点与这些特殊节点之间有一条边的概率(ps)是多少 令人不安的是,我自己几乎不知道该怎么做。我想答案将分为两个步骤: 首先,因为我想象我将不得不承认所有可能的N个节点的图,以便为我的概率计算生成事件。我认为如果S=N(N-1)/2,可能会有S(S-1)/2个可能的图,但这些图

我在一个观测到的网络上进行计算时遇到了这个问题

让我们想象一个随机图G(N,p),其中N是节点数,p是在任何节点ni和nj之间形成边的概率。这个图形是无向的

然后,让我们将x个节点的数量(例如5个)标记为特殊节点。那么,一个节点与这些特殊节点之间有一条边的概率(ps)是多少

令人不安的是,我自己几乎不知道该怎么做。我想答案将分为两个步骤:

首先,因为我想象我将不得不承认所有可能的N个节点的图,以便为我的概率计算生成事件。我认为如果S=N(N-1)/2,可能会有S(S-1)/2个可能的图,但这些图的可能性不一样,所以我不知道。 其次,我了解到,当特殊节点数(x)接近N时,连接到特殊节点的概率必须接近1,如果x=1,则ps=p


感谢你的任何提示。感谢对于非特殊节点,从该节点到特殊节点存在
x
潜在边。对于任何此类潜在边,边不在图中的概率为
1-p
。假设独立,它避免所有特殊节点的概率是
(1-p)^x
。互补概率是你所寻求的,它是

1 - (1-p)^x
对于特殊节点,给定特殊节点连接到其他特殊节点之一的概率为

1 - (1-p)^(x-1)
你可以用不同的方式组合这些答案。随机选取一个节点。它是特殊的或具有将其连接到特殊节点的边的概率为:

x/N + (N-x)/N * [1-(1-p)^x]
x/N * [1 - (1-p)^(x-1)] + (N-x)/N * [1 - (1-p)^x]
其具有连接到特殊节点的边的概率为:

x/N + (N-x)/N * [1-(1-p)^x]
x/N * [1 - (1-p)^(x-1)] + (N-x)/N * [1 - (1-p)^x]
在所有情况下,它们都趋向于1,因为x趋向于N

由于这是堆栈溢出,因此需要进行一些编程。下面是一个Python 3 Monte Carlo模拟,它似乎表明了随机选择的节点是特殊节点或与特殊节点相邻的概率公式的准确性:

import random

#The following function returns a random graph on nodes
#0,1,...,N-1 where edges are chosen with probability p
#The graph is returned as a dictionary keyed by the 
#The corresponding values are sorted lists of adjacent nodes

def randGraph(N,p):

    #initialize G:
    G = {}
    for i in range(N):
        G[i] = []

    #iterate through potential edges:
    for i in range(N-1):
        for j in range(i+1,N):
            if random.random() < p:
                G[i].append(j)
                G[j].append(i)

    #sort adjacency lists before returning:
    for i in G:
        G[i].sort()
    return G

#A function to determine the number of nodes
#in a graph that are either
#special or connected to a special,
#where special means: 0,1,2,...,x

def specialsAndFriends(G,x):
    count = 0
    for i in G:
        if (i<x) or (len(G[i]) > 0 and G[i][0] < x):
            count +=1
    return count

#now -- a Monte Carlo simulation:

def estimateProb(N,p,x,trials = 1000):
    estimates = []
    for i in range(trials):
        G = randGraph(N,p)
        estimates.append(specialsAndFriends(G,x)/N)
    return sum(estimates)/trials

#compare with:

def exactProb(N,p,x):
    return x/N + (N-x)/N * (1 - (1-p)**x)

非常好的回答。这些是我正在寻找的概率,事实上,它们可以通过蒙特卡洛模拟得到证实,正如你所做的那样。对于那些像我一样,Python说得不太好的人,我在R中编写了一个类似的测试,它模拟了一个特殊节点链接到另一个特殊节点的概率。代码显示了这种收敛:!酷。我最近一直在努力学习R,看看你的代码应该是一次很好的学习经历。当模拟和理论一致时,总是令人愉快的。你的博士学位是什么。研究?(你在个人资料中提到自己是一名博士候选人。)商业历史,但其中也有相当一部分是网络分析。我的项目是关于瑞典房地产承销商在工业化过程中各种形式的合作。不过,我发布的R代码不是很整洁。然而,它使用了这个软件包,你可以对图论进行很多有趣的探索。显然还有一个igraph的Python包。再次感谢,瞧。这篇文章现在被广泛评论。。。