-1

我了解基本概念,但是是否有使用任何特殊算法或一些博客、论文甚至书籍供构建自己的系统的人使用?关于实际实施这样的系统的信息似乎很少。

4

2 回答 2

2

依赖树本身很容易加载,您所需要的只是从键(例如名称)到对象的一些映射。

你没有指定任何语言,所以我选择了 Python。预期的输入是格式为“[名称]:[空格分隔的依赖项]”的行文件。

def load_depends(file):
  depends = {}
  for line in file:
    line = line.strip()
    if not line or line.startswith("#"):  # allow blanks and comments
      continue
    name, _, deps = line.partition(":")
    deps = deps.strip()
    assert deps, "invalid input"  # most basic input error-checking
    depends[name] = set(deps.split())
  return depends

此代码假定任何未列出的项目具有零依赖性,如果需要,您可以遍历树以添加空条目。至少你应该检查递归依赖。

例子:

>>> input = """\
... a: b c
... b: c
... c: d
... e: a
... """.split("\n")
>>> from pprint import pprint
>>> pprint(load_depends(input))
{'a': set(['b', 'c']),
 'b': set(['c']),
 'c': set(['d']),
 'e': set(['a'])}

[注意:我采取了捷径,因为我真的不需要行文件,而是需要可迭代的行(文件遇到),所以我将行列表传递给函数。]

您可以在此基本结构之上构建各种功能,并将其和这些概念(如依赖、推荐、建议,甚至冲突与替换等)封装到特定于您的系统的各种对象中。

于 2010-02-22T11:40:20.603 回答
0

许多其他概念也涉及依赖树,例如 SNMP MIB 解析、C/C++ 源代码编译。所以你可以参考任何其他谈论这个的材料:)

于 2009-11-30T08:28:06.063 回答