作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个如下所示的数据结构:
public class Node
{
public string Code { get; set; }
public string Description { get; set; }
...
public List<Node> Children { get; set; }
}
我想编写一个方法,在给定指定的代码
的情况下返回一个特定的节点。通常我只会通过层次结构进行递归遍历以找到节点,但我担心性能。层级中会有几千个节点,这个方法会被调用很多很多次。
我如何构建它以使其更快?我是否可以使用现有的数据结构,该结构可能在 Code
上执行二进制搜索,同时保留层次结构,而无需自己重新实现某种形式的二进制搜索?
最佳答案
将所有节点添加到以代码为键的字典中。 (你可以做一次),字典中的查找基本上是 O(1)。
void FillDictionary(Dictionary<string, Node> dictionary, Node node)
{
if (dictionary.ContainsKey(node.Code))
return;
dictionary.Add(node.Code, node);
foreach (Node child in node.Children)
FillDictionary(dictionary, child)
}
如果你知道根,用法将是:
var dictionary = new Dictionary<string, Node>();
FillDictionary(dictionary, rootNode);
如果不这样做,您可以在所有节点上使用相同的字典调用 FillDictionary()
方法。
关于c# - 我如何有效地搜索这个层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4079665/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!