解析类继承算法

时间:2010-11-28 12:38:54

标签: algorithm language-agnostic sorting recursion

我有一个带有类继承信息的对的列表,比如这个


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

是否有任何特定算法展平此信息?

像这样:

  

人 - > SpecialPerson - > VerySpecialPerson

1 个答案:

答案 0 :(得分:1)

最后,它归结为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,与您的示例不同。