我理解基本概念,但是有没有使用过任何特殊算法,或者某些博客,论文甚至是关于这个主题的书籍,有人建立自己的系统?关于实际实现这样的系统的信息似乎很少。
答案 0 :(得分:2)
依赖树本身很容易加载,您只需要从键(例如名称)到对象的映射。
你没有指定任何语言,所以我选择了Python。预期输入是“[name]:[space separation dependencies]”形式的行文件。
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'])}
[注意:我选择了一个快捷方式,因为我真的不需要行文件,而是一行可迭代的行(文件遇到),所以我将一个行列表传递给函数。]
你可以在这个基本结构之上构建各种各样的函数,并将它和那些概念(比如依赖vs推荐vs建议,甚至冲突与替换等)封装到特定于你的系统的各种对象中。
答案 1 :(得分:0)
许多其他概念也涉及依赖树,例如SNMP MIB解析,C / C ++源代码编译。所以你可以参考任何其他谈论这个的材料:)