【发布时间】:2016-12-09 11:04:49
【问题描述】:
我正在阅读 Kenneth H. Rosen 的《离散数学及其应用》一书。在书中,无向图的一个顶点的度定义如下:
"在无向图中,顶点的度数是与它相关的边的数量,除了顶点处的循环对该顶点度数的贡献是两倍。顶点 v 的度数用 deg(v )。”
我有点困惑,为什么如果有循环,顶点的度数被取为 2 而不是 1。这是什么原因?如果我们想跟踪图中的边数,我们不应该将其视为 1 而不是 2?
【问题讨论】:
我正在阅读 Kenneth H. Rosen 的《离散数学及其应用》一书。在书中,无向图的一个顶点的度定义如下:
"在无向图中,顶点的度数是与它相关的边的数量,除了顶点处的循环对该顶点度数的贡献是两倍。顶点 v 的度数用 deg(v )。”
我有点困惑,为什么如果有循环,顶点的度数被取为 2 而不是 1。这是什么原因?如果我们想跟踪图中的边数,我们不应该将其视为 1 而不是 2?
【问题讨论】:
这与编程无关,而与数学有很大关系(有人会说两者之间的区别有些随意)。
我认为以这种方式定义它更简单,并且在有向图的一般情况下更一致。想象一下,你有一个有向图数据结构,带有传入和传出边:
struct Node {
int id;
vector<Edge> outgoing;
vector<Edge> incoming;
}
根据书中的定义,
int degree(const Node &node) {
return outgoing.size() + incoming.size();
}
使用替代定义(不计算循环两次),您需要为传入和传出的边创建一个特殊情况。
【讨论】: