代码之家  ›  专栏  ›  技术社区  ›  c0rnh0li0

解析类继承算法

  •  0
  • c0rnh0li0  · 技术社区  · 14 年前

    我有一个类继承信息的对列表,如下所示

    
    [
      [Person, null],
      [Person, SpecialPerson], // Person extends SpecialPerson
      [SpecialPerson, VerySpecialPerson], // SpecialPerson extends VerySpecialPerson
    ]
    

    有什么特别的算法 扁平化 这个信息?

    这样地:

    人员->特殊人员->一般特殊人员

    1 回复  |  直到 14 年前
        1
  •  1
  •   smilingthax    14 年前

    最后,它归结为一个DAG(有向无环图)。因此,您将执行广度优先搜索或深度优先搜索。您只需要树的简化大小写。

    示例(BFS,伪代码,未测试):

    List<Array<Typespec>> flatten(Array<Pair<Typespec,Typespec>> input) {
      List<Array<Typespec>> result;
      Queue<Array<Typespec>*> q;
    
      var elem=&result.append([null]);
      q.append(elem);
      while (!q.empty()) {
        for (i in input) {
          if (i.first==q.front().back()) {
            var elem=&result.append(q.front().clone().append(i.second));
            q.append(elem);
          }
        }
        q.pop_front();
      }
      return result;
    }
    

    假设你的意思是 [null,Person] ,而不是相反。注意它会产生 null 在每一个结果的开头,不同于你的例子。