algorithm - 解析类继承算法

标签 algorithm language-agnostic sorting recursion

我有一个包含这样的类继承信息的对列表


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

是否有任何特定的算法可以扁平化这些信息?

像这样:

Person -> SpecialPerson -> VerySpecialPerson

最佳答案

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

关于algorithm - 解析类继承算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4296767/

相关文章:

language-agnostic - 软件开发的难点是什么?

algorithm - 解决问题的动态规划技术

language-agnostic - 为什么不是每种类型的对象都可序列化?

python - Pandas 分组排序

algorithm - 图的 3 着色(多项式时间)?

php - 在具有所有可能性的字符之间生成点

algorithm - KMP 字符串搜索算法的最坏情况是什么?

algorithm - 计算一组矩阵上 for 循环的复杂性

javascript - 根据 1 个特定值的标识将对象拆分为多个有序数组

javascript - 如果关联数组从正则表达式返回,则它是排序索引