Skip to content

讨论 _get_backward_edge 有向图情况的处理 #32

@Guitenbay

Description

@Guitenbay

按我理解,无向图情况判断逻辑的推导如下:

  |   | //  (X)-e2-(A)-edge-(B)-e1-(C), (X 为未知数可能是 BC 或其他节点) 则有:
  |   | // 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 为未知数可能是 BC 或其他节点) 则有:
// 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 ? 有向图情况边起点的标签和终点的标签没有任何大小关系

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions