-
Notifications
You must be signed in to change notification settings - Fork 96
Open
Description
按我理解,无向图情况判断逻辑的推导如下:
| | // 设 (X)-e2-(A)-edge-(B)-e1-(C), (X 为未知数,可能是 B、C 或其他节点) 则有:
| | // e1 (B.label, e1_label, C.label), e2 (X.label, e2_label, A.label)
| | // 已知 e1, e2 在 DFSCode 的最右路径中,最右路径要求都是正向边,因此有 B.label <= C.label, X.label <= A.label,
| | // 又知能进入此方法的 DFSCode 是 min-DFSCode,边按字典序排序, 其中 e1 在 e2 前,,则有 e1 < e2, 即:
| | // B.label < X.label || (B.label == X.label && e1_label < e2_label) || (B.label == X.label && e1_label == e2_label && C.label <= A.label)
| | // 可以推出有:B.label < X.label <= A.label \|\| B.label == X.label <= A.label,即 B.label <= A.label
| | // 对于 e1 (B.label, e1_label, C.label), edge (A.label, e_label, B.label), 已知其中 B.label <= A.label
| | // 需判断:1. e1 < edge;
| | // 当 B.label < A.label 时,e1 < edge 恒为 true,证得 1。但是从 B.label < A.label 得知 edge 是反向边,舍弃;
| | // 当 B.label == A.label 时,要使 e1 <= edge,则要判断以下两种情况中存在一种是 true:
| | // 1. 有 e1_label < e_label
| | // 2. 当 e1_label == e_label 时,需有 C.label <= B.label
| | // 已知 B.label == A.label,等价于判断 C.label <= A.label
| | // 按上面的逻辑代码应该是:
| | // 若 e1.elb < e.elb or (e1.elb == e.elb and g.vertices[e1.to].vlb <= g.vertices[e2.to].vlb) 返回 edge那么对于有向图情况,推导应该是:
// **有向图情况**
// 设 (X)-e2->(A)-edge->(B)-e1->(C), (X 为未知数,可能是 B、C 或其他节点) 则有:
// e1 (B.label, e1_label, C.label), e2 (X.label, e2_label, A.label), edge (A.label, e_label, B.label)
// 已知 e1, e2 在 DFSCode 的最右路径中,又知能进入此方法的 DFSCode 是 min-DFSCode,边按字典序排序, 其中 e1 在 e2 前
// 要使 e1 <= edge,则需要有:
// B.label < A.label || (B.label == A.label && e1_label < e_label) || (B.label == A.label && e1_label == e_label && C.label <= B.label)
// 那么就要判断以下三种情况中存在一种是 true:
// 1. 有 B.label < A.label
// 2. 当 B.label == A.label 时,有 e1_label < e_label
// 3. 当 B.label == A.label && e1_label == e_label 时,需有 C.label <= B.label
// 按上面的逻辑伪代码应该是:
// 若 g.vertices[e1.frm].vlb < g.vertices[e2.to].vlb or
// (g.vertices[e1.frm].vlb == g.vertices[e2.to].vlb and e1.elb < e.elb) or
// (g.vertices[e1.frm].vlb == g.vertices[e2.to].vlb and e1.elb == e.elb and g.vertices[e1.to].vlb <= g.vertices[e2.to].vlb) 返回 edge
// 对于 (出自 github betterenvi/gSpan) 的逻辑认为情况 3 恒为 true 逻辑伪代码是:
// 若 g.vertices[e1.frm].vlb < g.vertices[e2.to].vlb or (g.vertices[e1.frm].vlb == g.vertices[e2.to].vlb and e1.elb <= e.elb) 返回 edge需要请教的是为何情况 3 恒为 true ? 有向图情况边起点的标签和终点的标签没有任何大小关系
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels