想象你刚搬进一座拥有千万人口的大城市。街区之间由道路相连,你的朋友住在城市另一头。你心中冒出一个朴素的问题:从我家出发,不管怎么走,最少穿过多少个路口才能到达这座城市最远的角落?把每个街区看成一个点、每条路看成一条线,这个“最远也只要这么多步”的数字,就是图论里的网络直径。更奇妙的是,这座城市虽然辽阔,你却往往只需五六层朋友转介绍,就能联系上城市另一端的陌生人——人们称之为小世界现象。这背后,是平均路径长度、聚类系数与小世界系数在共同作用。本文就从一座城市的故事出发,把网络直径、最短路径、小世界性这几个“宏观特征”讲得明明白白。

岗位关联

掌握网络直径与小世界性,是图分析与网络科学的基石能力:你能快速评估任意网络的信息传播效率、设计更短时延的通信拓扑,并在社交网络与传播动力学场景中做出专业判断,是图算法工程师、网络分析岗位的高频考点。

目录
  1. 可视化演示
  2. 最短路径基础
  3. 网络直径定义
  4. 直径计算算法
  5. 平均路径长度
  6. 小世界现象
  7. 聚类系数
  8. 小世界系数
  9. 应用场景
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

动态演示网络直径与小世界性的核心机制,通过基础/核心/应用/扩展四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

网络直径与小世界性:网络宏观 网络宏观拓扑特征概述 最短路径与网络直径计算 核心机制可视化 网络直径与小世界性整体架构与关键组件

最短路径基础

在城市地图上,从和平街区到港口街区,可以走沿江大道,也可以绕商业环线,路线五花八门。居民真正关心的是“哪条路最近、最少路过几个路口”。这个“最少路口数”,就是两个街区之间的最短距离——它是整座城市一切宏观指标的起点。

把城市抽象成图 \(G=(V,E)\):街区是节点,道路是边。如果每条路都算一步(无权图),两点间的最短距离就是最短路径的边数;如果道路有长度或拥堵(加权图),则把每条边的权重相加再比较。无论哪种,核心都是寻找“代价最小的那条路”。而计算出所有街区对的距离之后,我们才能回答“全城最远有多远”“平均有多近”这些宏观问题。

有了“最短距离”这把尺子,城市的所有宏观问题都有了答案:随便选两个街区测量它们的最短步数,取全城最大者,就是城市直径;取全城平均者,就是平均路径长度。接下来的旅程,就从“最远”开始。

d(u,v)=min⁡{ ∣P∣∣P∈P(u,v) }d(u,v)=\min\{\,|P| \mid P\in\mathcal{P}(u,v)\,\}
这个公式翻译成大白话就是:在节点 \(u\) 到 \(v\) 的一切可能走法中,挑出步数最少的那一种,其结果记为 \(d(u,v)\),即两点间的最短距离。
  1. \(d(u,v)\) 最短距离表示节点 \(u\) 与节点 \(v\) 之间“最少步数”的那个数值,相当于城市里两地之间的最短脚程。
    d(u,v)d(u,v)
  2. \(\min\) 取最小在花括号列举的全体候选路径集合中,找出长度最小的一项,对应“最短路”中的“最”字。
    min⁡{ ∣P∣∣⋯ }\min\{\,|P| \mid \cdots\,\}
  3. \(\mathcal{P}(u,v)\) 路径集合所有从 \(u\) 出发、最终到达 \(v\) 的路径组成的集合,为取最小值提供候选池。
    P(u,v)\mathcal{P}(u,v)
  4. \(|P|\) 路径长度路径 \(P\) 包含的边数,在无权图中一条边算一步,这是长度的计量单位。
    ∣P∣|P|

网络直径定义

城市两端各有一个角落,一边是山地,一边是港口。市长想知道:全城最远的两个街区,最少要走多少步才能见面?这个问题不是在问“任意一条路”,而是问“两者之间那条最短的路到底有多长”——也就是所有最短距离中的最大值。

图论先定义一个中间量:偏心距。对某个节点 \(v\),它到全图所有节点的最短距离里,最大的那个叫做 \(v\) 的偏心距,记作 \(\varepsilon(v)\)。它回答“从 \(v\) 出发,最坏要跑多远”。把所有节点的偏心距再取一次最大,就得到网络直径 \(D(G)\)。直径刻画了网络“最坏情况”的传输成本:无论消息从哪里发出、要送到哪里,最迟经过 \(D(G)\) 跳必然可达。

直径是网络的“最坏天气”:最远的两个街区都只需 \(D(G)\) 步,其他街区对只会更近。边界情况也要心里有数:完全图中任意两点一步直达,直径恒为 1;不连通图中不可达点对的距离视为无穷大,直径应放在每个连通分量内讨论。

ε(v)=max⁡u∈Vd(u,v),D(G)=max⁡v∈Vε(v)=max⁡u, v∈Vd(u,v)\varepsilon(v)=\max_{u\in V}d(u,v),\qquad D(G)=\max_{v\in V}\varepsilon(v)=\max_{u,\,v\in V}d(u,v)
偏心距是“单点出发的最远最短距离”,直径则是“全图所有偏心距的最大值”。两者都是 min 与 max 嵌套的结果:先找每对点之间的最短路,再找所有点对里的最大值。
  1. \(\varepsilon(v)\) 偏心距固定街区 \(v\),遍历全城所有街区 \(u\),取 \(d(u,v)\) 的最大值,即“从 \(v\) 出发最远要几步”。
    ε(v)=max⁡u∈Vd(u,v)\varepsilon(v)=\max_{u\in V}d(u,v)
  2. \(\max_{u\in V}\) 遍历目标对每个 \(u\) 都要算出最短路,再比较大小,这里的 max 是“最远目标”的含义。
    max⁡u∈Vd(u,v)\max_{u\in V}d(u,v)
  3. \(D(G)\) 网络直径再对每个 \(v\) 的偏心距取最大,得到全网络最极端的一对节点的距离。
    D(G)=max⁡v∈Vε(v)D(G)=\max_{v\in V}\varepsilon(v)
  4. 等价形式把两步合成一步,直径就是任意两点最短距离的全局最大值。
    max⁡u, v∈Vd(u,v)\max_{u,\,v\in V}d(u,v)

直径计算算法

要测出城市直径,最朴素的办法是让每个街区分别当“发信人”,把信逐层转交给所有街区,记录最慢的一封用时。这个“逐层转交”就是广度优先搜索(BFS):先由近及远一圈一圈地扩散,谁先收到信,谁的距离就是最小的。

无权图中,从单个源头做一次 BFS,就能算出它到所有节点的最短路径,同时得到偏心距。想求直径,就换一个源头再跑一次,把所有偏心距的最大值取出来——这就是“全源 BFS”。对于稠密加权图,可以用 Floyd 算法(动态规划,三重循环);对于稀疏加权图,Johnson 算法先重赋权再跑多轮 Dijkstra,效率更高。

算法复杂度决定了城市规模的上限:几万节点的社交网络用全源 BFS 轻松可算;上亿节点的互联网则需要采样估计或并行化。现实中,工程师往往不追求精确直径,而是抽样几个源头取最大偏心距来近似——用精度换速度,让“丈量城市”成为可能。

Tsrc=O(n+m),Tdiam=O ⁣(n(n+m)),TFloyd=O(n3)T_{\mathrm{src}}=O(n+m),\qquad T_{\mathrm{diam}}=O\!\bigl(n(n+m)\bigr),\qquad T_{\mathrm{Floyd}}=O(n^{3})
复杂度用“点数为 \(n\)、边数为 \(m\)”来评估:BFS 每点每边各看一遍,所以单源是线性的;直径要对 \(n\) 个源头各跑一遍,所以乘上 \(n\)。Floyd 则是稠密图上的三阶代价。
  1. 单源 BFS 复杂度广度优先搜索把每条边和每个节点各访问一次,成本与“点数 + 边数”成正比。
    Tsrc=O(n+m)T_{\mathrm{src}}=O(n+m)
  2. 全源遍历因为直径需要对每个节点都当一次源头,总共跑 \(n\) 遍 BFS,因此总代价乘上 \(n\)。
    Tdiam=O ⁣(n(n+m))T_{\mathrm{diam}}=O\!\bigl(n(n+m)\bigr)
  3. Floyd 动态规划对任意图用三重循环逐步松弛,复杂度恒为节点数的三次方。
    TFloyd=O(n3)T_{\mathrm{Floyd}}=O(n^{3})

平均路径长度

直径像“最坏的天气”,而居民更关心“平均天气”。城市里随便抓两个人,他们之间的最短距离平均是多少?这个平均数称为平均路径长度 \(L\),它比直径更真实地反映日常的信息传输效率。

计算方式很直白:把全城所有不同的街区对的距离全部加起来,再除以街区对总数。对无向图,街区对按“无序”计数:\(n\) 个节点任取两个,共有 \(n(n-1)/2\) 对。所以 \(L\) 的公式是一个标准的平均值:总和除以个数。

平均路径长度是“小世界”故事的第一根支柱。把真实网络算出的 \(L\) 与同规模随机图的 \(L_{\mathrm{rand}}\) 相比较,如果两者相当而聚类系数却高得多,网络就具备了小世界的潜质。这个比较,正是后面小世界系数的思想雏形。

L=2n(n−1)∑{u,v}⊆Vd(u,v)L=\frac{2}{n(n-1)}\sum_{\{u,v\}\subseteq V}d(u,v)
这个公式说明平均路径长度 \(L\) 永远不超过直径 \(D\):平均不可能大于最大。它描述的是“典型点对”要走几步,是网络日常效率的体温计。
  1. 分子累加遍历图中所有无序节点对,把每一对的最短距离全部加总。
    ∑{u,v}⊆Vd(u,v)\sum_{\{u,v\}\subseteq V}d(u,v)
  2. 无序点对数\(n\) 个节点中任取两个共有 \(n(n-1)/2\) 对,这是做平均时的分母。
    n(n−1)2\frac{n(n-1)}{2}
  3. 系数整理把“除以无序对总数”改写成乘法的形式,于是分母写成 \(n(n-1)\),分子补上系数 2。
    L=2n(n−1)∑{u,v}⊆Vd(u,v)L=\frac{2}{n(n-1)}\sum_{\{u,v\}\subseteq V}d(u,v)

小世界现象

1967 年,心理学家米尔格拉姆做了一个著名实验:请美国中西部的居民寄包裹给东海岸的陌生人,规则是只能寄给自己认识的熟人。结果包裹平均只转了约六次就到了收件人手里。这就是“六度分隔”的由来,也是“世界其实很小”的第一次科学证据。

为什么城市人口上千万,联系距离却只有个位数?直觉来自“指数爆炸”:如果每个人平均认识 \(\bar{k}\) 个朋友,你朋友的朋友就有 \(\bar{k}^{2}\) 个,再传一层 \(\bar{k}^{3}\) 个……每一跳覆盖的人数呈指数增长,所以只需很少几层就能吞没整个网络。这便是“惊人捷径”的数学根源。

六度分隔揭示的“近”,其实与直径的“最坏近”并不冲突——前者是平均意义的近,后者是最远点对的近。真正的关键,是网络中点缀着一些“跨越大洲的捷径”:一条机场直飞航线、一个跨行业的朋友,就能把两个本来很远的社区拉到一步之遥。

N≈kˉ d  ⟹  d≈ln⁡Nln⁡kˉN\approx \bar{k}^{\,d}\;\Longrightarrow\; d\approx\frac{\ln N}{\ln \bar{k}}
公式估计:网络规模为 \(N\)、平均朋友数为 \(\bar{k}\),则任意两人之间约需 \(\ln N / \ln \bar{k}\) 跳。若平均认识 100 人,覆盖 10 亿人只需约 4.5 跳。
  1. 指数覆盖每一跳朋友圈扩大 \(\bar{k}\) 倍,\(d\) 层之后覆盖人数约等于 \(\bar{k}^{\,d}\)。
    N≈kˉ dN\approx \bar{k}^{\,d}
  2. 取对数对等式两侧取自然对数,把指数 \(d\) 从肩膀上“请下来”。
    ln⁡N≈dln⁡kˉ\ln N\approx d\ln\bar{k}
  3. 解出层数两边除以 \(\ln\bar{k}\),得到约需的转介绍层数,即“几度分隔”。
    d≈ln⁡Nln⁡kˉd\approx\frac{\ln N}{\ln \bar{k}}

聚类系数

捷径让世界变小,但小世界还有另一半:抱团。在城市里,你的三个邻居往往彼此也认识,小区里形成密密麻麻的熟人网。这种“朋友的朋友还是朋友”的三角关系密度,就是聚类系数要度量的东西。

对节点 \(i\),设它有 \(k_i\) 个邻居。理论上这 \(k_i\) 个邻居之间最多可以形成 \(k_i(k_i-1)/2\) 对朋友关系;实际存在的边数记为 \(e_i\)。聚类系数就是“实际值除以满额值”的比例,取值在 0 到 1 之间。把所有节点的 \(C_i\) 取平均,就得到全局聚类系数 \(C\),它刻画整座城市的“抱团程度”。

聚类系数回答“社区有多紧”。真实社交网络的聚类系数往往高达 0.2~0.5,而同样规模的随机网络只有 0.01 甚至更低——人们确实生活在“抱团”的世界里。把这个值与平均路径长度放在一起,就得到了判断“小世界”的完整标尺。

Ci=2eiki(ki−1)C_i=\frac{2e_i}{k_i(k_i-1)}
聚类系数是“邻居之间实际朋友边数”占“最多可能朋友边数”的比例。1 表示邻居两两全认识,0 表示邻居之间谁也不理谁。
  1. \(k_i\) 节点度数节点 \(i\) 的直接邻居个数,相当于你微信里的好友数。
    kik_i
  2. 最多可能边数\(k_i\) 个邻居之间最多能形成的两两关系数,即组合数。
    ki(ki−1)2\frac{k_i(k_i-1)}{2}
  3. \(e_i\) 实际边数这些邻居之间实际存在的边数量,代表真实的“邻里相识”程度。
    eie_i
  4. 比值合成实际边数除以满额边数,得到 0 到 1 之间的密度比例。
    Ci=2eiki(ki−1)C_i=\frac{2e_i}{k_i(k_i-1)}

小世界系数

现在城市有了两个测量指标:平均路径长度 \(L\) 和聚类系数 \(C\)。怎么判断它是不是小世界?需要一个“参照系”:构造一座同样大小,但道路完全随机连接的“随机城市”,测出它的 \(L_{\mathrm{rand}}\) 和 \(C_{\mathrm{rand}}\),然后两两比较。

随机城市毫无章法,平均路径很短,但邻里关系也几乎为零。真实城市如果“平均距离和随机城市差不多短,聚类却远高于随机城市”,就说明它既高效又有人情味——这就是小世界。Watts 与 Strogatz 据此定义了小世界系数 \(\sigma\):

\(\sigma\) 远大于 1 时,网络既有局部抱团、又有长程捷径。Facebook 的好友网络、论文引用网、电力网……许多真实网络的 \(\sigma\) 都显著大于 1。“小世界”几乎是现实复杂网络的通病,而这一条公式,就是给网络做“小世界鉴定”的标准试纸。

