说,有一个树数据结构,每个叶子定义了一组用于查找的键:
*
|- A = 1, B = 2
|- *
|- C = 4
|- *
|- D = 5
|- D = 6, E = 7
我需要一种在深度优先遍历树时查找任何给定叶子的键值的方法。
我想到了两种方法:
如果在当前叶子中找不到该值,请检查其父级的字典,依此类推,返回树的根目录。
有一个全局字典,每个叶子在遍历时插入/删除它的键。在此全局字典中执行查找。
最有可能的是,每个都会有很多带有几个键的叶子,每个键大约有3-4个查找。
哪种方法更有效?或者,也许,还有另一种做法比两者都好?
答案 0 :(得分:1)
您正在实施的编程语言肯定会定义名称解析的确切规则。我认为这不会导致深度优先搜索。很明显,名称解析规则看起来像这样:
using
/ import
或其他任何链接到其他范围的构造,在其他范围内执行搜索(所有这些范围,按顺序),并在其中递归:
换句话说,你逐渐进入封闭范围的树,并决定是否搜索任何外国人的'引用范围。诸如using
/ import
之类的语句会导致范围之间的引用,这反过来会导致被视为范围树的实际上是有向图。
关于查找表构造,我从一个简单的哈希表开始。 Prefix trees (tries)也适用于这些场景。
最后但并非最不重要的是,除非在编译数十行甚至数十万行代码时遇到真正的性能问题,否则我不会关心查找性能。