现实世界的很多复杂系统可以用网络的形式来表达,比如在社会网络和生物网络中,网络中的点表示系统中的实体,网络中的边来表示实体间的关系。随着研究的不断深入,学者们发现实际网络除了具有小世界和幂率分布等统计特性外,还具有社区结构特征。社区内部的节点之间的连接相对紧密,社区之间的连接相对稀疏。寻找复杂网络中社区结构的方法已经成为复杂网络研究的重要内容之一传统的社区发现算法主要是图形分割和层次聚类,层次聚类算法又可以分为两类:凝聚方法和分裂方法。自Newman等人提出用模块度函数来评价社区划分质量后,相继出现了一些基于模块度极值优化的方法。在真实网络中,并不是每个节点都仅属于一个社区,而是存在着重叠社区结构。随后出现了一系列重叠社区划分方法,更加真实地反映网络结构。最近,一些学者利用统计推理的方法来划分重叠社区,其中一个简单的概率算法——SPAEM能很好地发现重叠社区。本文在深入理解SPAEM算法的基础上,通过实验发现该算法存在一些缺陷,比如在大规模网络中效率比较低,随机初始化使得算法容易陷入局部最优解等。首先,对SPAEM算法的时间复杂度进行了详细分析;然后,对算法做了一些改进,降低了算法时间复杂度;此外,为了避免算法陷入局部最优解,本文还提出了种SPAEM算法的初始化方法,使算法可以在更短的时间内获得更好的社区发现结果。基于真实网络和人工网络的实验结果证明了改进算法的有效性。在很多实际网络中,改进算法的社区发现结果要好于其他重叠社区发现算法。在人工网络,尤其是非常稀疏的网络中,改进算法也能得到很好的社区发现结果。