σ=C/CrandL/Lrand\sigma=\frac{C/C_{\mathrm{rand}}}{L/L_{\mathrm{rand}}}
分子是“聚类增益”(真实比随机高多少倍),分母是“距离代价”(真实比随机慢多少倍)。\(\sigma\) 显著大于 1,网络就具备小世界性。
  1. 随机参照构造与真实网络同规模、同平均度数的随机图,测出它的聚类和平均路径。
    Crand,LrandC_{\mathrm{rand}},\quad L_{\mathrm{rand}}
  2. 分子聚类增益真实网络的聚类系数比随机网络高出多少倍,体现“人情味”。
    C/CrandC/C_{\mathrm{rand}}
  3. 分母距离代价真实网络的平均路径比随机网络慢多少倍,体现“效率损失”。
    L/LrandL/L_{\mathrm{rand}}
  4. 比值定判两者相除,一个数字同时压缩了两个维度,大于 1 越多越像小世界。
    σ=C/CrandL/Lrand\sigma=\frac{C/C_{\mathrm{rand}}}{L/L_{\mathrm{rand}}}

应用场景

知道一座城市“最远多少步、平均多少步、抱团多紧密”之后,城市规划者能做很多聪明的事:把应急物资仓库放在偏心距最小的节点上,给快递路由设定最大跳数,甚至预测一场谣言要多快传遍全城。

在通信网络中,直径直接给出最坏时延上界。假设每一跳的转发时延为 \(t_0\),那么任意两点间的端到端时延不会超过直径乘以单跳时延。数据中心拓扑设计(如 Torus、Fat-Tree)正是围绕“在低成本下压小直径”展开的。

从城市到网络,本质是同一件事:宏观特征决定一切极端与平均的表现。测直径、算平均路径、查聚类、比 \(\sigma\)——这套“体检”流程,就是图分析工程师面对任何真实网络时的第一步标准动作。

Tmax⁡=D(G)×t0T_{\max}=D(G)\times t_{0}
这是“最坏情况”的工程化表达:只要知道网络直径和单跳时延,就能承诺端到端时延的上限,用来做服务等级协议(SLA)。
  1. \(D(G)\) 最大跳数任意两点之间信息最多经过直径规定的跳数。
    D(G)D(G)
  2. \(t_0\) 单跳时延一次转发或一跳的平均耗时,包含排队与传输时间。
    t0t_{0}
  3. 乘积上界两者相乘给出传播时间的最坏上界,可作为服务质量承诺的依据。
    Tmax⁡=D(G)×t0T_{\max}=D(G)\times t_{0}

AI 应用场景

社交网络“六度”体检

阶段:数据分析与特征工程

解决的问题:传统运营只关注日活、留存等宏观指标,无法感知“好友是不是越来越远”。用平均路径长度 \(L\)、直径 \(D\) 和小世界系数 \(\sigma\) 给整个社交图谱做体检,能在用户关系弱化的早期发现风险。

具体案例:某社交 App 每月计算全平台好友图的 \(L\) 与 \(\sigma\)。某季度发现 \(L\) 从 3.8 升至 4.6、\(\sigma\) 下降 20%,说明新增用户多是“孤岛”,平台随即启动“好友推荐 + 同城社群”策略,\(L\) 逐步回落。

数据中心拓扑时延上界

阶段:系统设计与性能优化

解决的问题:大模型训练集群中,GPU 间通信常走多跳网络,最坏时延难以估算。用直径 \(D\) 给端到端时延设上界 \(D \times t_0\),帮助网络架构师在成本与时延之间做量化取舍。

具体案例:某 AI 基础设施团队在 512 卡集群中比较 Torus 与 Fat-Tree 两种拓扑:Fat-Tree 直径小但交换机成本高,Torus 直径大但成本低。用“直径 × 单跳时延”估算最坏同步时间后,团队选择了混合拓扑并配置了流量调度策略。

谣言传播的提前预警

阶段:传播建模仿真

解决的问题:小世界网络里信息扩散极快,传统“按社区逐个隔离”的反应太慢。先测出网络的直径和平均路径,估算“全城知悉”的最坏时间,据此设置预警阈值。

具体案例:舆情监测平台把某社交平台用户关系图建模为小世界网络,计算出直径约 8、平均路径约 4,推得一条热点话题约 4~8 轮转发即可覆盖全网,系统在该时间窗口内自动触发分级预警。

Python 演示

python84 行
import randomfrom collections import deque def build_small_world(n, k, p):    # Watts-Strogatz model: ring + shortcuts    edges = set()    for i in range(n):        for j in range(1, k // 2 + 1):            u, v = i, (i + j) % n            edges.add((min(u, v), max(u, v)))    for u, v in list(edges):        if random.random() < p:            edges.remove((u, v))            w = random.randrange(n)            while w == u:                w = random.randrange(n)            edges.add((min(u, w), max(u, w)))    return edges def build_random(n, k):    # Erdos-Renyi with the same average degree    edges = set()    for u in range(n):        for v in range(u + 1, n):            if random.random() < k / (n - 1):                edges.add((u, v))    return edges def to_adj(edges, n):    adj = {i: [] for i in range(n)}    for u, v in edges:        adj[u].append(v)        adj[v].append(u)    return adj def bfs_distances(adj, s):    dist = {v: -1 for v in adj}    dist[s] = 0    q = deque([s])    while q:        u = q.popleft()        for v in adj[u]:            if dist[v] < 0:                dist[v] = dist[u] + 1                q.append(v)    return dist def diameter_and_L(adj):    total, pairs, D = 0, 0, 0    for s in adj:        dist = bfs_distances(adj, s)        for v, d in dist.items():            if v != s and d > 0:                total += d                pairs += 1                D = max(D, d)    return D, total / pairs def clustering_coeff(adj):    total_c = 0    for u in adj:        nb = adj[u]        if len(nb) < 2:            continue        links = sum(1 for v in nb for w in adj[v] if w in nb)        total_c += links / (len(nb) * (len(nb) - 1))    return total_c / len(adj) def main():    random.seed(42)    n, k, p = 200, 6, 0.1    ws = to_adj(build_small_world(n, k, p), n)    rg = to_adj(build_random(n, k), n)    d_ws, l_ws = diameter_and_L(ws)    d_rg, l_rg = diameter_and_L(rg)    c_ws = clustering_coeff(ws)    c_rg = clustering_coeff(rg)    sigma = (c_ws / c_rg) / (l_ws / l_rg)    print("small-world:  diameter=%.0f  L=%.2f  C=%.3f" % (d_ws, l_ws, c_ws))    print("random graph: diameter=%.0f  L=%.2f  C=%.3f" % (d_rg, l_rg, c_rg))    print("sigma = %.2f (far above 1 means small-world)" % sigma) if __name__ == "__main__":    main()
目的:用 Watts–Strogatz 模型生成一座“小世界城市”,并与相同规模的随机网络对比,计算直径、平均路径长度、聚类系数与小世界系数 \(\sigma\),实证“高聚类 + 短距离”的小世界特征。
  1. for j in range(1, k // 2 + 1):每个节点连接左右各 \(k/2\) 个邻居,先搭出环形骨架,保证网络连通。
  2. edges.add((min(u, v), max(u, v)))用“小端点在前”的方式存储无向边,避免同一条边被重复记录。
  3. if random.random() < p:以概率 \(p\) 把一条环边重连到随机节点,制造“跨越大洲的长程捷径”。
  4. dist = bfs_distances(adj, s)从源头 \(s\) 做一次广度优先搜索,得到它到所有节点的最短距离。
  5. if v != s and d > 0:排除自身与不可达点,只累加真正连通的点对距离。
  6. links / (len(nb) * (len(nb) - 1))邻居间实际边数除以最多可能边数(有序对计数),即聚类系数。
  7. sigma = (c_ws / c_rg) / (l_ws / l_rg)归一化聚类除以归一化路径,一个数字完成小世界鉴定。

常见误区

误区“网络的直径就是图上最长的那条路吧?把最远的两个节点连起来数一数经过多少条边,不就是直径吗?”

正解直径确实是“最远两点”的距离,但关键在于:这两点之间可能有很多条路,直径取的是其中“最短的那一条”的边数,而不是随便一条长路。城市里最远的两个街区之间可能有一条绕城观光线有 20 站,但直径算的是地铁直达最短线的 5 站。内层 \(\min\) 把“每步都最近的走法”挑出来,外层 \(\max\) 才去比较所有街区对。

为何常见:“最远”两个字容易让人联想到“最长路径”,而忽略了它本质是“最短距离的最大值”,两层最值嵌套的方向被直觉带偏了。

误区“平均路径长度只有三四步的网络就是小世界网络,因为六度分隔说的就是距离短。”

正解距离短只是必要条件。小世界的完整定义是“平均路径接近随机图,聚类系数显著高于随机图”。一条高速公路式的线状网络距离也很短,但没有任何社区聚团,它不是小世界。就像一座城市只有一条直通大道、没有任何邻里熟络关系,它只是“大格子”而非“小街坊世界”。判断时必须同时看 \(L\) 和 \(C\),或者直接算 \(\sigma\)。

为何常见:六度分隔的故事太有名,让人只记住了“短距离”这一半,而忽略了 Watts–Strogatz 模型中“高聚类”的另一半。

误区“网络直径就是平均路径长度吧?反正都是描述距离的,不用区分。”

正解直径是极端值——全图最远一对节点的最短距离;平均路径长度是典型值——所有节点对距离的平均。二者可以相差数倍:Facebook 的平均路径约 4 左右,而直径可能超过 10。设计服务质量时看直径(最坏情况),评估日常体验时看平均路径(典型情况),混用会导致承诺过强或过弱。

为何常见:两者量纲相同、都随网络变大而增长,直觉上容易混为一谈,但“最大值”与“平均值”在统计上本就是两个不同的统计量。

误区“聚类系数高的网络就是里面有个很大的完全子图,聚类系数体现的是最大集团的人数。”

正解聚类系数是“邻居之间实际连接数”占“邻居之间最多可能连接数”的比值,刻画的是局部密度,与集团规模无关。一个万人小区如果大家只认识周围三五个邻居,局部密度再高也聚不出大团;反之,一个大集团若内部连接稀疏,聚类系数反而低。它是“密度”指标,不是“规模”指标。

为何常见:“聚类”这个译名容易让人联想到“聚集规模”,而忽视了它在数学上本质是三元闭包、三角密度的比值。

面试题

Q1. 图论中网络直径的定义是?

单选题 · easy

  • A.图中最长简单路径长度
  • B.任意两点最短距离最大值← 正确答案
  • C.图中总边数的一半数值
  • D.平均路径长度的双倍值

答案:B。直径是所有节点对最短距离的最大值,相当于“城市最远两个街区哪怕走最优路线也要花的步数”。A 错——最长简单路径是另一个概念(图的周长);C、D 与宏观最值无关。

Q2. 无权图中求单源最短路径最常用的算法是?

单选题 · easy

  • A.二分查找算法
  • B.广度优先搜索← 正确答案
  • C.最小生成树方法
  • D.动态规划求背包

答案:B。无权图中 BFS 逐层扩散,第一次到达某个节点时走的步数必然最短,就像消息一圈一圈转告、先到者就是最近者。二分查找面向有序数组;最小生成树解决连接成本最小;背包是组合优化问题。

Q3. 判断一个网络是否具有小世界性,需要同时观察哪些指标?

多选题 · mid

  • A.平均路径长度← 正确答案
  • B.聚类系数高低← 正确答案
  • C.节点总数规模
  • D.节点平均度数

答案:AB。小世界要同时满足“平均路径接近随机图”与“聚类系数显著高于随机图”,\(\sigma\) 正是把两者压缩成一个比值。节点总数只是规模参数而非判定条件;平均度数是图的密度信息,也不是小世界的判定依据。

Q4. 关于偏心距 \(\varepsilon(v)\),下列说法正确的是?

单选题 · mid

  • A.到所有邻居距离总和
  • B.到最远节点最短距离← 正确答案
  • C.必等于网络直径值
  • D.所有边权的累加和

答案:B。偏心距是固定起点后到所有节点的最远最短距离,即“从这个街区出发最坏要跑几步”。A 把 \(\max\) 误读成求和;C 只有恰好位于“直径端点”的节点偏心距才可能等于直径;D 与距离定义无关。

Q5. 用全源 BFS 求无向无权图直径的时间复杂度是?

单选题 · hard

  • A.线性 O(n+m)
  • B.全源 O(n(n+m))← 正确答案
  • C.立方 O(n^3)
  • D.平方 O(nm)

答案:B。单源 BFS 是线性的 \(O(n+m)\);求直径需要把 \(n\) 个节点都当一次源头,所以总代价为 \(O(n(n+m))\)。Floyd 的 \(O(n^3)\) 是稠密加权图上的另一方案,不来自 BFS。

Q6. 关于平均路径长度 \(L\),下列说法正确的是?

多选题 · mid

  • A.所有点对距离的平均值← 正确答案
  • B.公式分母是无序点对数← 正确答案
  • C.其值一定大于直径 D
  • D.体现网络典型传输效率← 正确答案

答案:ABD。平均路径长度把无向图所有无序点对的最短距离取均值,分母正是 \(n(n-1)/2\)。因为平均值不可能超过最大值,所以 \(L \le D\) 恒成立,C 正好说反了。

Q7. Watts–Strogatz 小世界系数 \(\sigma\) 的正确构造方式是?

单选题 · hard

  • A.聚类与路径长度的商
  • B.归一化聚类比上归一化路径← 正确答案
  • C.随机聚类与路径的乘积
  • D.两者直接相加取平均

答案:B。\(\sigma=(C/C_{\mathrm{rand}})/(L/L_{\mathrm{rand}})\),即“真实网络相对随机图的聚类增益”除以“距离代价”。它同时对比两个维度,只看 \(C\) 或只看 \(L\) 都会丢失另一半信息。

Q8. 聚类系数 \(C_i\) 中 \(k_i\) 表示什么?

单选题 · easy

  • A.节点 i 的度数大小← 正确答案
  • B.节点 i 到直径的距离
  • C.网络中的三角总数
  • D.i 的邻居间边数之和

答案:A。\(k_i\) 是节点 \(i\) 的度数,即它有多少个邻居;\(k_i(k_i-1)/2\) 是这些邻居两两组合的上限。B 混淆了度数与距离;C 是全局三角计数;D 是 \(e_i\) 而非 \(k_i\)。

Q9. 典型的真实小世界网络具有哪些特征?

多选题 · mid

  • A.平均路径长度接近随机← 正确答案
  • B.聚类系数明显高于随机← 正确答案
  • C.网络直径通常也比较小← 正确答案
  • D.聚类系数往往低于随机

答案:ABC。小世界网络的典型画像:平均路径与随机图同量级(短)、聚类系数明显高于随机图,因此直径通常也不大。D 恰好说反——聚类低那是随机图的特征。

Q10. 实测某个网络的 \(\sigma \approx 1\),这说明?

单选题 · extreme

  • A.该网络是典型小世界
  • B.与随机网络差异不显著← 正确答案
  • C.说明网络的聚类极高
  • D.说明网络的直径为零

答案:B。\(\sigma\approx1\) 说明真实网络与随机参照在“聚类/距离”两个维度上都没有显著差异,不具备小世界优势。A 要求 \(\sigma\) 显著大于 1;C 忽略了距离维度;D 只有单节点图才成立。